一、flutter环境搭建
onTap:
onTapDown: (details) {},
onTapUp: (details) {},
onTap: () {},
onTapCancel: () {},
双击事件
onDoubleTap: () {},
长按
onLongPress: () {},
onLongPressStart: () {},
onLongPressMoveUpdate: () {},
onLongPressUp: () {},
onLongPressEnd: () {},
垂直滑动
onVerticalDragDown: (details) {},
onVerticalDragStart: (details) {},
onVerticalDragUpdate: (details) {},
onVerticalDragEnd: (details) {},
onVerticalDragCancel: () {},
水平滑动
onHorizontalDragDown: (details) {},
onHorizontalDragStart: (details) {},
onHorizontalDragUpdate: (details) {},
onHorizontalDragEnd: (details) {},
onHorizontalDragCancel: () {},
Pan事件
指针已接触屏幕并可能开始移动。
onPanDown: (details) {},
指针已经接触屏幕并开始移动。
onPanStart: (details) {},
与屏幕接触并移动的指针再次移动。
onPanUpdate: (details) {},
先前与屏幕接触并移动的指针不再与屏幕接触,并且当它停止接触屏幕时以特定速度移动。
onPanEnd: (details) {},
先前触发 onPanDown 的指针未完成。
onPanCancel: () {},
Scale事件
onScaleStart: (details) {},
onScaleUpdate: (details) {},
onScaleEnd: (details) {},
一、flutter http通信

flutter 中future 对象用法
什么是Future?
Future的常见用法?
获取Future的结果?
捕获Future的异常?
结合async,await?
future.whenComplete?
future.timeout?
什么是FutureBuilder?
FutureBuilder常见的用法?

Future testFuture() {
// throw new Error();
return Future.value('success');
// return Future.error('error');
}

main() {
testFuture().then((s) {
print(s);
}, onError: (e) {
print('onError:');
print(e);
}).catchError((e) {
print('catchError:');
print(e);
});
}

如果catchError与onError同时存在,则会只调用onError;
Future的then的原型:
Future then(FutureOr onValue(T value), {Function onError});

第一个参数会成功的结果回调,第二个参数onError可选表示执行出现异常。
练一练
结合async await
Future是异步的,如果我们要将异步转同步,那么可以借助async await来完成。
import 'dart:async';

test() async {
int result = await Future.delayed(Duration(milliseconds: 2000), () {
return Future.value(123);
});
print('t3:' + DateTime.now().toString());
print(result);
}

main() {
print('t1:' + DateTime.now().toString());
test();
print('t2:' + DateTime.now().toString());
}

练一练
future.whenComplete
有时候我们需要在Future结束的时候做些事情,我们知道then().catchError()的模式类似于try-catch,try-catch有个finally代码块,而future.whenComplete就是Future的finally。
import 'dart:async';
import 'dart:math';

void main() {
var random = Random();
Future.delayed(Duration(seconds: 3), () {
if (random.nextBool()) {
return 100;
} else {
throw 'boom!';
}
}).then(print).catchError(print).whenComplete(() {
print('done!');
});
}

future.timeout
完成一个异步操作可能需要很长的时间,比如:网络请求,但有时我们需要为异步操作设置一个超时时间,那么,如何为Future设置超时时间呢?
import 'dart:async';

void main() {
new Future.delayed(new Duration(seconds: 3), () {
return 1;
}).timeout(new Duration(seconds: 2)).then(print).catchError(print);
}

运行上述代码会看到:TimeoutException after 0:00:02.000000: Future not completed。
练一练
什么是FutureBuilder?
FutureBuilder是一个将异步操作和异步UI更新结合在一起的类,通过它我们可以将网络请求,数据库读取等的结果更新的页面上。
FutureBuilder的构造方法
FutureBuilder({Key key, Future future, T initialData, @required AsyncWidgetBuilder builder })

