用户首选项 Flutter 管理

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

我正在使用 Flutter 开发一个应用程序,其中用户偏好会影响 UI,例如,用户首选的公制系统会通过转换为千克或磅来影响测量的显示方式。

我很好奇如何实现用户偏好的检索方法:

  • 允许在代码中同步访问用户首选项(每次都必须调用并等待 getUserPreferences 只是为了根据 UI 中的用户首选项将实体映射到视图模型,这很麻烦)
  • 允许将 UI 同步到存储的用户首选项中的更改

我正在使用 Riverpod,我想到的最接近的解决方案是使用 Stream 来获取用户首选项并在 MaterialApp Widget 上方的主要部分中观看它,以便我可以访问 UserPreferences 值,如下所示。

主要:

class MyApp extends ConsumerWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final userSettingStream = ref.watch(getUserPreferencesProvider);

    return userSettingStream.maybeWhen(
        data: (userPreferences) => MaterialApp.router(
              locale: context.locale,
              debugShowCheckedModeBanner: false,
              title: 'App',
              localizationsDelegates: context.localizationDelegates,
              supportedLocales: context.supportedLocales,
              theme: AppTheme().themeData,
              routerConfig: router,
            ),
        orElse: () => LoadingSpinner());
  }
}

在其他地方同步访问用户首选项:

ref.watch(getUserPreferencesProvider).requireValue

我为什么要改变?

  • 使用 requireValue 可能容易出错
  • 通过更改 UserSettings 来更新整个 MaterialApp 小部件可能是一种矫枉过正(尽管文档声称当提供者更改时它不会重建我们的整个应用程序)

上述方法使用的文档: https://riverpod.dev/docs/essentials/eager_initialization

flutter dart stream riverpod
1个回答
0
投票

也许看看这个教程:https://docs.flutter.dev/cookbook/persistence/key-value

这是一个来自 flutter 的教程,使用了 shared_preferences 包。仅当您存储较小的值时(它是为较小的首选项而设计的),它才可用,并且可能不需要将这些值存储在数据库中,但如果您想使用数据库跟踪这些首选项,则这不是您所需要的。在这种情况下,也许启动屏幕可以解决问题?

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