在不使用 MaterialApp 的情况下为 Widget 添加本地化?

Mar*_*ark 5 flutter

我了解如何通过将 localizationsDelegates 和 supportedLocales 添加到 MaterialApp 小部件来为应用程序添加本地化。本地化我的应用程序工作正常。

我正在创建一个可以在其他 Flutter 应用程序中使用的 Flutter 包。包中的某些小部件需要具有本地化文本,例如某些错误消息和按钮标签。该包包含所有自己的本地化字符串。如何在没有 MaterialApp 的情况下本地化包中的字符串?

Mat*_*Pag 0

我以Localizations这种方式使用小部件进行测试,而不使用 MaterialApp:

一个简单的演示小部件:

class WidgetToTest extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //AppLocalizations.of(context)!.hello = 'hello' in generated file
    return Text(AppLocalizations.of(context)!.hello);
  }
}
Run Code Online (Sandbox Code Playgroud)

考试:

  testWidgets('test localizations widget', (tester) async {
    await tester.pumpWidget(
      Localizations(
        locale: const Locale('en'),
        delegates: AppLocalizations.localizationsDelegates,
        child: WidgetToTest(),
      )
    );
    expect(find.text('hello'), findsOneWidget);
  });
Run Code Online (Sandbox Code Playgroud)

如果您只需要启用在小部件中工作,则可以使用本地化小部件。AppLocalizations