Flutter 列表视图
创建一个 Home Widget 来表示 App Widget 的 MaterialApp Widget 的 home 内容:
即拆分如下:
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Home(),
theme: ThemeData(
primaryColor: Colors.orange
),
);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Muzico'),
elevation: 0.0,
),
body: Hello(),
);
}
}
现在我们不需要管 App 类了,将在 Home 类里面处理接下来的内容。
创建 ListView
下面我们通过 ListView.builder 来创建 ListView。
ListView.builder 有两个属性必须要有值才能创建成功的。
itemCount,代表有多少个item对象。
itemCount的构造体为 {int itemBuilder},这表示,我们返回 int 类型的值就可以了。
itemBuilder,构建item 的内容。
itemBuilder的构造体为 {(BuildContext, int) → Widget itemBuilder},这表示,我们要返回Widget 类型,并且通过类似 iOS 的block 处理的。
结合之前的 Post.dart 数据内容,写下以下代码:
ListView.builder(
itemCount: posts.length,
itemBuilder: (BuildContext context, int index) {
return Text(posts[index].title);
},
),
代替 Hello(),完整代码为:
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Muzico'),
elevation: 0.0,
),
body: ListView.builder(
itemCount: posts.length,
itemBuilder: (BuildContext context, int index) {
return Text(posts[index].title);
},
),
);
}
}
简单的列表就这样实现了。
除了上面实现定义Item的写法外,还有如下的写法:
class Home extends StatelessWidget {
Widget _listItemBuilder(BuildContext context, int index) {
return Text(posts[index].title);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Muzico'),
elevation: 0.0,
),
body: ListView.builder(
itemCount: posts.length,
itemBuilder: _listItemBuilder,
),
);
}
}
效果一致,不过这种写法更加方便切割管理、替换。