簡體   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