我希望将初始状态设置为使用首选项持久保存的值。这个值是我的应用程序的语言,我用state.language在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函数的动态值初始化语言状态?
发布于 2021-04-28 15:24:17
但是由于getLanguage函数不是常量,所以不能用getLanguage函数的动态值初始化状态。
小更正:在方法调用中,不能将函数用作默认值。
是否有另一种方法用getLanguage函数的动态值初始化语言状态?
好的。例如,您可以在创建状态的地方传递它:
LanguageBloc(String language) : super(LanguageState(language));所以,无论你在哪里创建你的阵营,你都可以直接调用你的方法:
runApp(
MultiBlocProvider(
providers: [
BlocProvider<LanguageBloc>(
create: (context) => LanguageBloc(LanguagePreference.getLanguage())
),
]
...假设您在此之前已经初始化了LanguagePreference。
https://stackoverflow.com/questions/67299755
复制相似问题