列表常见的情况:
1、垂直列表
2、垂直图文列表
3、横向列表
4、动态列表
名称 |
类型 |
说明 |
scrollDirection
|
Axis |
Axis.horizontal 横向列表 Axis.vertical 垂直列表(默认垂直列表) |
padding |
EdgeInsetsGeometry
|
内边距 |
resolve |
bool |
组件反向排序 |
children
|
List<Widget>
|
列表元素
|
Flutter 基本列表
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text("flutter demo")), body: HomeContent())); } } class HomeContent extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: ListView( children: <Widget>[ ListTile( leading: Icon(Icons.phone), title: Text( "this is title", style: TextStyle(fontSize: 28.0), ), subtitle: Text('this is subtitle '), ), ListTile( title: Text("this is title"), subtitle: Text('this is subtitle '), trailing: Icon(Icons.phone), ), ListTile( title: Text("this is title"), subtitle: Text('this is subtitle '), ), ListTile( title: Text("this is title"), subtitle: Text('this is subtitle'), ), ListTile( title: Text("this is title"), subtitle: Text('this is subtitle'), ) ], ), ); } }
图表列表
body: new ListView( children:<Widget>[ new Image.network( 'http://127.0.0.1:8080/imgs/a.jpg' ) new Image.network( 'http://127.0.0.1:8080/imgs/b.jpg' ) new Image.network( 'http://127.0.0.1:8080/imgs/c.jpg' ),new Image.network( 'http://127.0.0.1:8080/imgs/d.jpg' ) ] ),
横向列表
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text("flutter demo")), body: HomeContent())); } } class HomeContent extends StatelessWidget { @override Widget build(BuildContext context) { return Container( height: 200.0, margin: EdgeInsets.all(5), child: ListView( scrollDirection: Axis.horizontal, children: <Widget>[ Container( 180.0, color: Colors.lightBlue, ), Container( 180.0, color: Colors.amber, child: ListView( children: <Widget>[ Image.network( 'http://127.0.0.1:8080/images/ca.jpg'), SizedBox(height: 16.0), Text( '这是一个文本信息', textAlign: TextAlign.center, style: TextStyle(fontSize: 16.0), ) ], ), ), Container( 180.0, color: Colors.deepOrange, ), Container( 180.0, color: Colors.deepPurpleAccent, ), ], )); } }
动态列表的使用
List类型的使用
List是Dart的集合类型之一,其实你可以把它简单理解为数组(反正我是这么认为的),其他语言也都有这个类型。它的声明有几种方式:
var myList = List()
: 非固定长度的声明。var myList = List(2)
: 固定长度的声明。var myList= List<String>()
:固定类型的声明方式。var myList = [1,2,3]
: 对List直接赋值。
那我们这里使用的是一个List传递,然后直接用List中的generate
方法进行生产List里的元素。最后的结果是生产了一个带值的List变量。代码如下:
void main () => runApp(MyApp( items: new List<String>.generate(1000, (i)=> "Item $i") ));
说明:再main函数的runApp中调用了MyApp类,再使用类的使用传递了一个items参数,并使用generate生成器对items进行赋值。
generate方法传递两个参数,第一个参数是生成的个数,第二个是方法。
#
接受参数
传递了参数,那MyApp类是需要接收的:
inal List<String> items; MyApp({Key key, @required this.items}):super(key:key);
构造函数,除了Key,增加了一个必传参数,@required
意思就必传。:super
如果父类没有无名无参数的默认构造函数,则子类必须手动调用一个父类构造函数。
事先进行声明,这样我们就OK了。
import 'package:flutter/material.dart'; void main () => runApp(MyApp( items: new List<String>.generate(1000, (i)=> "Item $i") )); class MyApp extends StatelessWidget{ List<String> items; MyApp({Key key, @required this.items}):super(key:key); @override Widget build(BuildContext context ){ return MaterialApp( title:'ListView widget', home:Scaffold( body:new ListView.builder( itemCount:items.length, itemBuilder:(context,index){ return new ListTile( title:new Text('${items[index]}'), ); } ) ), ); } }