首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振组状态将初始值设置为来自sharedPreferences的动态值

颤振组状态将初始值设置为来自sharedPreferences的动态值
EN

Stack Overflow用户
提问于 2021-04-28 11:54:41
回答 1查看 1.3K关注 0票数 4

我希望将初始状态设置为使用首选项持久保存的值。这个值是我的应用程序的语言,我用state.languagestate.language文件中设置了应用程序的区域设置。

代码语言:javascript
复制
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

代码语言:javascript
复制
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函数的动态值初始化语言状态?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-28 15:24:17

但是由于getLanguage函数不是常量,所以不能用getLanguage函数的动态值初始化状态。

小更正:在方法调用中,不能将函数用作默认值。

是否有另一种方法用getLanguage函数的动态值初始化语言状态?

好的。例如,您可以在创建状态的地方传递它:

代码语言:javascript
复制
LanguageBloc(String language) : super(LanguageState(language));

所以,无论你在哪里创建你的阵营,你都可以直接调用你的方法:

代码语言:javascript
复制
runApp(
    MultiBlocProvider(
      providers: [
        BlocProvider<LanguageBloc>(
           create: (context) => LanguageBloc(LanguagePreference.getLanguage())
        ),
      ]
    ...

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67299755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档