我正在尝试构建具有列表作为孩子的选项卡式视图。
类别标签和列表内容都将从数据库中获取。
我正在从呼叫者页面传递标签,并成功地将它们作为列表传递。现在,我正在尝试加载列表,并且构建了一个小部件(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来实现。
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"); }), ) )) ); }
您还可以将不同组的小部件设置为“选项卡”的视图。您可以创建页面列表并遵循相同的方法。