Flutter => showDialog / AlertDialog => No MaterialLocalizations found

In Order to Fix the error, You need to Call Your Main class as a home parameter of MaterialAppas Like Below.

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      debugShowCheckedModeBanner: false,
      home: Main(),
    );
  }
}

& update your Build Method in Main Class as:

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Welcome to Flutter'),
      ),
      body: Column(children: <Widget>[
        Center(
          child: Text('Hello World'),
        ),
        RaisedButton(
          onPressed: () {
            print("pushed?");
            _showPushDialog(context);
          },
          child: Text("press me"),
        )
      ]),
    );
  }

Flutter 1.0, Dart 2.x

This solution works on both StatelessWidget widget and StatefulWidget widget.

On the top, in your declaration you can create a static navKey:

class MyApp extends StatefulWidget {
  final String title; // sample var you want to pass to your widget
  static final navKey = new GlobalKey<NavigatorState>();
  const MyApp({Key navKey, this.title}) : super(key: navKey);
  @override
  State<StatefulWidget> createState() => _MyAppState();
}

On the layout part you should use the key:

return MaterialApp(
        navigatorKey:MyApp.navKey,
        title: widget.title,
        ...

So, when you need the current context for your dialog or other widget, in the state part you can do :

@override
  void initState() {
  final context = MyApp.navKey.currentState.overlay.context;
  showMyCustomDialog(context);
  ...
  super.initState();
}

Tags:

Flutter