【问题标题】:Flutter bloc state set initial value to a dynamic value from sharedPreferencesFlutter bloc 状态将初始值设置为来自 sharedPreferences 的动态值
【发布时间】:2021-07-21 18:45:58
【问题描述】:

我想将初始状态设置为使用shared_preferences 永久保存的值。该值是我的应用程序的语言,我在 main.dart 文件中使用 state.language 设置了我的应用程序的语言环境。

import 'storageUtils.dart';

class LanguageState {
  //TODO: set initial language to language stored with shared_preference
  LanguageState({this.language = LanguagePreference.getLanguage()});
  final String language;

  LanguageState copyWith({
    String? language,
  }) {
    return LanguageState(language: language ?? this.language);
  }
}

这些是我用来更改和获取语言的storageUtils.dart

class LanguagePreference {
  static late SharedPreferences _preferences;

  static Future init() async =>
      _preferences = await SharedPreferences.getInstance();

  static Future changeLanguage(String language) async =>
      await _preferences.setString("language", language);

  static String getLanguage() => _preferences.getString("language") ?? "en";
}

但由于 getLanguage 函数不是常量,我无法使用 getLanguage 函数的动态值初始化状态。有没有其他方法可以用getLanguage函数的动态值初始化语言状态?

【问题讨论】:

    标签: flutter dart flutter-bloc


    【解决方案1】:

    但由于 getLanguage 函数不是常量,我无法使用 getLanguage 函数的动态值初始化状态。

    小修正:您不能在方法调用中将该函数用作默认值。

    还有其他方法可以用getLanguage函数的动态值初始化语言状态吗?

    当然。例如,您可以将它传递到您 创建 状态的位置:

    LanguageBloc(String language) : super(LanguageState(language));
    

    所以无论你在哪里创建你的块,你都可以调用你的方法:

    runApp(
        MultiBlocProvider(
          providers: [
            BlocProvider<LanguageBloc>(
               create: (context) => LanguageBloc(LanguagePreference.getLanguage())
            ),
          ]
        ...
    

    假设您在此之前已经初始化了 LanguagePreference

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 2021-02-12
      • 2021-02-22
      • 2021-03-17
      • 2023-01-27
      • 2020-11-02
      • 2021-02-10
      • 2020-06-16
      • 1970-01-01
      相关资源
      最近更新 更多