List是Dart的集合类型之一,其实可以把它简单理解为数组。它的声明有几种方式:
var myList = List(): 非固定长度的声明。var myList = List(2): 固定长度的声明。var myList= List<String>():固定类型的声明方式。var myList = [1,2,3]: 对List直接赋值。
void main() => runApp(MyApp( items: new List.generate(100, (i) => "Item $i") ));
这里使用的是一个List传递,然后直接用List中的generate方法进行生产List里的元素。最后的结果是生产了一个带值的List变量。在main函数的runApp中调用了MyApp类,再使用类的使用传递了一个items参数,并使用generate生成器对items进行赋值。
generate方法传递两个参数,第一个参数是生成的个数,第二个是方法;
final List items;
MyApp({Key key, @required this.items}):super(key: key);
这是一个构造函数,除了Key,增加了一个必传参数,@required就是必传。:super如果父类没有无名无参数的默认构造函数,则子类必须手动调用一个父类构造函数。
这样我们就可以接收一个传递过来的参数了,当然要事先进行声明。
接受了值之后,就可以直接调用动态列表ListView.builder()进行生成了:
import 'package:flutter/material.dart';
void main() => runApp(MyApp(
items: new List.generate(100, (i) => "Item $i")
));
class MyApp extends StatelessWidget {
final List items;
MyApp({Key key, @required this.items}):super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Welcome to Flutter',
home: Scaffold(
// appBar: AppBar(
// title: Text('Welcome to Flutter'),
// ),
body: new ListView.builder(
itemCount: items.length,
itemBuilder: (context,index){
return new ListTile(
// title: new Text('tt'),
title:new Text('${items[index]}'),
);
},
)
),
);
}
}
