如何解决Flutter 使用提供程序从 Navigator.push 更新父页面
说明
我的应用有 3 个主菜单页面(菜单 1、菜单 2、菜单 3)。
我的菜单 1 页面有一个带有提交按钮的表单。 当我按下按钮时,它会执行 Navigator.push 并打开一个 SubMenu 1 页面,该页面显示与表单数据相关的信息。
在这个 SubMenu 1 页面上,我有一个按钮可以让我用新数据更新表单中显示的数据。
为此,我使用提供程序,我必须将菜单 1 的提供程序放在 MaterialApp 之上才能访问它。 它有效。
我的问题是什么?
我的问题是我的菜单 1 页面只初始化一次,因为提供程序位于 MaterialApp 之上。我该怎么做才能在我的菜单之间导航时,当我点击菜单 1 时,它会初始化为零,因为它会保留输入的结果。
我将我的提供者放在 materialApp 之上,因为我想在我的 SubMenu 1 页面中访问它。以便更新菜单 1 表单。如果我不把它放在最上面,我就无法在 SubMenu 1 中访问它。但是突然当我改变菜单时,它不再初始化页面。
代码
AppScreen:
class AppScreen extends StatelessWidget {
const AppScreen({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<LicenseNotifier>(
create: (_) => LicenseNotifier(),child: ChangeNotifierProvider<BottomNavigationBarNotifier>( // Here my navigation
create: (BuildContext context) => BottomNavigationBarNotifier(),child: ChangeNotifierProvider<FormCorrectionNotifier>( // Here my form for Menu 1
create: (BuildContext context) => FormCorrectionNotifier(),child: MaterialApp(
title: AppConfig.APPLICATION_NAME,debugShowCheckedModeBanner: false,theme: AppTheme().data,initialRoute: AppRoutes.HOME,onGenerateRoute: RoutesClass.generate,),)
)
);
}
}
我的BottomNavigationBarNotifier :
class BottomNavigationBarNotifier with ChangeNotifier {
int currentIndex = AppConfig.NAVIGATION_DEFAULT_INDEX;
BottomNavigationBarNotifier();
Future<void> navigationScreenIndex({int index}) async{
currentIndex = index;
notifyListeners();
}
Widget loadScreenWithNavigation()
{
switch (currentIndex)
{
case 0:
return Menu1Screen(title: 'Menu 1');
break;
case 1:
return Menu2Screen(title: 'Menu 2');
break;
case 2:
return Menu3Screen(title: 'Menu 3');
break;
default:
return Menu1Screen(title: 'Menu 1');
break;
}
}
}
我的 Menu1Screen 通知程序:
class Menu1Notifier extends FormNotifier {
TextEditingController controllerTest;
FormCorrectionNotifier(){
_initialise();
}
Future _initialise() async{
controllerTest = TextEditingController();
notifyListeners();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。