future: Future对象表示此构建器当前连接的异步计算;
initialData: 表示一个非空的Future完成前的初始化数据;
builder: AsyncWidgetBuilder类型的回到函数,是一个基于异步交互构建widget的函数;
这个builder函数接受两个参数BuildContext context 与 AsyncSnapshot snapshot,它返回一个widget。AsyncSnapshot包含异步计算的信息,它具有以下属性:
connectionState - 枚举ConnectionState的值,表示与异步计算的连接状态,ConnectionState有四个值:none,waiting,active和done; data - 异步计算接收的最新数据; error - 异步计算接收的最新错误对象;
AsyncSnapshot还具有hasData和hasError属性,以分别检查它是否包含非空数据值或错误值。
现在我们可以看到使用FutureBuilder的基本模式。 在创建新的FutureBuilder对象时,我们将Future对象作为要处理的异步计算传递。 在构建器函数中,我们检查connectionState的值,并使用AsyncSnapshot中的数据或错误返回不同的窗口小部件。
https://flutter-academy.com/async-in-flutter-futurebuilder/
FutureBuilder的使用?
...
class _MyAppState extends State {
String showResult = '';

Future fetchPost() async {
final response = await http
.get('https://www.devio.org/io/flutter_app/json/test_common_model.json');
Utf8Decoder utf8decoder = Utf8Decoder(); //fix 中文乱码
var result = json.decode(utf8decoder.convert(response.bodyBytes));
return CommonModel.fromJson(result);
}

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Future与FutureBuilder实用技巧'),
),
body: FutureBuilder(
future: fetchPost(),
builder:
(BuildContext context, AsyncSnapshot snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return new Text('Input a URL to start');
case ConnectionState.waiting:
return new Center(child: new CircularProgressIndicator());
case ConnectionState.active:
return new Text('');
case ConnectionState.done:
if (snapshot.hasError) {
return new Text(
'${snapshot.error}',
style: TextStyle(color: Colors.red),
);
} else {
return new Column(children: [
Text('icon:${snapshot.data.icon}'),
Text('statusBarColor:${snapshot.data.statusBarColor}'),
Text('title:${snapshot.data.title}'),
Text('url:${snapshot.data.url}')
]);
}
}
}),
),
);
}
}

class CommonModel {
final String icon;
final String title;
final String url;
final String statusBarColor;
final bool hideAppBar;

CommonModel(
{this.icon, this.title, this.url, this.statusBarColor, this.hideAppBar});

factory CommonModel.fromJson(Map json) {
return CommonModel(
icon: json['icon'],
title: json['title'],
url: json['url'],
statusBarColor: json['statusBarColor'],
hideAppBar: json['hideAppBar'],
);
}
}

如何实现垂直滚动列表?
import 'package:flutter/material.dart';

void main() => runApp(MyApp());
const CITY_NAMES = [ '北京', '上海', '广州', '深圳', '杭州', '苏州', '成都', '武汉', '郑州', '洛阳', '厦门', '青岛', '拉萨' ];

class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
final title = 'Basic List';

return MaterialApp(
  title: title,
  home: Scaffold(
    appBar: AppBar(
      title: Text(title),
    ),
    body: ListView(
      children: _buildList(),
    ),
  ),
);

}

List _buildList() {
return CITY_NAMES.map((city) => _item(city)).toList();
}

Widget _item(String city) {
return Container(
height: 80,
margin: EdgeInsets.only(bottom: 5),
alignment: Alignment.center,
decoration: BoxDecoration(color: Colors.teal),
child: Text(
city,
style: TextStyle(color: Colors.white, fontSize: 20),
),
);
}
}

如何实现水平滚动列表?
import 'package:flutter/material.dart';

void main() => runApp(MyApp());
const CITY_NAMES = [ '北京', '上海', '广州', '深圳', '杭州', '苏州', '成都', '武汉', '郑州', '洛阳', '厦门', '青岛', '拉萨' ];

class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
final title = '水平';

return MaterialApp(
  title: title,
  home: Scaffold(
    appBar: AppBar(
      title: Text(title),
    ),
    body: Container(
      height: 200,
      child: ListView(
        scrollDirection: Axis.horizontal,
        children: _buildList(),
      ),
    ),
  ),
);

}

List _buildList() {
return CITY_NAMES.map((city) => _item(city)).toList();
}

Widget _item(String city) {
return Container(
width: 160,
margin: EdgeInsets.only(right: 5),
alignment: Alignment.center,
decoration: BoxDecoration(color: Colors.teal),
child: Text(
city,
style: TextStyle(color: Colors.white, fontSize: 20),
),
);
}
}

一、基础组件(Basic widgets)

