代码之家  ›  专栏  ›  技术社区  ›  Dolphin

如何在使用get作为状态管理组件时初始化TabController

  •  0
  • Dolphin  · 技术社区  · 4 年前

    我想在flutter UI中使用TabBarView,现在使用 get 作为状态管理,这是我的UI代码:

    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import 'package:get/get.dart';
    
    import 'dev_word_controller.dart';
    
    class DevWord extends StatelessWidget {
      DevWord({Key key}) : super(key: key);
    
      List tabs = ["生词", "已记住", "全部"];
    
      @override
      Widget build(BuildContext context) {
    
        TabController _tabController = TabController( length: tabs.length, vsync: this);
    
        void _handleTabSelection() {
          if (_tabController.indexIsChanging) {
            switch (_tabController.index) {
              case 0:
                Scaffold.of(context).showSnackBar(SnackBar(
                  content: Text('Page 1 tapped.'),
                  duration: Duration(milliseconds: 500),
                ));
                break;
              case 1:
                Scaffold.of(context).showSnackBar(SnackBar(
                  content: Text('Page 2 tapped.'),
                  duration: Duration(milliseconds: 500),
                ));
                break;
            }
          }
        }
    
        _tabController.addListener(_handleTabSelection);
    
        return GetBuilder<DevWordController>(
            init: DevWordController(),
            builder: (controller) {
              return DefaultTabController(
                length: tabs.length,
                child: Scaffold(
                    appBar: AppBar(
                        foregroundColor: Colors.red,
                        bottom:PreferredSize( 
                          preferredSize: Size.fromHeight(1),
                            child:Material(
                              color: Colors.green,
                            child:TabBar(
                                indicatorColor: Colors.black,
                                labelColor: Colors.white,
                                unselectedLabelColor: Colors.yellow,
                                tabs: tabs.map((e) => Tab(text: e)).toList())))),
                    body: SafeArea(
                      child: TabBarView(
                        children: tabs.map((e) {
                          return ListView(children: controller.getCurrentRender);
                        }).toList(),
                      ),
                    )),
              );
            });
      }
    }
    

    这行代码 TabController _tabController = TabController( length: tabs.length, vsync: this); 显示此错误:

    The argument type 'DevWord' can't be assigned to the parameter type 'TickerProvider'.
    

    我应该如何初始化TabController,因为我使用的是get,所以我不想在代码中创建另一个状态。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Dipak Prajapati    4 年前

    请检查选项卡控制器文档, 1. https://api.flutter.dev/flutter/material/TabController-class.html

    您需要为自定义选项卡控制器包括SingleTickerProviderStateMixin

    或者将DefaultTabController与无状态小部件方法一起使用