我正在使用 Flutter 开发一个应用程序,其中用户偏好会影响 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
我为什么要改变?
上述方法使用的文档: https://riverpod.dev/docs/essentials/eager_initialization
也许看看这个教程:https://docs.flutter.dev/cookbook/persistence/key-value
这是一个来自 flutter 的教程,使用了 shared_preferences 包。仅当您存储较小的值时(它是为较小的首选项而设计的),它才可用,并且可能不需要将这些值存储在数据库中,但如果您想使用数据库跟踪这些首选项,则这不是您所需要的。在这种情况下,也许启动屏幕可以解决问题?