lib.zip
效果

main.dart
import "package:flutter/material.dart";import './lakes/Lakes.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'app', theme: ThemeData( primarySwatch: Colors.blue, ), home: Lakes(), ); }}
lakes/Lakes.dart
import "package:flutter/material.dart";import "./TitleSection.dart";import "./IconSection.dart";import "./TextSection.dart";class Lakes extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Column( children: <Widget>[ // 第一部分 Container( height: 300, child: Image( fit: BoxFit.cover, image: AssetImage('images/1.jpg'), ), ), // 第二部分 TitleSection(), // 第三部分 IconSection(), // 第四部分 TextSection(), ], ), ); }}// Column 纵向排版// Row 横向排版// 给他们俩个传递参数,都会有一个属性 children,后面跟着一个数组,// 数组里面的每一项都是一个 Widget 组件
lakes/TitleSection.dart
import "package:flutter/material.dart";class TitleSection extends StatelessWidget { @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.only(top: 20, left: 20, right: 20), child: Row( // Row主轴:从左到右 children: <Widget>[ // 左部分 // Expanded 弹性布局组件 Expanded( child: Column( // Column主轴:从上到下 crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.only(bottom: 5), child: Text('我是 demo 标题', style: TextStyle(fontWeight: FontWeight.w700)), ), Text('我是 demo 副标题', style: TextStyle(color: Colors.grey)), ], ), ), // 中 星星图标 Icon(Icons.star, color: Colors.red), // 右 数字 Text('41'), ], ), ); }}
lakes/IconSection.dart
import "package:flutter/material.dart";class IconSection extends StatelessWidget { @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.only(top: 20), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ _IconItem(title: 'call', icon: Icons.call), _IconItem(title: 'route', icon: Icons.near_me), _IconItem(title: 'share', icon: Icons.share), ], ), ); }}class _IconItem extends StatelessWidget { _IconItem({key, @required this.icon, @required this.title}) : super(key: key); final IconData icon; final String title; @override Widget build(BuildContext context) { return Column( children: [ Padding( padding: EdgeInsets.only(bottom: 5), child: Icon(icon, color: Colors.blue), ), Text(title, style: TextStyle(color: Colors.blue)), ], ); }}
lakes/TextSection.dart
import "package:flutter/material.dart";class TextSection extends StatelessWidget { @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.all(20), child: Text(''' Flutter与用于构建移动应用程序的其它大多数框架不同,因为Flutter既不使用WebView,也不使用操作系统的原生控件。 相反,Flutter使用自己的高性能渲染引擎来绘制widget。这样不仅可以保证在Android和iOS上UI的一致性,而且也可以避免对原生控件依赖而带来的限制及高昂的维护成本。 Flutter使用Skia作为其2D渲染引擎,Skia是Google的一个2D图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现,Skia是跨平台的,并提供了非常友好的API,目前Google Chrome浏览器和Android均采用Skia作为其绘图引擎。 ''', style: TextStyle(height: 1.2)), ); }}