在日常开发中,经常看到的列表界面就是这集的内容:
- 垂直列表
- 垂直图文列表
- 横向列表
- 动态列表
ListView
组件常用的参数:
scrollDirection: |
|
|
| EdgeInsetsGeometry, 内边距 | |
| bool, 组件反向排序 | |
| List, 列表元素 | |
(1)ListView列表组件、动态列表:
代码如下:
1 import 'package:flutter/material.dart';
2 import 'res/listData.dart';
3
4 void main(){
5 runApp(new MyApp());
6
7 }
8
9 class MyApp extends StatelessWidget{
10 @override
11 Widget build(BuildContext context) {
12 // TODO: implement build
13 return MaterialApp(
14 home:Scaffold(
15 appBar: AppBar(title: Text("ListView列表组件、动态列表")),
16 body: HomeContent4(),
17 ),
18 // 主题
19 theme: ThemeData(primarySwatch: Colors.green),
20 );
21 }
22 }
23
24
25 // class HomeContent extends StatelessWidget {
26 // // 自定义方法
27 // List<Widget> getData(){
28 // List<Widget> list = new List();
29 // for(var i = 0;i<20;i++){
30 // list.add(
31 // ListTile(
32 // title: Text("我是第$i个列表"),
33 // )
34 // );
35 // }
36 // return list;
37 // }
38 // @override
39 // Widget build(BuildContext context) {
40 // // TODO: implement build
41 // return ListView(
42 // children: this.getData(),
43 // );
44 // }
45 // }
46
47
48 //ListView.builder
49 // class HomeContent2 extends StatelessWidget{
50 // // 自定义方法
51 // List<Widget> list = new List();
52 // HomeContent2(){
53 // for(var i = 0;i<20;i++){
54 // this.list.add(ListTile(
55 // title: Text("第二种第$i个列表"),
56 // ));
57 // }
58 // }
59 // @override
60 // Widget build(BuildContext context) {
61 // // TODO: implement build
62 // return ListView.builder(
63 // itemCount: this.list.length,
64 // itemBuilder: (context,index){
65 // return this.list[index];
66 // }
67 // );
68 // }
69 // }
70
71 //ListView.builder 使用外部资源
72 class HomeContent4 extends StatelessWidget{
73 // 自定义方法
74 Widget _getListData(context,index){
75 return ListTile(
76 leading: Image.network(listData[index]["imageUrl"],width: 100.0,),
77 title: Text(listData[index]["title"]),
78 subtitle: Text(listData[index]["author"]),
79 );
80 }
81 @override
82 Widget build(BuildContext context) {
83 // TODO: implement build
84 return ListView.builder(
85 itemCount: listData.length,
86 itemBuilder:this._getListData//赋值不需要括号
87
88 );
89 }
90 }
91
92 //使用外部资源
93 class HomeContent3 extends StatelessWidget {
94 // 自定义方法
95 List<Widget> getData(){
96
97 var template=listData.map((value){
98 return ListTile(
99 leading: Image.network(value["imageUrl"]),
100 title: Text(value["title"]),
101 subtitle: Text(value["author"])
102 );
103 });
104 // ('123456','123456')
105 return template.toList();
106 }
107 @override
108 Widget build(BuildContext context) {
109 // TODO: implement build
110 return ListView(
111 children: this.getData(),
112 );
113 }
114 }
动态数据文件:listData.dart
效果图如下:
(2)ListView列表组件、图标组件、水平列表
代码如下:
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
// import 'package:flutter_app1/main.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("ListView列表组件、图标组件")),
body: HomeContent2(),
));
}
}
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(padding: EdgeInsets.all(10.0), children: <Widget>[
ListTile(
title: Text(
"据外媒,近日FBI公布了一份清单,并警告称有网络犯罪分子",
style: TextStyle(fontSize: 24),
),
subtitle: Text("正在使用一系列伪装成FBI的钓鱼网站来窃取用户信息"),
),
ListTile(
leading: Image.network(
'https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1605168143&di=e92c5258dc948d103b1c85d53fe4f7e4&src=http://a0.att.hudong.com/30/29/01300000201438121627296084016.jpg'),
title: Text("据外媒,近日FBI公布了一份清单,并警告称有网络犯罪分子"),
subtitle: Text("正在使用一系列伪装成FBI的钓鱼网站来窃取用户信息"),
trailing: Image.network(
'https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1605168143&di=e92c5258dc948d103b1c85d53fe4f7e4&src=http://a0.att.hudong.com/30/29/01300000201438121627296084016.jpg'),
),
ListTile(
leading: Icon(Icons.add_road, size: 40.0, color: Colors.red),
title: Text("据外媒,近日FBI公布了一份清单,并警告称有网络犯罪分子"),
subtitle: Text("正在使用一系列伪装成FBI的钓鱼网站来窃取用户信息"),
trailing: Icon(Icons.add_road, size: 40.0, color: Colors.red),
),
ListTile(
title: Text("据外媒,近日FBI公布了一份清单,并警告称有网络犯罪分子"),
subtitle: Text("正在使用一系列伪装成FBI的钓鱼网站来窃取用户信息"),
),
ListTile(
title: Text("据外媒,近日FBI公布了一份清单,并警告称有网络犯罪分子"),
subtitle: Text("正在使用一系列伪装成FBI的钓鱼网站来窃取用户信息"),
),
ListTile(
title: Text("据外媒,近日FBI公布了一份清单,并警告称有网络犯罪分子"),
subtitle: Text("正在使用一系列伪装成FBI的钓鱼网站来窃取用户信息"),
),
]);
}
}
//listview中使用其他的widgets
class HomeContent2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
padding: EdgeInsets.all(10.0),
children: [
Container(
child: Text(
'杰克快讯',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28.0,
),
),
// height: 60.0,
),
IconDemo(),
Image.network(
'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=547210280,4023660930&fm=26&gp=0.jpg'),
Container(
child: Text(
'杰克快讯',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28.0,
),
),
height: 60.0,
),
Image.network(
'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=547210280,4023660930&fm=26&gp=0.jpg'),
Container(
child: Text(
'杰克快讯',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28.0,
),
),
height: 60.0,
),
Image.network(
'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=547210280,4023660930&fm=26&gp=0.jpg'),
Container(
child: Text(
'杰克快讯',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 28.0,
),
),
height: 60.0,
),
Image.network(
'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=547210280,4023660930&fm=26&gp=0.jpg')
],
);
}
}
//listview水平列表
class HomeContent3 extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
height: 180.0,
child: ListView(
scrollDirection: Axis.horizontal,
children: [
Container(
width: 180.0,
height: 100.0,
color: Colors.red,
child: ListView(
children: [
Container(
child: Text(
'橙色年华',
style: TextStyle(color: Colors.white),
),
),
Image.network(
'https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1605168143&di=e92c5258dc948d103b1c85d53fe4f7e4&src=http://a0.att.hudong.com/30/29/01300000201438121627296084016.jpg')
],
),
),
Container(
width: 180.0,
height: 100.0,
color: Colors.yellowAccent,
),
Container(
width: 180.0,
height: 100.0,
color: Colors.lightBlue,
),
Container(
width: 180.0,
height: 100.0,
color: Colors.greenAccent,
),
Container(
width: 180.0,
height: 100.0,
color: Colors.deepPurple,
),
Container(
width: 180.0,
height: 100.0,
color: Colors.black26,
),
Container(
width: 180.0,
height: 100.0,
color: Colors.deepOrange,
),
],
),
);
}
}
//icon组件
class IconDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return new Center(
child: new Icon(
Icons.android_outlined,
color: Colors.redAccent,
size: 150.0,
),
);
}
}
//
HomeContent() 、HomeContent2() 、HomeContent3 ()效果图分别为: