Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No MaterialLocalizations found - MyApp widgets require MaterialLocalizations to be provided by a Localizations widget ancestor

I was just trying to create an app with button which shows an alert message when the button is pressed.

But it gives me this error(Mentioned below).

I wrote this code by taking reference of this video.

I am running the application on a live android phone using adb connect

Please help..!

Code

import 'package:flutter/material.dart';  void main(){   runApp(MyApp()); }  class MyApp extends StatelessWidget{   @override   Widget build(BuildContext context) {     return MaterialApp(       title: "Test",       home: Scaffold(         appBar: AppBar(title: Text("Test")),         body: Container(           child: Center(             child: RaisedButton(               color: Colors.redAccent,               textColor: Colors.white,               onPressed: (){testAlert(context);},               child: Text("PressMe"),             ),           ),         ),       ),     );   }   void testAlert(BuildContext context){     var alert = AlertDialog(       title: Text("Test"),       content: Text("Done..!"),     );      showDialog(         context: context,         builder: (BuildContext context){           return alert;         }     );   } } 

This is the code that i wrote. I also tried inserting the contents of testAlert() function directly into onPressed but doesn't work.

Error

Performing hot reload... Syncing files to device ZUK Z2131... Reloaded 0 of 419 libraries in 1,929ms. I/flutter (18652): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════ I/flutter (18652): The following assertion was thrown while handling a gesture: I/flutter (18652): No MaterialLocalizations found. I/flutter (18652): MyApp widgets require MaterialLocalizations to be provided by a Localizations widget ancestor. I/flutter (18652): Localizations are used to generate many different messages, labels,and abbreviations which are used I/flutter (18652): by the material library.  I/flutter (18652): To introduce a MaterialLocalizations, either use a  MaterialApp at the root of your application to I/flutter (18652): include them automatically, or add a Localization widget with a MaterialLocalizations delegate. I/flutter (18652): The specific widget that could not find a MaterialLocalizations ancestor was: I/flutter (18652):   MyApp I/flutter (18652): The ancestors of this widget were: I/flutter (18652):   [root] I/flutter (18652):  I/flutter (18652): When the exception was thrown, this was the stack: I/flutter (18652): #0      debugCheckHasMaterialLocalizations.<anonymous closure> (package:flutter/src/material/debug.dart:124:7) I/flutter (18652): #1      debugCheckHasMaterialLocalizations (package:flutter/src/material/debug.dart:127:4) I/flutter (18652): #2      showDialog (package:flutter/src/material/dialog.dart:635:10) I/flutter (18652): #3      MyApp.testAlert (package:flutter_app/main.dart:33:5) I/flutter (18652): #4      MyApp.build.<anonymous closure> (package:flutter_app/main.dart:19:29) I/flutter (18652): #5      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14) I/flutter (18652): #6      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30) I/flutter (18652): #7      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24) I/flutter (18652): #8      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9) I/flutter (18652): #9      TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7) I/flutter (18652): #10     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9) I/flutter (18652): #11     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12) I/flutter (18652): #12     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11) I/flutter (18652): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19) I/flutter (18652): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22) I/flutter (18652): #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7) I/flutter (18652): #16     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7) I/flutter (18652): #17     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7) I/flutter (18652): #18     _invoke1 (dart:ui/hooks.dart:168:13) I/flutter (18652): #19     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5) I/flutter (18652):  I/flutter (18652): Handler: onTap I/flutter (18652): Recognizer: I/flutter (18652):   TapGestureRecognizer#d5d82(debugOwner: GestureDetector, state: possible, won arena, finalPosition: I/flutter (18652):   Offset(220.2, 406.1), sent tap down) I/flutter (18652): ════════════════════════════════════════════════════════════════════════════════════════════════════ W/ActivityThread(18652): handleWindowVisibility: no activity for token android.os.BinderProxy@59b4e8d I/ViewRootImpl(18652): CPU Rendering VSync enable = true 
like image 960
rohan parab Avatar asked May 23 '19 12:05

rohan parab


1 Answers

This is because the context you are passing into the showDialog method is a context that doesn't yet have a MaterialLocalizations widget in the widget tree, the MaterialLocalizations widget gets added implicitly by the MaterialApp widget.

To fix it, try the following:

import 'package:flutter/material.dart';  void main() {   runApp(MyApp()); }  class MyApp extends StatelessWidget {   @override   Widget build(BuildContext context) {     return MaterialApp(       title: "Test",       home: TestPage(),     );   } }  class TestPage extends StatelessWidget {   @override   Widget build(BuildContext context) {     return Scaffold(       appBar: AppBar(title: Text("Test")),       body: Container(         child: Center(           child: RaisedButton(             color: Colors.redAccent,             textColor: Colors.white,             onPressed: () {               testAlert(context);             },             child: Text("PressMe"),           ),         ),       ),     );   }    void testAlert(BuildContext context) {     var alert = AlertDialog(       title: Text("Test"),       content: Text("Done..!"),     );      showDialog(         context: context,         builder: (BuildContext context) {           return alert;         });   } } 
like image 140
Jordan Davies Avatar answered Sep 21 '22 17:09

Jordan Davies