首页 > 解决方案 > Flutter ARB 本地化抛出“getter was called on null”错误

问题描述

按照官方国际化教程的提示,我The getter was called on null在尝试使用从 ARB 文件翻译引擎(AppLocalizations.of(context).helloWrold)自动生成时得到:

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

class Login extends StatelessWidget {
  final loginAction;
  final String loginError;

  const Login(this.loginAction, this.loginError);

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        RaisedButton(
          onPressed: () {
            loginAction();
          },
          child: Text(AppLocalizations.of(context).helloWorld),
        ),
        Text(loginError ?? ''),
      ],
    );
  }
}

标签: flutterdartlocalization

解决方案


这个问题的解决方案是官方教程中缺失的部分。那里没有描述要允许引擎运行,需要在main.dart文件中声明额外的委托。这可以从示例 GitHub 存储库中得出结论。要解决此问题,请转到MaterialApp并添加缺少的委托AppLocalizations.delegate

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


      child: MaterialApp(
          localizationsDelegates: [
            // ... app-specific localization delegate[s] here
            AppLocalizations.delegate,
            GlobalMaterialLocalizations.delegate,
            GlobalWidgetsLocalizations.delegate,
            GlobalCupertinoLocalizations.delegate,
          ],
          supportedLocales: [
            const Locale('en', ''),
            const Locale('pl', '')
          ],
          home: Scaffold(

推荐阅读