(1)、Text
(2)、Icon
(3)、Image
(4)、Button
(5)、FlutterLogo
二、单一元素组件(Single-Child)
1、Container
2、Container的约束
3、SingleChildScroiidView
4、FitteddBox
5、FractionallySizedBox
6、ConstrainedBox
7、Baseline
8、IntrinsicWidth 和IntrinsicHeight
三、多子元素组件
1、Scaffold
2 、AppBar
3、Row 和Column
4、ListView
5、GridView
6、CustomScrollView
7、Flex
8、Wrap
四、状态管理
1、Widget树
2、Context
3、StatefulWidget
4、statelessWidget
5、StatefulWidget组成
6、Sate
7、Sate生命周期
8、Widget的唯一身份标识key
9、InheritedWidget
五、事件处理
1、原始指针事件
基本用法
忽略事件
2、GestrureDetector
基本用法
常用事件
拖拽和缩放效果
事件竞争和手势冲突
手势识别
3、事件原理与分发机制
4、事件通知
六、动画
1、Animation
2、Animatable
3、AnimationController
4、Tween
5、Tween.animate
6、Curve
动画的封装与简化
1、AnimatedWidget
2、AnimatedBuilder
Hello动画
1、基本用法
2、实现原理
交错动画
动画实例
七、使用网络技术与异步编程
1、网络协议简介
2、网络编程
HttpClient
http库
八、JSON解析
1、json转成Dartd对象
2、完整的例子
3、根据Json使用工具生成实体类
九、dio库
基本用法
1、dio单列
2、dio拦截器
3、dio拦截器连
4、dio适配器
5、dio库总结
十、异步编程
1、isolate
2、event loop
3.线程模型与isolate
4、创建单独的iolate
5、Stream事件
十一、路由
1、基本用法
2、静态路由
3、动态路由
4、参数回传
十二、路由栈
1、路由栈详解
2、pushReplacementNameed
3、popAndPushNamed
自定义路由
十三、自定义路由
1、 share_preference本地储存
2、shared_preferences的常用操作
3、shared_preference举例
十四、SOLite数据库
1、sqfite依赖库
2、封装SQLHelpers
3、sqflite实现员工打卡
十五、文件形式储存
1、path_provide
2、简单的日记本事例
十六、插件与混合工程
1、package
2、添加package的几种方式
3、更新package
4、创建自己的package
5、发布package
Flutter 如何发送get 和post请求
如何将response转化为对象
如何将请求结果放在屏幕

二、Flutter Container组件、Text组件详解

import 'package:flutter/material.dart';

void main(){
runApp(MyApp());
}

class MyApp extends StatelessWidget{br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home:Scaffold(
appBar: AppBar(
title:Text("flutter demo")
),
body:HomeContent()
)
);
}
}

class HomeContent extends StatelessWidget{br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Container(
child: Text(
'各位同学大家好我是主讲老师大地,各位同学大家好我是主讲老师大地',
textAlign:TextAlign.left,
overflow:TextOverflow.ellipsis ,
// overflow:TextOverflow.fade ,
maxLines: 2,
textScaleFactor: 1.8,
style:TextStyle(
fontSize: 16.0,
color:Colors.red,
// color:Color.fromARGB(a, r, g, b)
fontWeight: FontWeight.w800,
fontStyle: FontStyle.italic,
decoration:TextDecoration.lineThrough,
decorationColor:Colors.white,
decorationStyle: TextDecorationStyle.dashed,
letterSpacing: 5.0

            )

          ),
          height: 300.0,
          width: 300.0,
          decoration: BoxDecoration(
            color: Colors.yellow,
            border: Border.all(
              color: Colors.blue,
              width: 2.0
            ),
            borderRadius: BorderRadius.all(
            //  Radius.circular(150),    //圆形
              Radius.circular(10),  
            )
          ),
          // padding:EdgeInsets.all(20),

          // padding:EdgeInsets.fromLTRB(10, 30, 5, 0)

          margin: EdgeInsets.fromLTRB(10, 30, 5, 0),

          // transform:Matrix4.translationValues(100,0,0)

          // transform:Matrix4.rotationZ(0.3)

          // transform:Matrix4.diagonal3Values(1.2, 1, 1)

          alignment: Alignment.bottomLeft,

      ),
);

}

}
三 、Flutter 图片组件Image 、本地图片、远程图片、图片剪切
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Container(
child:Image.asset('images/a.jpeg',
fit: BoxFit.cover,
),
height: 300,
width: 300,
)
);
}
}
第三天 Flutter ListView基础列表组件、水平列表组件、图标组件
(1)
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}

