如何在 Flutter 中处理 ChangeNotifierProvider.value( )
这样就不会出现内存泄漏了
我将作为 ChangeNotifierProvider.value( ) 的值的对象作为单例 因为我需要多个页面来在一个对象中共享它们的状态
ChangeNotifierProvider
在需要时自动调用状态的dispose()
方法。你不需要对此做任何事情。他们在这段视频中讨论了这一点:Flutter 中的实用状态管理(Google I/O'19)
您需要使用
dispose()
的State
方法或ChangeNotifierProvider
的默认构造函数。后者会自动处理在 create
函数中创建的对象。
我想知道为什么你使用
ChangeNotifierProvider.value()
而不是 ChangeNotifierProvider()
,但假设你想将值传递到不同的页面,你可以按如下方式组合两者。
ChangeNotifierProvider<Foo>(
create: (context) => Foo(), // this Foo object is disposed of automatically
)
树下的某个地方:
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (context2) => Provider<Foo>.value(
value: Provider.of<Foo>(context, listen: false),
child: NextPage(),
),
),
)
注意:如果您提供上面的值,则无需执行此操作
MaterialApp
。
其他答案仅适用于
ChangeNotifierProvider
默认构造函数,但不适用于问题中的 ChangeNotifierProvider.value
命名构造函数。
根据包作者的说法,您负责处置该对象:
ChangeNotifierProvider.value 不会处置 ChangeNotifier
这是你的工作(使用典型的 StatefulWidget?),因为使用
构造函数,提供者不可能知道该对象是否不再使用。.value
来自:以下 Github 问题评论:如何处置也提供 ChangeNotifierProvider.value 的 ChangeNotifier?