一尘不染

TabView中的动态子项

flutter

我正在尝试构建具有列表作为孩子的选项卡式视图。

类别标签和列表内容都将从数据库中获取。

我正在从呼叫者页面传递标签,并成功地将它们作为列表传递。现在,我正在尝试加载列表,并且构建了一个小部件(myList),该小部件成功返回了Future
ListView。

问题有两个:

  1. 每次我向左或向右滑动时,列表都会自动重建,而我只希望构建一次
  2. 如何使用我制作的使标签的子代实际反映标签的代码,并根据我拥有的类别进行动态加载?

现在我的代码是这样的:

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

当前结果

在此先多谢


阅读 229

收藏
2020-08-13

共1个答案

一尘不染

您可以使用它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");

             }),
          )
       ))
      );
  }

您还可以将不同组的小部件设置为“选项卡”的视图。您可以创建页面列表并遵循相同的方法。

2020-08-13