web-dev-qa-db-ja.com

方向性ウィジェットが見つかりません

flutterに単純なレイアウトを作成しようとしていますが、このエラーが発生し続けます:

次のアサーションが、テキスト(「機能の高速化」、textAlign:center)の構築でスローされました:方向性ウィジェットが見つかりません。

問題はTextDirectionクラスのプロパティにあると思いますが、見つけることができませんでした。

ここに私のコードがあります:

import 'package:flutter/material.Dart';
import 'package:flutter/widgets.Dart';

void main(){

  runApp( new MyHome());
}

class MyHome extends StatelessWidget{

  @override

  Widget build(BuildContext context) {
    // TODO: implement build
    return new Material(
      child: new Container(
        color: Colors.red,
        margin: const EdgeInsets.all(5.0),
        child: new Row(
          children: <Widget>[
            new Expanded(
              child: new Text('Deliver features faster', textAlign: TextAlign.center),
            ),
            new Expanded(
              child: new Text('Craft beautiful UIs', textAlign: TextAlign.center),
            ),
            new Expanded(
              child: new FittedBox(
                fit: BoxFit.contain, // otherwise the logo will be tiny
                child: const FlutterLogo(),
              ),
            ),
          ],
        )
      ),
    );
  }
}

エラーの完全なスタックトレースは次のとおりです。

The following assertion was thrown building Text("Deliver features faster", textAlign: center):
No Directionality widget found.
RichText widgets require a Directionality widget ancestor.
The specific widget that could not find a Directionality ancestor was:
  RichText(textAlign: center, softWrap: wrapping at box width, maxLines: unlimited, text: "Deliver
  features faster")
The ownership chain for the affected widget is:
  RichText ← Text ← Expanded ← Row ← DecoratedBox ← Padding ← Container ← DefaultTextStyle ←
  AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#978b7 ink renderer] ← ⋯
Typically, the Directionality widget is introduced by the MaterialApp or WidgetsApp widget at the
top of your application widget tree. It determines the ambient reading direction and is used, for
example, to determine how to lay out text, how to interpret "start" and "end" values, and to resolve
EdgeInsetsDirectional, AlignmentDirectional, and other *Directional objects.
When the exception was thrown, this was the stack:
#0      debugCheckHasDirectionality.<anonymous closure> (package:flutter/src/widgets/debug.Dart:223:7)
#1      debugCheckHasDirectionality (package:flutter/src/widgets/debug.Dart:239:4)
#2      RichText.createRenderObject (package:flutter/src/widgets/basic.Dart:4245:37)
#3      RenderObjectElement.mount (package:flutter/src/widgets/framework.Dart:4259:28)
#4      Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#5      Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.Dart:3636:16)
#7      Element.rebuild (package:flutter/src/widgets/framework.Dart:3478:5)
#8      ComponentElement._firstBuild (package:flutter/src/widgets/framework.Dart:3605:5)
#9      ComponentElement.mount (package:flutter/src/widgets/framework.Dart:3600:5)
#10     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#11     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#12     ComponentElement.performRebuild (package:flutter/src/widgets/framework.Dart:3636:16)
#13     Element.rebuild (package:flutter/src/widgets/framework.Dart:3478:5)
#14     ComponentElement._firstBuild (package:flutter/src/widgets/framework.Dart:3605:5)
#15     ComponentElement.mount (package:flutter/src/widgets/framework.Dart:3600:5)
#16     ParentDataElement.mount (package:flutter/src/widgets/framework.Dart:3938:16)
#17     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#18     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.Dart:4738:32)
#19     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#20     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#21     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.Dart:4633:14)
#22     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#23     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#24     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.Dart:4633:14)
#25     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#26     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#27     ComponentElement.performRebuild (package:flutter/src/widgets/framework.Dart:3636:16)
#28     Element.rebuild (package:flutter/src/widgets/framework.Dart:3478:5)
#29     ComponentElement._firstBuild (package:flutter/src/widgets/framework.Dart:3605:5)
#30     ComponentElement.mount (package:flutter/src/widgets/framework.Dart:3600:5)
#31     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#32     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#33     ComponentElement.performRebuild (package:flutter/src/widgets/framework.Dart:3636:16)
#34     Element.rebuild (package:flutter/src/widgets/framework.Dart:3478:5)
#35     ComponentElement._firstBuild (package:flutter/src/widgets/framework.Dart:3605:5)
#36     ComponentElement.mount (package:flutter/src/widgets/framework.Dart:3600:5)
#37     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#38     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#39     ComponentElement.performRebuild (package:flutter/src/widgets/framework.Dart:3636:16)
#40     Element.rebuild (package:flutter/src/widgets/framework.Dart:3478:5)
#41     ComponentElement._firstBuild (package:flutter/src/widgets/framework.Dart:3605:5)
#42     StatefulElement._firstBuild (package:flutter/src/widgets/framework.Dart:3752:22)
#43     ComponentElement.mount (package:flutter/src/widgets/framework.Dart:3600:5)
#44     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#45     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#46     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.Dart:4633:14)
#47     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#48     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#49     ComponentElement.performRebuild (package:flutter/src/widgets/framework.Dart:3636:16)
#50     Element.rebuild (package:flutter/src/widgets/framework.Dart:3478:5)
#51     ComponentElement._firstBuild (package:flutter/src/widgets/framework.Dart:3605:5)
#52     ComponentElement.mount (package:flutter/src/widgets/framework.Dart:3600:5)
#53     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#54     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#55     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.Dart:4633:14)
#56     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#57     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#58     ComponentElement.performRebuild (package:flutter/src/widgets/framework.Dart:3636:16)
#59     Element.rebuild (package:flutter/src/widgets/framework.Dart:3478:5)
#60     ComponentElement._firstBuild (package:flutter/src/widgets/framework.Dart:3605:5)
#61     StatefulElement._firstBuild (package:flutter/src/widgets/framework.Dart:3752:22)
#62     ComponentElement.mount (package:flutter/src/widgets/framework.Dart:3600:5)
#63     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#64     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#65     ComponentElement.performRebuild (package:flutter/src/widgets/framework.Dart:3636:16)
#66     Element.rebuild (package:flutter/src/widgets/framework.Dart:3478:5)
#67     ComponentElement._firstBuild (package:flutter/src/widgets/framework.Dart:3605:5)
#68     StatefulElement._firstBuild (package:flutter/src/widgets/framework.Dart:3752:22)
#69     ComponentElement.mount (package:flutter/src/widgets/framework.Dart:3600:5)
#70     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#71     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#72     ComponentElement.performRebuild (package:flutter/src/widgets/framework.Dart:3636:16)
#73     Element.rebuild (package:flutter/src/widgets/framework.Dart:3478:5)
#74     ComponentElement._firstBuild (package:flutter/src/widgets/framework.Dart:3605:5)
#75     ComponentElement.mount (package:flutter/src/widgets/framework.Dart:3600:5)
#76     Element.inflateWidget (package:flutter/src/widgets/framework.Dart:2890:14)
#77     Element.updateChild (package:flutter/src/widgets/framework.Dart:2693:12)
#78     RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.Dart:852:16)
#79     RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.Dart:823:5)
#80     RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.Dart:769:17)
#81     BuildOwner.buildScope (package:flutter/src/widgets/framework.Dart:2205:19)
#82     RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.Dart:768:13)
#83     BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.Dart:657:7)
#84     runApp (package:flutter/src/widgets/binding.Dart:699:7)
#85     main (/data/user/0/com.yourcompany.flutterproject/cache/flutter_projectENWZDI/flutter_project/lib/main.Dart:6:3)
#86     _startIsolate.<anonymous closure> (Dart:isolate-patch/Dart:isolate/isolate_patch.Dart:279)
#87     _RawReceivePortImpl._handleMessage (Dart:isolate-patch/Dart:isolate/isolate_patch.Dart:165)
════════════════════════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: No Directionality widget found.
Another exception was thrown: Horizontal RenderFlex with multiple children has a null textDirection, so the layout order is undefined.
Another exception was thrown: 'package:flutter/src/rendering/box.Dart': Failed assertion: line 1446 pos 12: 'hasSize': is not true.
uid=10079(com.yourcompany.flutterproject) Thread-5 identical 2 lines
Another exception was thrown: 'package:flutter/src/rendering/box.Dart': Failed assertion: line 1446 pos 12: 'hasSize': is not true.
Another exception was thrown: 'package:flutter/src/rendering/proxy_box.Dart': Failed assertion: line 1564 pos 12: 'hasSize': is not true.
17

flutterはテキストがLTRかRTLかを知らないため、 textDirection を明示的に伝える必要があります

new Text("Hello", textDirection: TextDirection.ltr)

または、テキストを 方向性 ウィジェットでラップすることもできます

new Directionality(
          textDirection: TextDirection.ltr,
          child: new Text('Hello')

そしてその目的は次のとおりです。

テキストおよびテキストの方向に依存するレンダリングオブジェクトの周囲の方向性を決定するウィジェット。

また、MaterialAppウィジェットのスコープ内のTextウィジェットには、ウィジェットとマテリアルライブラリのデフォルトのローカライズがLTRであるため、明示的な書き込み方向を指定する必要はありません。

30
Raouf Rahiche

MaterialAppを使用しない場合は、自分でアプリをいくつかのウィジェットにラップする必要があります

import 'Dart:ui' as ui;
...
runApp(
    new MediaQuery(
        data: new MediaQueryData.fromWindow(ui.window),
        child: new Directionality(
            textDirection: TextDirection.rtl,
            child: new MyHome())))
15

問題は、ウィジェットをMaterialAppにラップしていないことではありません。ドキュメントでは、このエラーは、行を行に、列を列に、または列をリストビューにネストするなど、同じ種類のウィジェットのネストが原因で発生するため、方向が特定できないためにウィジェットの制限のない制約が発生するため、問題が発生します。

したがって、この種の問題を回避するために、残りのスペースを識別するFlexibleまたはExpandedの使用が発生します。

あなたの場合、startの値を持つcrossAxisAlignmentをRowウィジェットに渡すことができます。

詳細については、こちらをご覧ください ドキュメント ページ

0
PassionInfinite