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

重新启动应用程序,看看它是否工作。此外,请检查提供程序是否正确初始化