flutter bloc:变量未在BlocBuilder中定义

问题描述 投票:0回答:1

我正在尝试在项目中使用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中未定义语言环境?

flutter bloc
1个回答
1
投票

您不知道languageState的类型,需要将其强制转换为locale值。这是我的生产应用程序中的一部分:

BlocBuilder<LanguageBloc, LanguageState>(
    builder: (context, state) {
      Locale locale;
      if (state is LanguageLoaded) {
        locale = state.locale;
      }
      return MaterialApp(
        locale: locale,

就我而言,即使Locale首次为null,我也会加载MaterialApp。这取决于您的应用逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.