Getting 'Horizontal viewport was given unbounded height.' with TabBarView in flutter

后端 未结 4 2045
一生所求
一生所求 2021-01-01 14:45

I\'m trying to make a profile page, where the users info is at the top. And then have a tab view below that for different views.

This is the code I\'m using

4条回答
  •  走了就别回头了
    2021-01-01 15:26

    try to use IndexedStack instead of TabBarView

    i tried Expanded, shrinkWrap = true , ... but no one work's fine just try example.

    Example:

    class Product extends StatefulWidget {
      @override
      _ProductState createState() => _ProductState();
    }
    
    class _ProductState extends State with SingleTickerProviderStateMixin {
      TabController tabController;
      int selectedIndex = 0;
    
      @override
      void initState() {
        super.initState();
        tabController = TabController(length: 5, vsync: this, initialIndex: 0);
      }
    
      @override
      void dispose() {
        tabController.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return DefaultTabController(
          length: 3,
          initialIndex: 0,
          child: Scaffold(
            body: ListView(
              shrinkWrap: true,
              children: [
                TabBar(
             
                  tabs: [
                    Tab(
                      text: 'one',
                    ),
                    Tab(
                      text: 'two',
                    ),
                    Tab(
                      text: 'three',
                    ),
                  ],
                  controller: tabController,
                  onTap: (index) {
                    setState(() {
                      selectedIndex = index;
                      tabController.animateTo(index);
                    });
                  },
                ),
                IndexedStack(
                  children: [
                    Visibility(
                      child: Text('test1'),
                      maintainState: true,
                      visible: selectedIndex == 0,
                    ),
                    Visibility(
                      child: Text('test2'),
                      maintainState: true,
                      visible: selectedIndex == 1,
                    ),
                    Visibility(
                      child: Text('test3'),
                      maintainState: true,
                      visible: selectedIndex == 2,
                    ),
                  ],
                  index: selectedIndex,
                ),
              ],
            ),
          ),
        );
      }
    }
    

    special thank's to @arbalest

提交回复
热议问题