首页 > 解决方案 > 使用flutter_bloc进行flutter国际化

问题描述

Bloc 很好,因为它可以在没有上下文的情况下工作。内化需要上下文。您可以尝试将其传递给块,但在我的情况下,块在内部化之前被初始化。MaterialApp之前的MultiProvider,如何更改顺序并在bloc内部使用内部化?

class MyApp extends StatelessWidget {
  final routes = <String, WidgetBuilder>{
    StartPage.routeName: (BuildContext context) => new StartPage(),
    EditorPage.routeName: (BuildContext context) => new EditorPage(),
  };

  @override
  Widget build(BuildContext context) {
    
  //localization always == null
  var localization = S.of(context);
   
   return MultiProvider(
        providers: [
          ChangeNotifierProvider.value(
            value: ChannelModel(),
          ),
          BlocProvider<InternetBloc>(
            create: (context) => InternetBloc(localizations: localization),
          ),
          BlocProvider<MultiBloc>(
            create: (context) => MultiBloc(),
          ),
          BlocProvider<DbBloc>(
            create: (context) => DbBloc(),
          ),
          BlocProvider<FileBloc>(
            create: (context) => FileBloc(),
          ),
        ],
        child: MaterialApp(
          localizationsDelegates: [
            S.delegate,
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
            GlobalCupertinoLocalizations.delegate,
          ],
          supportedLocales: S.delegate.supportedLocales,
          theme: ThemeData(
            primarySwatch: Colors.blue,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          home: StartPage(),
          routes: routes,
        ));
  }
}

标签: flutterbloc

解决方案


推荐阅读