void main()=>之间的差异runApp(MaterialApp(home:MyApp()));和void main()=> runApp(MyApp());

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

这是我替换时Flutter中凸起按钮的代码

void main()=> runApp(MaterialApp(home:MyApp()));

with

void main()=> runApp(MyApp());

引发错误

为我提供解决方案……它与flutter和flutter插件的版本是否有联系?

谁能在这两行之间提供区别?

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(home:MyApp()));


class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Center(
          child: RaisedButton(
            child: Text("Hello"),
            onPressed: (){
              print("Hello world");
            },
          )
      ),
    );
  }
}

错误:

Performing hot restart...
Syncing files to device SM G965F...
Restarted application in 1,759ms.
I/flutter (22269): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (22269): The following assertion was thrown building InkWell(gestures: [tap], clipped to BoxShape.rectangle,
I/flutter (22269): dirty, state: _InkResponseState<InkResponse>#db17e):
I/flutter (22269): No Directionality widget found.
I/flutter (22269): InkWell widgets require a Directionality widget ancestor.
I/flutter (22269): The specific widget that could not find a Directionality ancestor was:
I/flutter (22269):   InkWell
I/flutter (22269): The ownership chain for the affected widget is: "InkWell ← DefaultTextStyle ←
I/flutter (22269):   AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#cee82 ink renderer] ←
I/flutter (22269):   NotificationListener<LayoutChangedNotification> ← CustomPaint ← _ShapeBorderPaint ← PhysicalShape
I/flutter (22269):   ← _MaterialInterior ← Material ← ⋯"
I/flutter (22269): Typically, the Directionality widget is introduced by the MaterialApp or WidgetsApp widget at the
I/flutter (22269): top of your application widget tree. It determines the ambient reading direction and is used, for
I/flutter (22269): example, to determine how to lay out text, how to interpret "start" and "end" values, and to resolve
I/flutter (22269): EdgeInsetsDirectional, AlignmentDirectional, and other *Directional objects.
I/flutter (22269): 
I/flutter (22269): The relevant error-causing widget was:
I/flutter (22269):   RaisedButton file:///F:/Flutter_Projects/flutter_test_app/lib/main.dart:16:18
I/flutter (22269): 
I/flutter (22269): When the exception was thrown, this was the stack:
I/flutter (22269): #0      debugCheckHasDirectionality.<anonymous closure> (package:flutter/src/widgets/debug.dart:247:7)
I/flutter (22269): #1      debugCheckHasDirectionality (package:flutter/src/widgets/debug.dart:263:4)
I/flutter (22269): #2      InkResponse.debugCheckContext (package:flutter/src/material/ink_well.dart:521:12)
I/flutter (22269): #3      _InkResponseState.build (package:flutter/src/material/ink_well.dart:843:19)
I/flutter (22269): #4      StatefulElement.build (package:flutter/src/widgets/framework.dart:4619:28)
I/flutter (22269): #5      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4502:15)
I/flutter (22269): #6      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:11)
I/flutter (22269): #7      Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
I/flutter (22269): #8      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4481:5)
I/flutter (22269): #9      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4666:11)
I/flutter (22269): #10     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
I/flutter (22269): ...     Normal element mounting (92 frames)
I/flutter (22269): #102    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
I/flutter (22269): #103    Element.updateChild (package:flutter/src/widgets/framework.dart:3214:18)
I/flutter (22269): #104    RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1148:16)
I/flutter (22269): #105    RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1119:5)
I/flutter (22269): #106    RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1061:17)
I/flutter (22269): #107    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2607:19)
I/flutter (22269): #108    RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1060:13)
I/flutter (22269): #109    WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:941:7)
I/flutter (22269): #110    WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:922:7)
I/flutter (22269): (elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
I/flutter (22269): 
I/flutter (22269): ════════════════════════════════════════════════════════════════════════════════════════════════════
android flutter button dart material
2个回答
1
投票

MaterialApp建立在WidgetApp的基础上。这些类用于提供一些基本的Flutter Widget作为导航处理(仅作为示例)。

错误说:

I/flutter (22269): No Directionality widget found.

RaisedButton小部件中使用的InkWell需要它,这是WidgetApp提供的小部件之一。这就是为什么如果不将应用程序包装在其中的话,很多事情将无法正常工作的原因。

您可以找到有关WidgetApp here的更多信息>

MaterialApp用于提供材料设计外观。


0
投票

由于SDK的某些限制,您无法将StatefulWidget传递给runApp(),因此最好的方法是提供StatelessWidget,然后在其中传递StatefulWidget

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