代码之家  ›  专栏  ›  技术社区  ›  BIS Tech

如何对齐控制器上的左选项卡?

  •  0
  • BIS Tech  · 技术社区  · 6 年前

    如何对齐左标签?

    DefaultTabController(
          length: 2,
          child: Scaffold(
            appBar: AppBar(
              title: Row(
                children: <Widget>[
                  ...
                ],
              ),
              actions: <Widget>[
                ...
              ],
              bottom: TabBar(
                  isScrollable: true,
                  tabs: [
                    Tab(text: 'Chat'),
                    Tab(child: Row(
                      children: <Widget>[
                       ...
                      ],
                    )),
                  ]
              ),
            ),
          ),
        );
    

    FlexibleSpace bottom

    0 回复  |  直到 6 年前
        1
  •  1
  •   chunhunghan    6 年前

    您可以复制粘贴运行下面的完整代码
    你可以用 PreferredSize Align

    appBar: AppBar(
            title: Text(widget.title),
            bottom: PreferredSize(
              preferredSize: const Size.fromHeight(20.0),
              child: Align(
                alignment: Alignment.centerLeft,
                child: Container(
                  width: MediaQuery.of(context).size.width / 2,
                  child: TabBar(
                    isScrollable: true,
                    controller: _tabController,
                    tabs: [
                      Tab(text: 'Tab 1'),
                      Tab(text: 'Tab 2'),
                      Tab(text: 'Tab 3'),
                      Tab(text: 'Tab 4'),
                      Tab(text: 'Tab 5'),
                    ],
                  ),
                ),
              ),
            ),
          )
    

    工作演示

    enter image description here

    完整代码

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final appTitle = 'Tabs Demo';
        return MaterialApp(
          title: appTitle,
          home: MyHomePage(title: appTitle),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      final String title;
    
      const MyHomePage({Key key, this.title}) : super(key: key);
    
      @override
      State<StatefulWidget> createState() {
        return _MyHomePageState();
      }
    }
    
    class _MyHomePageState extends State<MyHomePage>
        with SingleTickerProviderStateMixin {
      int _tabIndex = 0;
    
      TabController _tabController;
    
      @override
      void initState() {
        super.initState();
        _tabController = TabController(vsync: this, length: 5);
      }
    
      void _toggleTab() {
        _tabIndex = _tabController.index + 1;
        _tabController.animateTo(_tabIndex);
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
          floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
          bottomNavigationBar: BottomAppBar(
            notchMargin: 20,
            child: new Row(
              // mainAxisSize: MainAxisSize.max,
              mainAxisAlignment: MainAxisAlignment.end,
              children: <Widget>[
                InkWell(
                  onTap: () {
                    _toggleTab();
                  },
                  child: Text(
                    'Next >',
                    style: TextStyle(fontSize: 20, color: Colors.red),
                  ),
                )
              ],
            ),
          ),
          appBar: AppBar(
            title: Text(widget.title),
            bottom: PreferredSize(
              preferredSize: const Size.fromHeight(20.0),
              child: Align(
                alignment: Alignment.centerLeft,
                child: Container(
                  width: MediaQuery.of(context).size.width / 2,
                  child: TabBar(
                    isScrollable: true,
                    controller: _tabController,
                    tabs: [
                      Tab(text: 'Tab 1'),
                      Tab(text: 'Tab 2'),
                      Tab(text: 'Tab 3'),
                      Tab(text: 'Tab 4'),
                      Tab(text: 'Tab 5'),
                    ],
                  ),
                ),
              ),
            ),
          ),
          body: TabBarView(
            controller: _tabController,
            children: [
              Card(
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    ListTile(
                      leading: Icon(Icons.album),
                      title: Text('Hello 1'),
                      subtitle: Text('Click on Next Button to go to Tab 2.'),
                    ),
                  ],
                ),
              ),
              Card(
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    ListTile(
                      leading: Icon(Icons.album),
                      title: Text('Hello 2'),
                      subtitle: Text('Click on Next Button to go to Tab 3'),
                    ),
                  ],
                ),
              ),
              Card(
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    ListTile(
                      leading: Icon(Icons.album),
                      title: Text('Hello 3'),
                      subtitle: Text('The End'),
                    ),
                  ],
                ),
              ),
              Card(
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    ListTile(
                      leading: Icon(Icons.album),
                      title: Text('Hello 4'),
                      subtitle: Text('The End'),
                    ),
                  ],
                ),
              ),
              Card(
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    ListTile(
                      leading: Icon(Icons.album),
                      title: Text('Hello 5'),
                      subtitle: Text('The End'),
                    ),
                  ],
                ),
              ),
            ],
          ),
        ));
      }
    }