在嵌套小部件中使用时,fllutter I18n会引发异常

时间:2019-11-12 15:41:58

标签: flutter dart

我正在编写一个flutter应用程序,在其中使用flutter I18n软件包。它在大多数位置上都可以正常工作,但是当我尝试在创建另一个小部件的方法中使用它时,它会崩溃并显示以下错误。

  

在构建LightLocationWidget时引发了以下NoSuchMethodError(脏,依赖项:[_ LocalizationsScope- [GlobalKey#ced6b]],状态:_LightLocationWidgetState#3b5b6):   getter'decodedMap'在null上被调用。   接收者:null   尝试调用:decodedMap   引发异常时,这是堆栈:    Object.noSuchMethod(dart:core-patch / object_patch.dart:51:5)    FlutterI18n._translateWithKeyFallback(包:flutter_i18n / flutter_i18n.dart:162:43)    FlutterI18n.translate(package:flutter_i18n / flutter_i18n.dart:139:26)

在包装中使用此方法:

static String _translateWithKeyFallback(
  final BuildContext context, final String key) {
final Map<String, dynamic> decodedStrings =
    _retrieveCurrentInstance(context).decodedMap;
String translation = _decodeFromMap(decodedStrings, key);
if (translation == null) {
  print("**$key** not found");
  translation = key;
}
return translation;}

我的引发异常的代码:

    @override
    Widget build(BuildContext context) {
      return Row(
          children: [
      Padding(
      padding: EdgeInsets.all(10),
      child: getLightButton(1),
      )

      ...

   ButtonTheme getLightButton(int typeNumber) {   
    return ButtonTheme(
      child: FlatButton(
        child: Column(children: [Text(FlutterI18n.translate(context, "lightlocation")
      ...

当我直接在小部件上使用此键时,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

我发现了问题。我两次使用MaterialApp。一次在我的主屏幕上,也在另一个屏幕上。在另一个屏幕上切换到Scaffold即可解决问题。