如何在 Flutter 中处置 ChangeNotifierProvider<T>.value( )

问题描述 投票:0回答:3

如何在 Flutter 中处理 ChangeNotifierProvider.value( )

这样就不会出现内存泄漏了

我将作为 ChangeNotifierProvider.value( ) 的值的对象作为单例 因为我需要多个页面来在一个对象中共享它们的状态

flutter dispose provider
3个回答
2
投票

ChangeNotifierProvider
在需要时自动调用状态的
dispose()
方法。你不需要对此做任何事情。他们在这段视频中讨论了这一点:Flutter 中的实用状态管理(Google I/O'19)


0
投票

您需要使用

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


0
投票

其他答案仅适用于

ChangeNotifierProvider
默认构造函数,但不适用于问题中的
ChangeNotifierProvider.value
命名构造函数。

根据包作者的说法,您负责处置该对象:

ChangeNotifierProvider.value 不会处置 ChangeNotifier

这是你的工作(使用典型的 StatefulWidget?),因为使用

.value
构造函数,提供者不可能知道该对象是否不再使用。

来自:以下 Github 问题评论:如何处置也提供 ChangeNotifierProvider.value 的 ChangeNotifier?

© www.soinside.com 2019 - 2024. All rights reserved.