class HomeContent extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
height: 180,
child: ListView(
scrollDirection: Axis.horizontal,
children: [
Container(
width: 180.0,
color: Colors.red,
),
Container(
width: 180.0,
color: Colors.orange,
child: ListView(
children: [
Image.network("https://www.itying.com/images/flutter/1.png"),
Text('我是一个文本')
],
),
),
Container(
width: 180.0,
color: Colors.blue,
),
Container(
width: 180.0,
color: Colors.deepOrange,
),
Container(
width: 180.0,
color: Colors.deepPurpleAccent,
),
],
),
);
}
}
(2)例子
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
padding: EdgeInsets.all(10),
children: [
ListTile(
title: Text(
'华北黄淮高温持续 南方强降雨今起强势登场',
style: TextStyle(
fontSize: 24
),
),
subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),
),
ListTile(
title: Text('中国13家运营波音737MAX航空公司均已提出索赔场',
style: TextStyle(
fontSize: 24
),),
subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),
),
ListTile(
title: Text('华中国13家运营波音737MAX航空公司均已提出索赔登场'),
subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),
),
ListTile(
title: Text('华北黄淮高温雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),
),
ListTile(
title: Text('华北黄淮高温持续 势登场'),
subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),
),
ListTile(
title: Text('华北黄淮高温起强势登场'),
subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),
),
ListTile(
title: Text('华北黄淮高雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),
),
ListTile(
title: Text('华北黄淮高温持续 南方强降雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,北方今年首轮大范围高温拉开序幕,昨天是高温发展的最鼎盛阶段"),
)

  ],
);

}
}
(3)例子
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
padding: EdgeInsets.all(10),
children: [

      ListTile(
          leading:Icon(Icons.settings,size:40),
          title: Text('华北黄淮高温雨今起强势登场'),
          subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
      ),
      ListTile(              
          title: Text('华北黄淮高温雨今起强势登场'),
          subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
          trailing:Icon(Icons.home),
      ),
      ListTile(
          leading:Icon(Icons.pages),
          title: Text('华北黄淮高温雨今起强势登场'),
          subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
      ),
      ListTile(
          leading:Icon(Icons.settings),
          title: Text('华北黄淮高温雨今起强势登场'),
          subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
      ),
      ListTile(
          leading:Icon(Icons.home,color: Colors.yellow,),
          title: Text('华北黄淮高温雨今起强势登场'),
          subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
      ),
      ListTile(
          leading:Icon(Icons.pages),
          title: Text('华北黄淮高温雨今起强势登场'),
          subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
      )          
  ],
);

}
}
(4)例子
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
padding: EdgeInsets.all(10),
children: [
ListTile(
leading:Image.network("https://www.itying.com/images/flutter/1.png"),
title: Text('华北黄淮高温雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
),
ListTile(
leading:Image.network("https://www.itying.com/images/flutter/2.png"),
title: Text('保监局50天开32罚单 “断供”违规资金为房市降温'),
subtitle: Text("中国天气网讯 保监局50天开32罚单 “断供”违规资金为房市降温"),
),
ListTile(
title: Text('华北黄淮高温雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
trailing:Image.network("https://www.itying.com/images/flutter/2.png")
),
ListTile(
title: Text('华北黄淮高温雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
trailing:Icon(Icons.home),
),
ListTile(
leading:Icon(Icons.pages),
title: Text('华北黄淮高温雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
),
ListTile(
leading:Icon(Icons.settings),
title: Text('华北黄淮高温雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
),
ListTile(
leading:Icon(Icons.home,color: Colors.yellow,),
title: Text('华北黄淮高温雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
),
ListTile(
leading:Icon(Icons.pages),
title: Text('华北黄淮高温雨今起强势登场'),
subtitle: Text("中国天气网讯 21日开始,华北黄淮高温雨今起强势登场"),
)
],
);
}
}
(4)例子
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
padding: EdgeInsets.all(10),
children: [
Image.network("https://www.itying.com/images/flutter/1.png"),

      Container(
        child: Text(
            '我是一个标题',
            textAlign: TextAlign.center, 
            style: TextStyle(
              fontSize: 28,
            ),            
        ),
        height: 60,
        padding:EdgeInsets.fromLTRB(0, 10, 0, 10),
      ),

      Image.network("https://www.itying.com/images/flutter/2.png"),
      Container(
        child: Text(
            '我是一个标题',
            textAlign: TextAlign.center, 
            style: TextStyle(
              fontSize: 28,
            ),            
        ),
        height: 60,
        padding:EdgeInsets.fromLTRB(0, 10, 0, 10),
      ),

      Image.network("https://www.itying.com/images/flutter/3.png"),
      Container(
        child: Text(
            '我是一个标题',
            textAlign: TextAlign.center, 
            style: TextStyle(
              fontSize: 28,
            ),            
        ),
        height: 60,
        padding:EdgeInsets.fromLTRB(0, 10, 0, 10),
      ),

      Image.network("https://www.itying.com/images/flutter/4.png"),
      Container(
        child: Text(
            '我是一个标题',
            textAlign: TextAlign.center, 
            style: TextStyle(
              fontSize: 28,
            ),            
        ),
        height: 60,
        padding:EdgeInsets.fromLTRB(0, 10, 0, 10),
      ),

      Image.network("https://www.itying.com/images/flutter/1.png"),
      Container(
        child: Text(
            '我是一个标题',
            textAlign: TextAlign.center, 
            style: TextStyle(
              fontSize: 28,
            ),            
        ),
        height: 60,
        padding:EdgeInsets.fromLTRB(0, 10, 0, 10),
      ),

      Image.network("https://www.itying.com/images/flutter/2.png"),
      Container(
        child: Text(
            '我是一个标题',
            textAlign: TextAlign.center, 
            style: TextStyle(
              fontSize: 28,
            ),            
        ),
        height: 60,
        padding:EdgeInsets.fromLTRB(0, 10, 0, 10),
      ),

      Image.network("https://www.itying.com/images/flutter/3.png"),
      Container(
        child: Text(
            '我是一个标题',
            textAlign: TextAlign.center, 
            style: TextStyle(
              fontSize: 28,
            ),            
        ),
        height: 60,
        padding:EdgeInsets.fromLTRB(0, 10, 0, 10),
      ),

      Image.network("https://www.itying.com/images/flutter/1.png"),
      Image.network("https://www.itying.com/images/flutter/2.png"),
      Image.network("https://www.itying.com/images/flutter/3.png"),

  ],
);

}
}
动态列表
第四 flutter ListView动态列表组件 以及循环动态数据
1、import 'package:flutter/material.dart';

