lib.zip

效果

image.png

main.dart

  1. import "package:flutter/material.dart";
  2. import './lakes/Lakes.dart';
  3. void main() => runApp(MyApp());
  4. class MyApp extends StatelessWidget {
  5. @override
  6. Widget build(BuildContext context) {
  7. return MaterialApp(
  8. title: 'app',
  9. theme: ThemeData(
  10. primarySwatch: Colors.blue,
  11. ),
  12. home: Lakes(),
  13. );
  14. }
  15. }

lakes/Lakes.dart

  1. import "package:flutter/material.dart";
  2. import "./TitleSection.dart";
  3. import "./IconSection.dart";
  4. import "./TextSection.dart";
  5. class Lakes extends StatelessWidget {
  6. @override
  7. Widget build(BuildContext context) {
  8. return Scaffold(
  9. body: Column(
  10. children: <Widget>[
  11. // 第一部分
  12. Container(
  13. height: 300,
  14. child: Image(
  15. fit: BoxFit.cover,
  16. image: AssetImage('images/1.jpg'),
  17. ),
  18. ),
  19. // 第二部分
  20. TitleSection(),
  21. // 第三部分
  22. IconSection(),
  23. // 第四部分
  24. TextSection(),
  25. ],
  26. ),
  27. );
  28. }
  29. }
  30. // Column 纵向排版
  31. // Row 横向排版
  32. // 给他们俩个传递参数,都会有一个属性 children,后面跟着一个数组,
  33. // 数组里面的每一项都是一个 Widget 组件

lakes/TitleSection.dart

  1. import "package:flutter/material.dart";
  2. class TitleSection extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Container(
  6. padding: EdgeInsets.only(top: 20, left: 20, right: 20),
  7. child: Row(
  8. // Row主轴:从左到右
  9. children: <Widget>[
  10. // 左部分
  11. // Expanded 弹性布局组件
  12. Expanded(
  13. child: Column(
  14. // Column主轴:从上到下
  15. crossAxisAlignment: CrossAxisAlignment.start,
  16. children: [
  17. Padding(
  18. padding: EdgeInsets.only(bottom: 5),
  19. child: Text('我是 demo 标题', style: TextStyle(fontWeight: FontWeight.w700)),
  20. ),
  21. Text('我是 demo 副标题', style: TextStyle(color: Colors.grey)),
  22. ],
  23. ),
  24. ),
  25. // 中 星星图标
  26. Icon(Icons.star, color: Colors.red),
  27. // 右 数字
  28. Text('41'),
  29. ],
  30. ),
  31. );
  32. }
  33. }

lakes/IconSection.dart

  1. import "package:flutter/material.dart";
  2. class IconSection extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Container(
  6. margin: EdgeInsets.only(top: 20),
  7. child: Row(
  8. mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  9. children: [
  10. _IconItem(title: 'call', icon: Icons.call),
  11. _IconItem(title: 'route', icon: Icons.near_me),
  12. _IconItem(title: 'share', icon: Icons.share),
  13. ],
  14. ),
  15. );
  16. }
  17. }
  18. class _IconItem extends StatelessWidget {
  19. _IconItem({key, @required this.icon, @required this.title}) : super(key: key);
  20. final IconData icon;
  21. final String title;
  22. @override
  23. Widget build(BuildContext context) {
  24. return Column(
  25. children: [
  26. Padding(
  27. padding: EdgeInsets.only(bottom: 5),
  28. child: Icon(icon, color: Colors.blue),
  29. ),
  30. Text(title, style: TextStyle(color: Colors.blue)),
  31. ],
  32. );
  33. }
  34. }

lakes/TextSection.dart

  1. import "package:flutter/material.dart";
  2. class TextSection extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Container(
  6. padding: EdgeInsets.all(20),
  7. child: Text('''
  8. Flutter与用于构建移动应用程序的其它大多数框架不同,因为Flutter既不使用WebView,也不使用操作系统的原生控件。 相反,Flutter使用自己的高性能渲染引擎来绘制widget。这样不仅可以保证在Android和iOS上UI的一致性,而且也可以避免对原生控件依赖而带来的限制及高昂的维护成本。
  9. Flutter使用Skia作为其2D渲染引擎,Skia是Google的一个2D图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现,Skia是跨平台的,并提供了非常友好的API,目前Google Chrome浏览器和Android均采用Skia作为其绘图引擎。
  10. ''', style: TextStyle(height: 1.2)),
  11. );
  12. }
  13. }