未处理的异常:在处理后使用了 ChangeNotifier

cav*_*gov 0 flutter flutter-provider

我收到此错误消息:

Unhandled Exception: A ModeManager was used after being disposed.
Run Code Online (Sandbox Code Playgroud)

我将ChangeNotifier(类ModeManager)与ChangeNotifierProvider一起使用。我在其中创建 Provider 的 Build 方法如下所示:

@override
Widget build(BuildContext context) {
    return !_isLoaded ? Center(child: CircularProgressIndicator()) : ChangeNotifierProvider(
        create: (_) => ModeManager(_appUser),
        child: Scaffold(
            appBar: AppBar(
            title: Text('Connect Spotify'),
            ),
            body: AddSpotifyScreenBody(),
        ),
    );
}
Run Code Online (Sandbox Code Playgroud)

我使用 provider 的小部件看起来像这样:

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...
          ],
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道是什么导致了这个错误或者我做错了什么?非常感谢您。

Ism*_*rif 9

似乎您notifyListeners()在使用ChangeNotifierProvider(). 当 Future 函数调用notifyListeners(). 正如这里提到的,您可以覆盖类中的notifyListeners方法ChangeNotifier

@override
void dispose() {
  _disposed = true;
  super.dispose();
}

@override
void notifyListeners() {
  if (!_disposed) {
    super.notifyListeners();
  }
}
Run Code Online (Sandbox Code Playgroud)

不要忘记声明变量 bool _disposed = false;