【问题标题】:Flutter returns null for AppLocalization.of(context)Flutter 为 AppLocalization.of(context) 返回 null
【发布时间】:2021-08-22 18:51:30
【问题描述】:

我正在使用 Flutter 构建一个 Web 应用程序,我想在我的新应用程序上使用 Flutter 的国际化功能。我正在关注Flutter-Tutorial,并尝试使用 arb 文件设置应用程序标题。正如教程中提到的,app_localization.dart 文件是为 'en' 和 'de' 正确创建的。然而,我在下面的代码中得到了一个空指针异常。

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'MyApp',
      localizationsDelegates: [
        AppLocalizations.delegate, // Post-EDIT due to croxx5f
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: [
        Locale('de', ''),
        Locale('en', ''),
      ],
      theme: ThemeData(
        primarySwatch: Colors.red,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text(AppLocalizations.of(context)!.appTitle),
        ),
        body: Text(AppLocalizations.of(context)!.appTitle)
      ),
    );
  }
}

其实AppLocalizations.of(context)返回null。

【问题讨论】:

  • 好的,除了缺少 AppLocalization.delegate 之外,我注意到我忘记添加 'intl: ^0.17.0 # Add this line'。在那之后我得到了 NPE,但是在将标题固定为一个常量字符串之后,它就消失了。谢谢!

标签: flutter dart localization internationalization


【解决方案1】:

您应该在您的 MaterialApp 中添加AppLocalizations

MaterialApp(
...
      localizationsDelegates: const [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
      ],
      supportedLocales: AppLocalizations.supportedLocales,
...

【讨论】:

  • 不幸的是,变化不大,我仍然得到 NPE...
  • 尝试运行flutter clean && flutter pub get dependencies && flutter packages get从.arb触发codegen
猜你喜欢
  • 2019-12-27
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 2020-08-23
  • 2021-09-28
  • 2020-11-10
  • 2020-07-12
  • 2021-06-14
相关资源
最近更新 更多