我正在尝试在项目中使用Flutter bloc。在State中创建State和Event类后,我有了一个LanguageLoad
类:
abstract class LanguageState extends Equatable {
const LanguageState();
@override
List<Object> get props => [];
}
class LanguageInitial extends LanguageState {}
class LanguageLoad extends LanguageState {
final Locale locale;
LanguageLoad(this.locale);
@override
List<Object> get props => [locale];
}
创建主类后使用的bloc类后:
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(
BlocProvider(
create: (_) => LanguageBloc()..add(LanguageLoadStarted()),
child: MyApp()),
);
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<LanguageBloc, LanguageState>(
builder: (context, languageState) => MaterialApp(
debugShowCheckedModeBanner: false,
locale: languageState.locale, // locale is not defined
}
但是我不知道为什么locale: languageState.locale
中未定义语言环境?
您不知道languageState
的类型,需要将其强制转换为locale
值。这是我的生产应用程序中的一部分:
BlocBuilder<LanguageBloc, LanguageState>(
builder: (context, state) {
Locale locale;
if (state is LanguageLoaded) {
locale = state.locale;
}
return MaterialApp(
locale: locale,
就我而言,即使Locale首次为null,我也会加载MaterialApp
。这取决于您的应用逻辑。