TabView中的动态子项
问题内容:
我正在尝试构建具有列表作为孩子的选项卡式视图。
类别标签和列表内容都将从数据库中获取。
我正在从呼叫者页面传递标签,并成功地将它们作为列表传递。现在,我正在尝试加载列表,并且构建了一个小部件(myList),该小部件成功返回了Future
ListView。
问题有两个:
- 每次我向左或向右滑动时,列表都会自动重建,而我只希望构建一次
- 如何使用我制作的使标签的子代实际反映标签的代码,并根据我拥有的类别进行动态加载?
现在我的代码是这样的:
import 'package:flutter/material.dart';
import 'package:flutter_app/ui/menu_category_list.dart';
// Each TabBarView contains a _Page and for each _Page there is a list
// of _CardData objects. Each _CardData object is displayed by a _CardItem.
List<Tab> Tabs(List<String> l){
List<Tab> list;
for (String c in l) {
list.add(new Tab(text: c));
}
return list;
}
class TabsDemo extends StatelessWidget {
const TabsDemo({ Key key , this.categorie}) : super(key: key);
final List<Tab> categorie;
@override
Widget build(BuildContext ctxt) {
return new MaterialApp(
title: "Nice app",
home: new DefaultTabController(
length: 5,
child: new Scaffold(
appBar: new AppBar(
title: new Text("Title"),
bottom: new TabBar(
tabs:
categories,
//new Tab(text: "First Tab"),
//new Tab(text: "Second Tab"),
),
),
body: new TabBarView(
children: [
new MenuCategoryList(),
new MenuCategoryList(),
new MenuCategoryList(),
new MenuCategoryList(),
new MenuCategoryList()
]
)
),
)
);
}
}
在此先多谢
问题答案:
您可以使用它List<E>.generate
来实现。
import 'package:flutter/material.dart';
假设您从呼叫者页面传递了一组类别。假设这是您的类别列表。
List<String> categories = ["a", "b", "c", "d", "e", "f", "g", "h"];
然后,您可以执行类似的操作以实现您的期望。
class TabsDemo extends StatefulWidget {
@override
_TabsDemoState createState() => _TabsDemoState();
}
class _TabsDemoState extends State<TabsDemo> {
TabController _controller;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext ctxt) {
return new MaterialApp(
home: DefaultTabController(
length: categories.length,
child: new Scaffold(
appBar: new AppBar(
title: new Text("Title"),
bottom: new TabBar(
isScrollable: true,
tabs: List<Widget>.generate(categories.length, (int index){
print(categories[0]);
return new Tab(icon: Icon(Icons.directions_car), text: "some random text");
}),
),
),
body: new TabBarView(
children: List<Widget>.generate(categories.length, (int index){
print(categories[0]);
return new Text("again some random text");
}),
)
))
);
}
您还可以将不同组的小部件设置为“选项卡”的视图。您可以创建页面列表并遵循相同的方法。