我正在一个名为的页面中存储一个值page1.dart
。我想访问存储的值page2.dart
or page3.dart
。我怎样才能实现这个目标?
Flutter 共享首选项实际上是作为内存缓存实现的。你第一次打电话的时候SharedPreferences.getInstance()
所有当前值均从 NSUserDefaults(在 iOS 上)和 SharedPreferences(在 Android 上)读取并缓存在内存中。这就涉及到通道了,异步也是如此。 Future 返回一个包装此缓存的单例类。对 getInstance 的任何后续调用都会返回此单例类。
当您从共享首选项中获取值时,该值只是从内存缓存中获取。当您设置一个值时,缓存会立即更新,并且异步方法开始将其写回操作系统。 (您可以等待确认完成,但不必这样做。)请注意,对缓存的读取和写入是同步的,因此您可以立即访问该设置缓存。 (可能需要一些时间才能到达操作系统,因此不能保证内存缓存与设备首选项相匹配,但这应该只在错误情况下发生。)
这很有趣的原因是一旦你得到了结果SharedPreferences.getInstance()
您可以同步读取和写入值。由于该实例是单例的,因此保留它的副本似乎是合理的。特别是,您可以使主程序异步并在那里获取它。
SharedPreferences sp;
void main() async {
sp = await SharedPreferences.getInstance();
runApp(new MyApp());
}
这可以让你参考sp
整个代码:
onPressed: () {
sp.setString('abc', 'def');
},
知道内存中的缓存是一致的。特别是,在一个页面中设置的任何值都可以在导航后在另一页面中获取。
说了这么多,您可能应该将存储的首选项视为状态的一部分,它恰好在启动时初始化,并在设置它时触发后台任务以自动保留它。然后,您可以按照与状态的其余部分相同的方式处理首选项,但您正在这样做(InheritedWidget + 控制器、Redux、Streams 等)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)