androidflutterdart

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


This is my Code For a Raised Button in Flutter if i replace

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

with

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

It throws an Error

Provide me a solution for this...... Does it have any connection with the versions of flutter and flutter plugins ?

and Can anyone Provide a difference between these two lines ?

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");
            },
          )
      ),
    );
  }
}

Error:

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): ════════════════════════════════════════════════════════════════════════════════════════════════════

Solution

  • MaterialApp is built upon WidgetApp. Those classes are used to provide some fondamentals Flutter Widget as Navigation handling (just to make an example).

    The error said:

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

    InkWell that is used in RaisedButton widget need it and this is one of the widget offered from WidgetApp. This is why lot of things will not work if you don't wrap your application inside it.

    You could find more information about WidgetApp here

    MaterialApp is used to provide a material design look and feel.