import 'res/listData.dart';

void main() => runApp(MyApp());
class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
//自定义方法
Widget _getListData(context,index){
return ListTile(
title: Text(listData[index]["title"]),
leading:Image.network(listData[index]["imageUrl"]), );
}
@override
br/>subtitle:Text(listData[index]["author"])
);
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView.builder(
itemCount:listData.length,
itemBuilder:this._getListData
);
}
}
2、import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
//自定义方法
List _getData(){
return [
ListTile(
title: Text("我是一个列表"),
),
ListTile(
title: Text("我是一个列表"),
),
ListTile(
title: Text("我是一个列表"),br/>)
];
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
children: this._getData(),
);
}
}
3、import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
//自定义方法
List _getData(){
List list=new List();
for(var i=0;i<20;i++){
list.add(ListTile(
title: Text("我是$i列表"),
));
}
return list;br/>}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
children: this._getData(),
);
}
}
4、import 'package:flutter/material.dart';
import 'res/listData.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
//自定义方法
List _getData(){
var tempList=listData.map((value){
return ListTile(
leading:Image.network(value["imageUrl"]),
title:Text(value["title"]),
subtitle:Text(value["author"])
);
});
// ('124124','124214')
return tempList.toList();br/>}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
children: this._getData(),
);
}
}

数据
List listData=[
{
"title": 'Candy Shop',
"author": 'Mohamed Chahin',
"imageUrl": '',
},
{
"title": 'Childhood in a picture',
"author": 'Google',
"imageUrl": '',
},
{
"title": 'Alibaba Shop',
"author": 'Alibaba',
"imageUrl":'',
},
{
"title": 'Candy Shop',
"author": 'Mohamed Chahin',
"imageUrl": '',
},
{
"title": 'Tornado',
"author": 'Mohamed Chahin',
"imageUrl:'',
},
{
"title": 'Undo',
"author": 'Mohamed Chahin',
"imageUrl": '',
},
{
"title": 'white-dragon',
"author": 'Mohamed Chahin',
"imageUrl": '',
}

];
5、import 'package:flutter/material.dart';
import 'res/listData.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: HomeContent(),
));
}
}
class HomeContent extends StatelessWidget {
//自定义方法
Widget _getListData(context,index){
return ListTile(
title: Text(listData[index]["title"]),
leading:Image.network(listData[index]["imageUrl"]), );
}
@override
br/>subtitle:Text(listData[index]["author"])
);
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView.builder(
itemCount:listData.length,
itemBuilder:this._getListData
);
}
}
1、main01_padding.dart
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('FlutterDemo')),
body: LayoutDemo(),
));
}
}

class LayoutDemo extends StatelessWidget {br/>@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.fromLTRB(0, 0, 10, 0),
child: GridView.count(
crossAxisCount: 2,
childAspectRatio: 1.7,
children: [
Padding(
padding: EdgeInsets.fromLTRB(10, 10, 0, 0),
child: Image.network('url'
fit: BoxFit.cover),
),
Padding(
padding: EdgeInsets.fromLTRB(10, 10, 0, 0),
child: Image.network('',
fit: BoxFit.cover),
),
Padding(
padding: EdgeInsets.fromLTRB(10, 10, 0, 0),
child: Image.network('',
fit: BoxFit.cover),
),
Padding(
padding: EdgeInsets.fromLTRB(10, 10, 0, 0),
child: Image.network('',
fit: BoxFit.cover),