Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振选项卡控制器索引不响应选项卡视图中的更改_Flutter - Fatal编程技术网

Flutter 颤振选项卡控制器索引不响应选项卡视图中的更改

Flutter 颤振选项卡控制器索引不响应选项卡视图中的更改,flutter,Flutter,颤振tabcontroller检测tabbar中的更改,但不知道tabbarview中的更改 侦听器会导致floatingactionbutton的文本发生更改,但当tabbarview发生更改时,不会有响应 class TabPageState extends State<TabPage> with SingleTickerProviderStateMixin { TabController _controller; int _currentIndex = 0; @

颤振tabcontroller检测tabbar中的更改,但不知道tabbarview中的更改

侦听器会导致floatingactionbutton的文本发生更改,但当tabbarview发生更改时,不会有响应

class TabPageState extends State<TabPage> with SingleTickerProviderStateMixin {

  TabController _controller;
  int _currentIndex = 0;

  @override
  void initState() {
    super.initState();
    _controller = TabController(vsync: this, length: 2);
    _controller.addListener(_handleTabSelection);
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Tab'),
        bottom: TabBar(
          controller: _controller,
          tabs: <Widget>[
            Tab(icon: Icon(Icons.laptop_mac),),
            Tab(icon: Icon(Icons.desktop_mac),),
          ],
        ),
      ),
      body: TabBarView(
        controller: _controller,
        children: <Widget>[
          Center(child: Text('laptop'),),
          Center(child: Text('desctop'),),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: (){},
        child: Text('$_currentIndex'),
      ),
    );
  }

  _handleTabSelection() {
    if (_controller.indexIsChanging) {
      setState(() {
        _currentIndex = _controller.index;
      });
    }
  }
}
类TabPageState使用SingleTickerProviderStateMixin扩展状态{
TabController\u控制器;
int _currentIndex=0;
@凌驾
void initState(){
super.initState();
_controller=TabController(vsync:this,长度:2);
_controller.addListener(_handleabselection);
}
@凌驾
无效处置(){
_controller.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“颤振选项卡”),
底部:选项卡栏(
控制器:_控制器,
选项卡:[
选项卡(图标:图标(图标.笔记本电脑),
选项卡(图标:图标(Icons.desktop\u mac)),
],
),
),
正文:选项卡视图(
控制器:_控制器,
儿童:[
中心(子项:文本(“笔记本电脑”),),
居中(子项:文本('desctop'),),
],
),
浮动操作按钮:浮动操作按钮(
按下:(){},
子项:文本(“$\u currentIndex”),
),
);
}
_HandletAbs选举(){
如果(_controller.indexIsChanging){
设置状态(){
_currentIndex=_controller.index;
});
}
}
}

只需删除以下条件:

  if (_controller.indexIsChanging) {
因为每次您开始从previousIndex更改为currentIndex时,都会重新生成小部件和
\u控制器。索引与初始索引相同

这应该起作用:

            _handleTabSelection() {
                  setState(() {
                    _currentIndex = _controller.index;
                  });
              }
医生说:

索引更改:当我们将[previousIndex]动画化为[index]时,为True
调用[animateTo]的结果。这个值是真的 当///用户 轻触[选项卡栏]选项卡。当[offset]作为一个变量更改时,它为false/// 用户拖动(和“投掷”)[TabBarView]的结果

代码:

  TabController _controller;
  int _selectedIndex = 0;

  List<Widget> list = [
    Tab(icon: Icon(Icons.card_travel)),
    Tab(icon: Icon(Icons.add_shopping_cart)),
  ];

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    // Create TabController for getting the index of current tab
    _controller = TabController(length: list.length, vsync: this);

    _controller.addListener(() {
      setState(() {
        _selectedIndex = _controller.index;
      });
      print("Selected Index: " + _controller.index.toString());
    });
  }
TabController\u控制器;
int _selectedIndex=0;
列表=[
选项卡(图标:图标(Icons.card_travel)),
选项卡(图标:图标(图标.添加购物车)),
];
@凌驾
void initState(){
//TODO:实现initState
super.initState();
//创建TabController以获取当前选项卡的索引
_controller=TabController(长度:list.length,vsync:this);
_controller.addListener(){
设置状态(){
_selectedIndex=\u controller.index;
});
打印(“所选索引:”+_controller.Index.toString());
});
}
示例:

输出:

  TabController _controller;
  int _selectedIndex = 0;

  List<Widget> list = [
    Tab(icon: Icon(Icons.card_travel)),
    Tab(icon: Icon(Icons.add_shopping_cart)),
  ];

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    // Create TabController for getting the index of current tab
    _controller = TabController(length: list.length, vsync: this);

    _controller.addListener(() {
      setState(() {
        _selectedIndex = _controller.index;
      });
      print("Selected Index: " + _controller.index.toString());
    });
  }