dart TabBarView中的多个列表< Widget> in TabBarView with flutter

9lowa7mx  于 2023-06-19  发布在  Flutter
关注(0)|答案(2)|浏览(130)

我是个初学者。
我想在TabBarView中添加多个小部件数组。
我有3个数组与ListView包含在他们的卡小部件。
是否可以在TabBarView中放置多个数组?
我该如何做到这一点?
这是我的代码。

@override
      Widget build(BuildContext context) {
        final List<Widget> stack = <Widget>[];
        final List<Widget> info  = <Widget>[
          _infoScreen();
        ];
        final List<Widget> addStuff   = <Widget>[
          _someAdditionalStuff()
        ];
        if (_queryProductError == null) {
          stack.add(
            ListView(
              children: <Widget>[
                _buildConnectionCheckTile(),
                _buildProductList(),
                _adsTitle(),
                _adsButton(),
                _buildRestoreButton(),
              ],
            ),
          );
        } else {
          stack.add(Center(
            child: Text(_queryProductError!),
          ));
        }
        if (_purchasePending) {
          stack.add(
            // TODO(goderbauer): Make this const when that's available on stable.
            // ignore: prefer_const_constructors
            Stack(
              children: const <Widget>[
                Opacity(
                  opacity: 0.3,
                  child: ModalBarrier(dismissible: false, color: Colors.grey),
                ),
                Center(
                  child: CircularProgressIndicator(),
                ),
              ],
            ),
          );
        }

    return MaterialApp(
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
        appBar: AppBar(
            bottom: const TabBar(
              tabs: [
                Tab(icon: Icon(Icons.shopping_basket_outlined),
                text : 'Донације'),
                Tab(icon: Icon(Icons.info_outline),
                text : 'Инфо'),
                Tab(icon: Icon(Icons.directions_bike)),
              ],
            ),
          centerTitle: true,
          title: Text('Донације'),
          leading: IconButton(
                onPressed: (){ main();},
                icon: const Icon(Icons.keyboard_return_sharp),
            )
        ),
        body: new TabBarView(
          children:
            stack,
            info,
            addStuff,
        ),
      ),
      ),
    );
  }

这不起作用,并给我一个“TabBarView中有太多位置参数异常”。
下面的例子是3卡小部件和工作正常,但不是我想要的:

return MaterialApp(
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
        appBar: AppBar(
            bottom: const TabBar(
              tabs: [
                Tab(icon: Icon(Icons.shopping_basket_outlined),
                text : 'Донације'),
                Tab(icon: Icon(Icons.info_outline),
                text : 'Инфо'),
                Tab(icon: Icon(Icons.directions_bike)),
              ],
            ),
          centerTitle: true,
          title: Text('Донације'),
          leading: IconButton(
                onPressed: (){ main();},
                icon: const Icon(Icons.keyboard_return_sharp),
            )
        ),
        body: new TabBarView(
          children:
            _buildProductList
            _infoScreen
            _someAdditionalStuff

        ),
      ),
      ),
    );
  }

我想有5个小工具标签1
标签2上有2个小部件,标签3上有1个小部件
我试过几种方法,但我不明白。
谢谢你的帮助。

lsmepo6l

lsmepo6l1#

TabBarView小部件中的children属性必须是小部件数组。其中array等于为选项卡数量定义的长度。

return MaterialApp(
  home: DefaultTabController(
    length: 3,
    child: Scaffold(
      appBar: AppBar(
          bottom: const TabBar(
            tabs: [
              Tab(icon: Icon(Icons.shopping_basket_outlined),
              text : 'Донације'),
              Tab(icon: Icon(Icons.info_outline),
              text : 'Инфо'),
              Tab(icon: Icon(Icons.directions_bike)),
            ],
          ),
        centerTitle: true,
        title: Text('Донације'),
        leading: IconButton(
              onPressed: (){ main();},
              icon: const Icon(Icons.keyboard_return_sharp),
          )
      ),
      body: TabBarView(
        children: [ //TabBarView wants an array of children where length === children.length
          stack,
          info,
          // need to add one more widget here because the length of the DefaultTabController is set to 3
        ]
      ),
    ),
  ),
);
iezvtpos

iezvtpos2#

好吧,我发现每个标签,只有一个小部件是可能的,所以我管理它与ListTile和列内,而不是卡,所以我只有一个ListView小部件,而不是一对夫妇的卡小部件。它看起来不像我想要它做的卡小部件,但我很好,这个解决方案,因为我没有找到另一个。

相关问题