抛出另一个异常:在被处置后使用了一个AppNotifier



我是新手。在运行我的项目后,我得到以下错误信息&哎呀,出了问题。请刷新应用程序或联系管理员/开发者"我在显示这个错误后刷新应用程序"一个AppNotifier在被处置后被使用。一旦你在AppNotifier上调用了dispose(),它就不能再被使用了。">

@override
Widget build(BuildContext context) {
return ScreenUtilInit(
designSize: Size(360, 640),
builder: () => ChangeNotifierProvider<AppNotifier?>(
create: (_) => widget.appLanguage,
child: Consumer<AppNotifier>(
builder: (context, value, _) => MaterialApp(
navigatorKey: GlobalVariable.navState,
debugShowCheckedModeBanner: false,
locale: value.appLocal,
title: 'MyApp',
routes: <String, WidgetBuilder>{
'HomeScreen': (BuildContext context) => HomeScreen(),
},
theme: value.getTheme(),
supportedLocales: [
Locale('en', 'US'),
],
localizationsDelegates: [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
CountryLocalizations.delegate,
],
home: Builder(
builder: (context) {
return FutureBuilder(
future: DeeplinkConfig().initUniLinks(context),
builder: (_, snapshot) {
if (snapshot.connectionState ==
ConnectionState.waiting) {
return Container();
}
return snapshot.data as Widget;
});
},
),
),
),
));
}

此错误告诉您正在使用处置后的AppNotifier

这是一个临时解决方案:

  1. 删除:
appNotifier().dispose();
  1. 或者像这样:
@override
void dispose(){
AppNotifier().dispose(); //Remove This Code
super.dispose();
}

您没有在ChangeNotifierProvider的create中创建新对象。你在传递已经计算过的值。因此,当ChangeNotifierProvider的dispose被内部调用时,它将被处置。

你需要做两件事。

  1. 使用ChangeNotifierProvider.value通过widget.appLanguage
  2. 您必须手动处理在widget. appllanguage中传递的值。也许你可以在初始化它的同一个小部件中处理它。

谢谢。

最新更新