在Flutter的TabBar上禁用onTapped

tan*_*eiQ 5 flutter

我想防止标签移动,即使我点击TabBar。

TabBar(
        controller: this._controller,
        tabs: <Widget>[
          new Tab(
            text: "A",
          ),
          new Tab(
            text: "B",
          ),
          new Tab(
            text: "C",
          ),
        ])
Run Code Online (Sandbox Code Playgroud)

Ian*_*son 13

只需将 TabBar 包装在 IgnorePointer 中。


Rob*_*don 8

如果您将 嵌入 的TabBar底部AppBar,则需要实现PreferredSizeWidget. 这很容易实现:

class ReadOnlyTabBar extends StatelessWidget implements PreferredSizeWidget {
  final TabBar child;

  const ReadOnlyTabBar({Key key, @required this.child}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return IgnorePointer(child: child);
  }

  @override Size get preferredSize => this.child.preferredSize;
}
Run Code Online (Sandbox Code Playgroud)


小智 8

我有一个更优雅的解决方案:

TabBar(
      onTap: (index){
         _controller.index = _controller.previousIndex;
      },
Run Code Online (Sandbox Code Playgroud)

  • 不,当您点击当前选项卡时,这将移动到上一个选项卡,这不是OP想要的。 (3认同)

Ish*_*ndo 2

我认为你必须将侦听器添加到选项卡单击,然后再次将索引更改为 0。在这里我们需要添加控制器,我们可以通过它设置索引。

    class TabBarDemoWidget extends State<TabBarDemo> with TickerProviderStateMixin{


  @override
  Widget build(BuildContext context) {
    int _tabIndex = 0;

    var tab = TabController(
      initialIndex: 0,
      length: 3,
      vsync: this
    );

    void _handleTabSelection(){
      setState(() {
              tab.index = _tabIndex;
            });
        }
    tab.addListener(_handleTabSelection);




    return DefaultTabController(
        length: 3,
        initialIndex: 0,
        child: TabBar(
               labelColor: Colors.teal,
               controller: tab,
               tabs: [

                GestureDetector(
                  child:Tab(
                  icon: 
                  Icon(
                    Icons.directions_car)) ,
                  onTap: (){
                    _tabIndex = 0;
                  },
              ),GestureDetector(
                  child:Tab(
                  icon: Icon(Icons.directions_car)) ,
                  onTap: (){
                    _tabIndex = 0;
                  },
              ),GestureDetector(
                  child:Tab(
                  icon: Icon(Icons.directions_car)) ,
                  onTap: (){
                    _tabIndex = 0;
                  },
              )
              ],
            ),
      );
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我尝试过这个。但是,没有按预期工作。除图标外,“GestureDetector”在“onTap”上不起作用。 (3认同)