如何解决如何使底部导航栏在颤动访问之前不加载屏幕
我在我的项目中使用 Getx 状态管理。如果我在 Flutter 中使用底部导航栏,我的应用会导致性能不佳,因为同时加载了太多控制器。
我只想一次加载一个屏幕,直到并且除非我不访问导航栏的另一个索引。
我如何在我的代码中实现这一点,目前登录后它会在我访问之前加载每个屏幕,这对我来说很困难,因为我希望在显示屏幕之前重新加载数据。
import 'package:projectName/views/home/index.dart';
import 'package:projectName/views/profile/index.dart';
import 'package:projectName/views/profile/views/Prescription/index.dart';
import 'package:projectName/views/profile/views/orders/index.dart';
import 'package:projectName/widgets/BottomNavigator/BottomNavigatorController.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class BottomNavigatorWidget extends StatelessWidget {
final BottomNavigatorController controller =
Get.put(BottomNavigatorController());
@override
Widget build(BuildContext context) {
return GetBuilder<BottomNavigatorController>(
builder: (controller) {
return Scaffold(
body: SafeArea(
child: IndexedStack(
index: controller.tabIndex.value,children: [
Homepage(),MyOrders(),PrescriptionPage(),MyProfile(),],),bottomNavigationBar: BottomNavigationBar(
unselectedItemColor: Colors.black45,selectedItemColor: Color(0xFF2e3192),onTap: controller.changeTabIndex,currentIndex: controller.tabIndex.value,showSelectedLabels: true,showUnselectedLabels: true,type: BottomNavigationBarType.fixed,backgroundColor: Colors.white,elevation: 50,items: [
_bottomNavigationBarItem(
icon: CupertinoIcons.house_fill,label: 'Home',_bottomNavigationBarItem(
icon: CupertinoIcons.cube_box_fill,label: 'My Orders',_bottomNavigationBarItem(
icon: CupertinoIcons.square_list_fill,label: 'Prescription',_bottomNavigationBarItem(
icon: CupertinoIcons.person_alt_circle_fill,label: 'Account',);
},);
}
_bottomNavigationBarItem({IconData icon,String label}) {
return BottomNavigationBarItem(
icon: Icon(icon),label: label,);
}
}
这是 Controller.dart 文件
import 'package:get/get.dart';
class BottomNavigatorController extends GetxController {
Rxn<int> tabIndex = Rxn<int>(0);
void changeTabIndex(int index) {
tabIndex.value = index;
update();
}
}
解决方法
IndexedStack 小部件的目的是在多个小部件中一次显示一个小部件。但是,IndexedStack 将构建并加载在加载期间传递给它的所有小部件,这会导致在您的应用中同时加载太多控制器。
尝试使用 TabBarView 或普通列表代替 IndexedStack
['12','3','56','2','34','4']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。