如何在Flutter中创建自定义TabBar

时间:2019-07-15 10:50:07

标签: flutter dart flutter-layout

我想在我的身体中而不是在appBar中实现自定义可滚动的TabBar

enter image description here

4 个答案:

答案 0 :(得分:1)

我将从水平滚动的listView开始,然后建立大量ListTile元素,并使它们可单击。如果要滑动,请添加gesturedetector

答案 1 :(得分:0)

您可以使用相同的视图创建自定义列表。这是示例代码

ListView.builder(
              itemBuilder: (_, count) {
                return Container(
                  decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(10.0),
                      color: Colors.green),
                  child: GestureDetector(
                    onTap: (){
                      print("You clicked");
                    },
                    child: Text(
                      list[count],
                      style: TextStyle(color: Colors.white, fontSize: 12),textAlign: TextAlign.center,
                    ),
                  ),
                );
              },
              itemCount: list.length,
              scrollDirection: Axis.horizontal,
            )

答案 2 :(得分:0)

尝试使用“ NestedScrollView”,并将信息放在“ flexibleSpace”中的选项卡栏之外

答案 3 :(得分:0)

PageView和PageController

因此,这并不是您要查找的内容,您可以进行水平滚动(scrollView),而不是底部滚动条,但是我希望这可以将您推向正确的方向。这段代码基本上使用pageView来显示页面,并且由于有页面控制器,您可以将任何按钮或onPress设置为特定页面的动画。

如果您有任何疑问,请告诉我!

import 'package:flutter/material.dart';

class TestWidget extends StatefulWidget {
  TestWidget({Key key}) : super(key: key);

  @override
  _TestWidgetState createState() => _TestWidgetState();
}

class _TestWidgetState extends State<TestWidget> {
  int _selectedIndex = 0;

  PageController _pageController;

  @override
  void initState() {
    super.initState();
    _pageController = PageController();
  }

  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Tab Bar"),
      ),
      body: Center(
        child: Column(
          children: <Widget>[ 
            Expanded(
              flex: 10,
              child: ButtonBar(
                alignment: MainAxisAlignment.center,
                children: <Widget>[
                  FlatButton(
                    splashColor: Colors.blueAccent,
                    color: Colors.blue,
                    onPressed: () {
                      _pageController.animateToPage(0, duration: Duration(milliseconds: 500), curve: Curves.ease);
                    },
                    child: Text("One",),
                  ),
                  FlatButton(
                    splashColor: Colors.blueAccent,
                    color: Colors.blue,
                    onPressed: () {
                      _pageController.animateToPage(1, duration: Duration(milliseconds: 500), curve: Curves.ease);
                    },
                    child: Text("Two",),
                  ),
                  FlatButton(
                    splashColor: Colors.blueAccent,
                    color: Colors.blue,
                    onPressed: () {
                      _pageController.animateToPage(2, duration: Duration(milliseconds: 500), curve: Curves.ease);
                    },
                    child: Text("Three",),
                  )
                ],
              ),
            ),
            Expanded(
              flex: 40,
              child: PageView(
                controller: _pageController,
                children: [
                  Text("Page One"),
                  Text("Page Two"),
                  Text("Page Three")
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

基本上,您可以在保持滑动功能的同时使用任何您不会切换页面的标签栏或按钮:-)