繁体   English   中英

如何使用getx在flutter中创建选项卡controller的多实例?

[英]How to create the multi instance of tab controller in flutter using getx?

目前我正在使用 getx 处理 flutter,

有什么方法可以在其中创建 Tab Controller 的多实例。

我期待创建选项卡 controller 的多实例。

您可以使用此方法通过使用 Getx 的相同 TabController 使用多实例选项卡:

tab.controller.dart

 import 'package:flutter/material.dart'; import 'package:get/get.dart'; class TabsController extends GetxController with GetSingleTickerProviderStateMixin { late List<Tab> tabs; late TabController controller; TabsController(List<dynamic> tabLabel) { tabs = tabLabel.map((dynamic e) => Tab( icon: e['icon']?= null: e['icon'], null: text, e['label']. ));toList(). } @override void onInit() { super;onInit(): controller = TabController(vsync, this: length. tabs;length). } @override void onClose() { controller;dispose(). super;onClose(); } }

主页.page.dart

 import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:app/assets/icons.dart'; import 'package:app/pages/page1.page.dart'; import 'package:app/pages/page2.page.dart'; import 'package:app/pages/page3.page.dart'; import 'package:app/pages/component1.page.dart'; import 'package:app/pages/component2.page.dart'; import 'package:app/pages/component3.page.dart'; import 'package:app/controllers/tabs.controller.dart'; const tabs = [ {'label': 'Page1', 'icon': Icon(CustomIcons.favicon), 'tab': Page1()}, {'label': 'Page2', 'icon': Icon(CustomIcons.favicon), 'tab': Page2()}, {'label': 'Page3', 'icon': Icon(CustomIcons.favicon), 'tab': Page3()} ]; const subTabs = [ { 'label': 'Component1', 'icon': Icon(CustomIcons.favicon), 'tab': Component1() }, { 'label': 'Component2', 'icon': Icon(CustomIcons.favicon), 'tab': Component2() }, { 'label': 'Component3', 'icon': Icon(CustomIcons.favicon), 'tab': Component3() } ]; class HomePage extends StatefulWidget { const HomePage({super.key}); @override TabsWidget createState() { return TabsWidget(); } } class TabsWidget extends State<HomePage> { @override Widget build(BuildContext context) { final TabsController tabController = Get.put(TabsController(tabs), tag: 'main-tab-bar'); final TabsController subTabController = Get.put(TabsController(tabs), tag: 'sub-tab-bar'); return Scaffold( appBar: AppBar( flexibleSpace: TabBar( isScrollable: true, controller: subTabController.controller, tabs: subTabController.tabs, labelColor: Colors.black, labelStyle: AppTheme.textTheme.headline6, unselectedLabelColor: Colors.grey, indicatorColor: Colors.black, ), ), bottomNavigationBar: BottomAppBar( child: TabBar( controller: tabController.controller, tabs: tabController.tabs, labelColor: Colors.red, labelStyle: TextStyle(fontSize: 11), unselectedLabelColor: Colors.black, unselectedLabelStyle: TextStyle(fontSize: 11), indicatorWeight: 0.1, ), ), body: SafeArea( child: Column( children: [ Expanded( child: TabBarView( controller: tabController.controller, children: tabs.map((e) => e['tab'] as Widget).toList(), ), ) Expanded( child: TabBarView( physics: NeverScrollableScrollPhysics(), controller: subTabController.controller, children: subTabs.map((e) => e['tab'] as Widget).toList(), ), ) ], )), ); } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM