Flutter:未找到方向性小部件

jit*_*555 3 dart flutter

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

我/扑(5360):???小部件库捕获的异常 ????????????????????????????????????????????? ??????????????? I/flutter ( 5360): 以下断言被抛出 building Text("xyz"): I/flutter (5360): No Directionality widget found。I/flutter (5360):RichText 小部件需要一个 Directionality 小部件祖先。I/flutter ( 5360): 找不到方向性祖先的特定小部件是: I/flutter ( 5360): RichText(softWrap: wrapping at box width, maxLines: unlimited, text: "xyz") I/flutter ( 5360) ): 受影响小部件的所有权链是: I/flutter ( 5360): RichText ? 文本 ?中心 ?容器 ?[root] I/flutter (5360):通常,Directionality 小部件由 MaterialApp 或 WidgetsApp 小部件在 I/flutter (5360):应用程序小部件树的顶部引入。

代码片段:

import 'package:flutter/material.dart';

void main() {
  runApp(
    Container(child: Center(child: Text("xyz"))),
  );
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这个例外说

I/flutter (5360):通常,Directionality 小部件由 MaterialApp 或 WidgetsApp 小部件在...

因为在 flutter 中一切都是小部件,所以任何小部件都应该为我们工作。

Cop*_*oad 10

如果您使用的是材质小部件组件,例如Scaffold, Material,则无需textDirectionText小部件中指定,因为Directionality在这些情况下隐式提供。因此,一个好的解决方案是使用:

Scaffold(body: Text("xyz"))
Run Code Online (Sandbox Code Playgroud)

但是如果你不使用它,你将不得不

Text(
    'xyz',
    textDirection: TextDirection.ltr, 
)
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您使用方向性构造函数,您的问题将得到解决

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)
          ),
        ),
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)