Flutter:从其他页面访问存储的 Sharedpreference 值

2024-01-06

我正在一个名为的页面中存储一个值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(使用前将#替换为@)

Flutter:从其他页面访问存储的 Sharedpreference 值 的相关文章

随机推荐

  • ImageJ - 如何导入和显示网格?

    如何在 ImageJ 上打开并显示网格 使用 obj stl 或 dxf 格式 我尝试通过 file open 打开文件 但使用3DViewer http rsbweb nih gov ij plugins 3d viewer or the
  • Three.js 设备方向控制在加载时指向特定目标

    我正在使用 Three js 中的设备方向控件为 Google Cardboard 设置 Web 应用程序 当我加载场景时 相机的默认目标是Y方向 手机上的Z方向 那里可能没有任何物体 我想在加载之前定义一个方向 有人对如何做到这一点而不需
  • jquery 的多个 setinterval 问题

    我正在为以下代码执行 setInterval 单击按钮后 我必须一一执行以下操作 show VM started vmstart setInterval function get getVMstatus function data if d
  • 在 Websphere Portal 8 中以编程方式显式注销用户并重定向到默认登录页面

    我对 WS 门户有点陌生 并且有一个要求 其中在特定场景中我们希望用户注销并将其重定向到默认门户登录页面 我已经尝试过使会话无效清除cookies并执行response sendRedirect 如下所示响应 sendRedirect wp
  • 当用户在 Chromium 中打开新选项卡时运行指定的函数

    我想从 Chromium 的 新标签 页面中删除访问量最大的缩略图 检查该页面的内容后 我确定以下 JavaScript 行可以解决问题 document getElementById most visited remove 但我仍然有一个
  • 获取 std::wstring 的子字符串

    我怎样才能得到a的子串std wstring其中包含一些非 ASCII 字符 以下代码不会输出任何内容 文本是一个阿拉伯单词 包含 4 个字符 每个字符有两个字节 加上单词 Hello include
  • 为什么堆栈跟踪行号与源代码行号不匹配?

    我的应用程序因设备上的 NPE 崩溃 在 ACRA 收到的堆栈跟踪中 行号指的是两个源代码类 SQLiteStatement and SQLiteDatabase For SQLiteDatabase 没有任何行号与任何源代码版本中的行号匹
  • Log4j2 与 apache Ivy 依赖管理无法解析 log4j-api-java9

    当尝试将 apache log4j2 与 ivy 构建管理工具一起使用时 在尝试解决依赖项时出现以下错误 problems summary WARNINGS module not found org apache logging log4j
  • 检索 POJO 外部容器中的 servlet 上下文、会话和请求

    有没有办法从 POJO 检索会话 或者最终从 POJO 中检索 bean 澄清 基本上 我从 servlet 创建一个 bean 并且需要从 Web 容器外部 从 POJO 访问该 bean 的属性 我无法将请求传递给 pojo 并且需要请
  • matplotlib:如何刷新figure.canvas

    我不明白如何刷新FigureCanvasWxAgg 实例 这是示例 import wx import matplotlib from matplotlib backends backend wxagg import FigureCanvas
  • 根据 Windows 主题更改面板的主题(颜色)

    我想根据当前选择的 Windows 主题更改面板的颜色 我已经设置了道具 EnableVisStyles 它改变了工具栏和 Windows 窗体的标题栏等内容 但面板颜色保持不变 有什么办法可以实现这一点吗 问候 严酷的苏曼 您可能已经设置
  • 在 C# 中将委托转换为通用委托

    介绍 我使用委托来传递和存储单个表单的样式逻辑Controls 例如 我有一个委托 其中包含一些Button 样式逻辑如下 button BackColor Color Red button ForeColor Color White bu
  • 在 C 中创建字符串数组

    我想创建一个包含 N 个位置的数组 在每个位置 我想存储一个10个字符的字符串 这就是我尝试过的 在给出的示例中 N 15 但是这个数字可以改变 char userArray 10 malloc sizeof char 10 15 编译 i
  • ImageMagick 缺少解码委托

    我最近搬到 MediaTemple 并按照他们的知识库文章安装了 ImageMagick 和 IMagickhere http kb mediatemple net questions 1778 Is ImageMagick install
  • “无法在任何存储库中找到有效的 gem”(rubygame 等)

    我尝试安装这个 rubygame gem有一段时间了 但是每当我使用该命令时 gem install rubygame 它会给出一个错误 ERROR Could not find a valid gem rubygame gt 0 in a
  • 等待执行器中的所有线程完成?

    我正在实现并行快速排序作为编程实践 完成后 我阅读了 Executors 上的 Java 教程页面 这听起来像是它们可以使我的代码更快 不幸的是 我依靠 join 来确保程序在所有内容都排序完成之前不会继续 现在我正在使用 public s
  • 如何防止 grep 打印尾随换行符?

    我在用grep产生将由另一个程序解析的输出 但是 该程序期望输出仅为数字或零字节 Now grep在输出后输出一个换行符 我已经检查过 Z选项 但它似乎不起作用 因为我正在使用 grep 进行计数 c 我正在执行sh not bash 所以
  • 如何使用 JavaScript/jQuery 将新数据发布到 CouchDB

    我找到了答案here https stackoverflow com questions 2099728 how do i send an ajax request on a different port with jquery对于下面的问
  • C语言中为什么会有NULL?

    为什么有一个NULL在C语言中 是否有一个上下文 其中只是简单的文字0会不会工作完全一样 实际上 你可以使用文字0任何你会使用的地方NULL 第 6 3 2 3p3 节C标准 http www open std org jtc1 sc22
  • Flutter:从其他页面访问存储的 Sharedpreference 值

    我正在一个名为的页面中存储一个值page1 dart 我想访问存储的值page2 dart or page3 dart 我怎样才能实现这个目标 Flutter 共享首选项实际上是作为内存缓存实现的 你第一次打电话的时候SharedPrefe