Flutter 未处理的异常:处理后使用了ChangeNotifier
我收到以下错误消息:Flutter 未处理的异常:处理后使用了ChangeNotifier,flutter,flutter-provider,Flutter,Flutter Provider,我收到以下错误消息: Unhandled Exception: A ModeManager was used after being disposed. 我正在使用ChangeNotifier(classModeManager)和ChangeNotifierProvider。 生成方法,我在其中创建提供程序,如下所示: @override Widget build(BuildContext context) { return !_isLoaded ? Center(child: Cir
Unhandled Exception: A ModeManager was used after being disposed.
我正在使用ChangeNotifier(classModeManager)和ChangeNotifierProvider。
生成方法,我在其中创建提供程序,如下所示:
@override
Widget build(BuildContext context) {
return !_isLoaded ? Center(child: CircularProgressIndicator()) : ChangeNotifierProvider(
create: (_) => ModeManager(_appUser),
child: Scaffold(
appBar: AppBar(
title: Text('Connect Spotify'),
),
body: AddSpotifyScreenBody(),
),
);
}
class _AddSpotifyScreenBodyState extends State<AddSpotifyScreenBody> {
@override
Widget build(BuildContext context) {
var provider = Provider.of<ModeManager>(context);
return Center(
child: Padding(
padding: EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Text(provider.isCollecting ? 'COLLECTING NOW' : 'SHARING NOW'),
//...some other widgets using provider...
],
),
),
);
}
}
我使用提供者的小部件如下所示:
@override
Widget build(BuildContext context) {
return !_isLoaded ? Center(child: CircularProgressIndicator()) : ChangeNotifierProvider(
create: (_) => ModeManager(_appUser),
child: Scaffold(
appBar: AppBar(
title: Text('Connect Spotify'),
),
body: AddSpotifyScreenBody(),
),
);
}
class _AddSpotifyScreenBodyState extends State<AddSpotifyScreenBody> {
@override
Widget build(BuildContext context) {
var provider = Provider.of<ModeManager>(context);
return Center(
child: Padding(
padding: EdgeInsets.all(20.0),
child: Column(
children: <Widget>[
Text(provider.isCollecting ? 'COLLECTING NOW' : 'SHARING NOW'),
//...some other widgets using provider...
],
),
),
);
}
}
class\u AddSpotifyScreenBodyState扩展状态{
@凌驾
小部件构建(构建上下文){
var provider=provider.of(上下文);
返回中心(
孩子:填充(
填充:所有边缘设置(20.0),
子:列(
儿童:[
文本(provider.isCollecting?“立即收集”:“立即共享”),
//…其他一些正在使用提供程序的小部件。。。
],
),
),
);
}
}
有谁知道是什么导致了这个错误,或者我做错了什么?非常感谢。在使用
ChangeNotifierProvider()
处理小部件后,您似乎调用了notifyListeners()
。
这发生在我以后的函数调用notifyListeners()
时。如前所述,您可以覆盖ChangeNotifier
类中的notifyListeners
方法:
@override
void dispose() {
_disposed = true;
super.dispose();
}
@override
void notifyListeners() {
if (!_disposed) {
super.notifyListeners();
}
}
不要忘记声明变量
bool\u disposed=false代码>重新启动应用程序,看看它是否工作。此外,请检查提供程序是否正确初始化