Flutter 错误:具有多个子项的 RenderFlex 的 textDirection 为 null

Sur*_*gch 1 dart flutter text-direction

我正在测试一个包含以下代码的小部件(改编自此处):

await tester.pumpWidget(
  MediaQuery(
    data: const MediaQueryData(devicePixelRatio: 1.0),
    child: FocusScope(
      node: focusScopeNode,
      autofocus: true,
      child: Row(
        children: <Widget>[
          MongolEditableText(
            key: key1,
            controller: TextEditingController(),
            focusNode: focusNode,
            style: const TextStyle(fontSize: 9),
            cursorColor: cursorColor,
          ),
          MongolEditableText(
            key: key2,
            controller: TextEditingController(),
            focusNode: focusNode,
            style: const TextStyle(fontSize: 9),
            cursorColor: cursorColor,
          ),
        ],
      ),
    ),
  ),
);
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我得到以下异常:

具有多个子级的水平 RenderFlex 具有 null textDirection,因此布局顺序未定义。

我尝试textDirection向正在测试的自定义小部件添加一个参数,但这没有改变任何内容。

我在这里找到了答案,所以我在下面添加一个答案。

Sur*_*gch 5

Flex 小部件喜欢RowColumn需要知道其子项的文本方向。有三种方法可以做到这一点。

1.使用WidgetsApp祖先

MaterialApp 和 CupertinoApp 在内部使用 WidgetsApp。这些都提供了默认的方向性。

MaterialApp(
  home: MyWidgetTree(
    child: Row(
      children: <Widget>[
Run Code Online (Sandbox Code Playgroud)

2. 用方向性小部件包裹

您还可以使用小部件包裹该行Directionality并为其指定方向,如下所示:

Directionality(
  textDirection: TextDirection.ltr,
  child: Row(
    children: <Widget>[
Run Code Online (Sandbox Code Playgroud)

3.添加textDirection属性

您可以Row使用以下属性给出指示textDirection

Row(
  textDirection: TextDirection.ltr,
  children: <Widget>[
Run Code Online (Sandbox Code Playgroud)

来源

感谢此评论的帮助。