Flutter 元件基礎 ——ListView#
ListView 是滾動列表,類似於 iOS 中的 ScrollView,可橫向、縱向滾動,內容不限。
ListView 的使用#
ListView 的使用很簡單,但是需要多多練習;
ListView 的使用,通過設置 children 來實現,children 中的 Item 為 Widget 對象。
縱向滾動#
代碼如下:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'ListView Learn',
home: Scaffold(
appBar: new AppBar(
title: new Text('ListView Widget')
),
body: new ListView(
children: <Widget>[
Container(
height: 50,
color: Colors.orangeAccent,
child: const Center(
child: Text('Entry A'),
),
),
Container(
height: 50,
color: Colors.lightGreenAccent,
child: const Center(
child: Text('Entry B'),
),
),
new ListTile(
leading: new Icon(Icons.access_time),
title: new Text('access_time'),
),
new Image.network(
'https://inews.gtimg.com/newsapp_ls/0/13792660143/0.jpeg')
],
)
)
);
}
}
效果如下:
橫向滾動#
ListView
的scrollDirection
控制滑動方向
代碼如下
class MyList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView(scrollDirection: Axis.horizontal, children: [
new Container(
width: 180.0,
color: Colors.lightBlue,
),
new Container(
width: 180.0,
color: Colors.lightGreen,
),
new Container(
width: 180.0,
color: Colors.orange,
),
new Container(
width: 180.0,
color: Colors.orangeAccent,
)
]);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Text Widget',
home: Scaffold(
body: Center(
child: Container(
height: 200.0,
child: MyList(),
),
),
));
}
}
效果如下:
注意寫法的不同,在這裡自定義了一個MyList
的 Widget,然後在MyApp
中使用MyList
,就避免了在父視圖嵌套太多的問題。
動態列表 ListView.builder ()#
使用動態列表需要先來看一下 List 類型,
List 類型
List 是集合類型,聲明有幾種方式,使用方式可以參考 Swift 中的 Array
var myList = List()
: 非固定長度的數組var myList = List(2)
: 長度為 2 的數組var myList = List<String>()
: 創建一個 String 類型的數組var myList = [1, 2, 3]
: 創建一個 1、2、3 的數組
也可以使用generate
方法來生成 List 元素,比如
new List<String>.generate(1000,, (i) => "Item $i");
動態列表
代碼如下:
class MyList extends StatelessWidget {
final List<String> entries = <String>['A', 'B', 'C'];
final List colors = [
Colors.orangeAccent,
Colors.lightBlueAccent,
Colors.cyanAccent
];
@override
Widget build(BuildContext context) {
return ListView.builder(
padding: const EdgeInsets.all(8),
itemCount: entries.length,
itemBuilder: (BuildContext context, int index) {
return Container(
height: 50,
color: colors[index],
child: Center(
child: Text('Entry ${entries[index]}'),
),
);
},
);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'List Build Learn',
home: Scaffold(
appBar: new AppBar(
title: new Text('List Build Learn'),
),
body: Center(
child: Container(
child: MyList(),
),
),
));
}
}
效果如下: