轻击TabController时,TabBarView不会被TabController更改,而滑动时Tab不会改变,但是tabbarview不会

时间:2020-01-10 06:39:01

标签: flutter tabs flutter-appbar

我一直在尝试使用选项卡更改应用程序栏标题的许多解决方案,并且已经解决了,但是现在存在一个小问题;按下选项卡时,appbar的确随选项卡而改变,但tabbarview却没有。在标签栏视图上向左或向右滑动可更改标签栏视图,但不会更改标签页(应用程序栏标题也不会更改)。

我的下面的代码:

final List<Tabs> _tabs = [new Tabs(title: "Registered UAS", icon: new IconData(58826, fontFamily: 'MaterialIcons')),
new Tabs(title: "Registration", icon: IconData(57680, fontFamily: 'MaterialIcons'))
];

Tabs _myHandler ;

void initState() {
super.initState();
_controller = new TabController(length: 2, vsync: this);
_myHandler = _tabs[0];
_controller.addListener(_handleSelected);
}
void _handleSelected() {
setState(() {
  _myHandler= _tabs[_controller.index];
});
}

@override
Widget build(BuildContext context) {
return WillPopScope(
    child: DefaultTabController(
      length: 2,
      child: new Scaffold(
          appBar: AppBar(
            title: Text(_myHandler.title),
            bottom: new TabBar(
              controller: _controller,
              tabs: <Widget>[
                new Tab(icon: new Icon(_tabs[0].icon)),
                new Tab(icon: new Icon(_tabs[1].icon))
              ],
            ),
          ),
          body: new TabBarView(children: [...])

我跟随this更改了选项卡更改上的应用栏标题,现在陷入了this之类的类似情况,但是我认为解决方案不适合我(我已经尝试过了)< / p>

2 个答案:

答案 0 :(得分:0)

通过在TabBarView下添加controller: _controller,来解决该问题

答案 1 :(得分:0)

如果要使用自己的控制器,则不应使用DefaultTabController小部件。例如,不使用DefaultTabController。

如果要使用自己的控制器,则应使用此示例。 https://api.flutter.dev/flutter/material/TabController-class.html

如果要在没有自己的控制器的情况下使用DefaultTabController,则应使用此示例。

import 'package:flutter/material.dart';

void main() {
  runApp(TabBarDemo());
}

class TabBarDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
          appBar: AppBar(
            bottom: TabBar(
              tabs: [
                Tab(icon: Icon(Icons.directions_car)),
                Tab(icon: Icon(Icons.directions_transit)),
                Tab(icon: Icon(Icons.directions_bike)),
              ],
            ),
            title: Text('Tabs Demo'),
          ),
          body: TabBarView(
            children: [
              Icon(Icons.directions_car),
              Icon(Icons.directions_transit),
              Icon(Icons.directions_bike),
            ],
          ),
        ),
      ),
    );
  }
}