Flutter:由于上下文为空,本地化不起作用。如何正确地将其从无状态传递到有状态?

问题描述 投票:0回答:1

我有一个名为myPage.dart的无状态小部件。其中包含StackTextsStateful List View Builder

这是代码(我现在注释掉第二组TextStateful List View Builder

Widget content(BuildContext context) =>
    Container(
      child: Stack(
        children: <Widget>[
          sameDayText(context),
          SameDayWorkManagement(context),
//            nextDayText(),
//            nextDay.NextDayWorkManagement(),
        ],
      ),
    );

sameDayText没问题。可能是因为该类位于myPage.dart内,但我似乎无法将上下文传递给sameDayWorkManagement.dart,这是一个包含listview builder的有状态小部件。请记住,过去一切正常。只是当我现在尝试添加本地化时,由于某种原因,sameDayWorkManagement中的上下文似乎为空。本地化需要上下文。并且我在对文本进行本地化的sameDayWorkManagement中的代码片段中不断遇到错误。又因为上下文为空:

这里是sameDayWorkManagement.dart中上下文为空的示例代码

Localization.of(widget.buildContext).getTranslatedValue('wakeup') 

这是sameDayWorkManagement.dart的脚本

class SameDayWorkManagement extends StatefulWidget {
  BuildContext buildContext;
  SameDayWorkManagement(buildContext);
  @override
  _SameDayWorkManagementState createState() => _SameDayWorkManagementState();
}


class _SameDayWorkManagementState extends State<SameDayWorkManagement>
    with SingleTickerProviderStateMixin {

  @override
  Widget build(BuildContext context) {
    return Container(
//      backgroundColor: Color(app_background_color_blue),
      child: LayoutBuilder(
        builder: (context, constraints) => SafeArea(
          child: Container(
            child: new StoreConnector<AppState, MainPageViewModel>(
              converter: (store) => MainPageViewModel.fromStore(store),
              builder: ( _, viewModel) => content(viewModel, constraints),
            ),
          ),
        ),
      ),
    );
  }

  @override
  void initState () {
    super.initState();
    if(widget.buildContext != null) {
      print("is true");
    } else {
      print("is not true");
    }
  }

在initState中,结果为is not true

更确切地说。这是myPage的图像,没有本地化,而是使用静态日语文本enter image description here

第一个带有电话图标的圆点和日语文本是sameDayText小部件。其下方的卡为sameDayWorkManagement,其列表视图和可滚动显示。然后剩下的就是那些我现在已经注释掉的next day

flutter stateless stateful
1个回答
0
投票

我创建了一个非常丑陋的解决方法,所以我仍然希望这个问题能够解决。我的解决方法是,我使用本地化在myPage中创建了所有必要翻译文本的地图,该地图再次在其中工作。并将该映射作为参数传递给sameDayWorkManagement。并使用该地图填充我所需的文本。是的,这非常丑陋。但目前它正在工作。

© www.soinside.com 2019 - 2024. All rights reserved.