Flutter:找不到方向性小部件

时间:2019-05-14 04:10:49

标签: dart flutter

我在android studio中运行Flutter代码时遇到异常。

  

I / flutter(5360):W小部件库引起的异常提示   ╞═════════════════════════════════════════════════ ══════════我/扑   (5360):构建了Text(“ xyz”)时引发了以下断言:I / flutter(5360):找不到方向性小部件。我/扑   (5360):RichText小部件需要Directionality小部件祖先。   I / flutter(5360):无法找到特定的窗口小部件   方向性祖先是:I / flutter(5360):RichText(softWrap:   以盒子宽度包装,maxLines:无限制,文本:“ xyz”)   I / flutter(5360):受影响的小部件的所有权链为:   I / flutter(5360):RichText←Text←Center←Container←[root]   I / flutter(5360):通常,会引入“方向性”小部件   通过I / flutter上的MaterialApp或WidgetsApp小部件(5360):   您的应用程序小部件树。它确定环境读数   方向,用于I / flutter(5360):例如,确定   如何布置文本,如何解释“开始”和“结束”值,以及   解析I /颤振(5360):EdgeInsetsDirectional,   AlignmentDirectional和其他* Direction对象。

代码段:

import 'package:flutter/material.dart';

void main() {
  runApp(
    Container(child: Center(child: Text("xyz"))),
  );
}

我不确定为什么该异常显示

  

I / flutter(5360):通常,方向性小部件由MaterialApp或WidgetsApp小部件在...处引入。

由于一切都是混乱,因此任何窗口小部件都应该对我们有用。

4 个答案:

答案 0 :(得分:2)

如果您使用的是诸如ScaffoldMaterial之类的小部件组件,则无需在textDirection小部件中指定Text,因为{{1}在这些情况下,将隐式提供}。因此,一个好的解决方案是使用:

Directionality

但是,如果您不使用它,则必须

Scaffold(body: Text("xyz"))

答案 1 :(得分:1)

文本小部件需要知道它是应从左到右还是从右到左显示文本。没有默认值。可以通过两种方式提供此信息:

  • 通过将其嵌套在Directionality小部件中(如错误消息中所述,通常为MaterialAppWidgetsApp
  • 明确地,作为构造函数的参数:
Text(
    'Hello World',
    textDirection: TextDirection.ltr,
)

从长远来看,第二种方法显然是无法控制的。

答案 2 :(得分:0)

如果您使用的是方向性构造函数,那么您的问题将会解决

Widget build(BuildContext context) {
    return Directionality(
      textDirection: TextDirection.ltr,
      child: Container(
        color: myColor,
        child: Center(
          child: RaisedButton(
            onPressed: () {
              print('You pressed me');
              changeColor();
            },
            child: Text('Click', textDirection: TextDirection.ltr)
          ),
        ),
      ),
    );
  }

答案 3 :(得分:0)

后期,但我希望它能对您有所帮助。 我也不使用任何预定义的根小部件。因此,我将我的应用程序包装到了主要功能的“方向性”小部件中,而flutter不再抱怨:

我的代码:

void main() {
  runApp(
    new Directionality(textDirection: TextDirection.ltr, child: MyApp())
    );
}