Flutter bloc:变量未在 BlocBuilder 中定义



我正在尝试在我的项目中使用 Flutter bloc。在状态中创建状态和事件类后,我有一个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,

就我而言,即使语言环境第一次为空,我也会加载MaterialApp。这取决于您的应用逻辑。

最新更新