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]}'),
);
},
)
),
);
}
}
