Flutter: EasyLoading library No MediaQuery widget found error

前端 未结 1 1162
野的像风
野的像风 2021-01-29 01:33

I use EasyLoading library(https://pub.dev/packages/flutter_easyloading). Everything works fine. But when I double click TextFormField this error occurs. I t

相关标签:
1条回答
  • 2021-01-29 01:57

    You can copy paste run full code below
    From official example https://github.com/huangjianke/flutter_easyloading#how-to-use
    You can put FlutterEasyLoading in builder of MaterialApp
    code snippet

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter EasyLoading',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          builder: (BuildContext context, Widget child) {
            return FlutterEasyLoading(
                child: GestureDetector(
              onTap: () {
                FocusScopeNode currentFocus = FocusScope.of(context);
                if (!currentFocus.hasPrimaryFocus) {
                  currentFocus.unfocus();
                }
              },
              child: child,
            ));
          },
          home: StartPage(),
        );
      }
    }
    

    working demo

    full code

    import 'dart:async';
    
    import 'package:flutter/material.dart';
    import 'package:flutter/cupertino.dart';
    import 'package:flutter_easyloading/flutter_easyloading.dart';
    
    void main() {
      runApp(MyApp());
      configLoading();
    }
    
    void configLoading() {
      EasyLoading.instance
        ..displayDuration = const Duration(milliseconds: 2000)
        ..indicatorType = EasyLoadingIndicatorType.fadingCircle
        ..loadingStyle = EasyLoadingStyle.dark
        ..indicatorSize = 45.0
        ..radius = 10.0
        ..progressColor = Colors.yellow
        ..backgroundColor = Colors.green
        ..indicatorColor = Colors.yellow
        ..textColor = Colors.yellow
        ..maskColor = Colors.blue.withOpacity(0.5)
        ..userInteractions = true;
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter EasyLoading',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          builder: (BuildContext context, Widget child) {
            return FlutterEasyLoading(
                child: GestureDetector(
              onTap: () {
                FocusScopeNode currentFocus = FocusScope.of(context);
                if (!currentFocus.hasPrimaryFocus) {
                  currentFocus.unfocus();
                }
              },
              child: child,
            ));
          },
          home: StartPage(),
        );
      }
    }
    
    class StartPage extends StatefulWidget {
      StartPage({Key key}) : super(key: key);
    
      @override
      _StartPageState createState() => _StartPageState();
    }
    
    class _StartPageState extends State<StartPage> {
      Timer _timer;
      double _progress;
    
      @override
      void initState() {
        super.initState();
    
        /// Schedule a callback for the end of this frame
        WidgetsBinding.instance.addPostFrameCallback((_) {
          EasyLoading.showSuccess('Use in initState!');
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("test"),
          ),
          body: Container(
            width: MediaQuery.of(context).size.width,
            child: SingleChildScrollView(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                mainAxisAlignment: MainAxisAlignment.start,
                children: <Widget>[
                  RaisedButton(
                      onPressed: () {
                        Navigator.pushReplacement(context,
                            MaterialPageRoute(builder: (context) => ExamplePage()));
                      },
                      child: Text("click")),
                  TextField(),
                  Column(
                    children: <Widget>[
                      FlatButton(
                        textColor: Colors.blue,
                        child: Text('dismiss'),
                        onPressed: () {
                          _timer?.cancel();
                          EasyLoading.dismiss();
                        },
                      ),
                      FlatButton(
                        textColor: Colors.blue,
                        child: Text('show'),
                        onPressed: () {
                          _timer?.cancel();
                          EasyLoading.show(status: 'loading...');
                        },
                      ),
                      FlatButton(
                        textColor: Colors.blue,
                        child: Text('showProgress'),
                        onPressed: () {
                          _progress = 0;
                          _timer?.cancel();
                          _timer = Timer.periodic(const Duration(milliseconds: 100),
                              (Timer timer) {
                            EasyLoading.showProgress(_progress,
                                status: '${(_progress * 100).toStringAsFixed(0)}%');
                            _progress += 0.03;
    
                            if (_progress >= 1) {
                              _timer?.cancel();
                              EasyLoading.dismiss();
                            }
                          });
                        },
                      ),
                      FlatButton(
                        textColor: Colors.blue,
                        child: Text('showSuccess'),
                        onPressed: () {
                          _timer?.cancel();
                          EasyLoading.showSuccess('Great Success!');
                        },
                      ),
                      FlatButton(
                        textColor: Colors.blue,
                        child: Text('showError'),
                        onPressed: () {
                          _timer?.cancel();
                          EasyLoading.showError('Failed with Error');
                        },
                      ),
                      FlatButton(
                        textColor: Colors.blue,
                        child: Text('showInfo'),
                        onPressed: () {
                          _timer?.cancel();
                          EasyLoading.showInfo('Useful Information.');
                        },
                      ),
                      FlatButton(
                        textColor: Colors.blue,
                        child: Text('showToast'),
                        onPressed: () {
                          _timer?.cancel();
                          EasyLoading.showToast('Toast');
                        },
                      ),
                    ],
                  ),
                  Padding(
                    padding: EdgeInsets.only(top: 20.0),
                    child: Column(
                      children: <Widget>[
                        Text('Style'),
                        Padding(
                          padding: EdgeInsets.only(top: 10.0),
                          child: CupertinoSegmentedControl<EasyLoadingStyle>(
                            selectedColor: Colors.blue,
                            children: {
                              EasyLoadingStyle.dark: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("dark"),
                              ),
                              EasyLoadingStyle.light: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("light"),
                              ),
                              EasyLoadingStyle.custom: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("custom"),
                              ),
                            },
                            onValueChanged: (value) {
                              EasyLoading.instance.loadingStyle = value;
                            },
                          ),
                        ),
                      ],
                    ),
                  ),
                  Padding(
                    padding: EdgeInsets.only(top: 20.0),
                    child: Column(
                      children: <Widget>[
                        Text('MaskType'),
                        Padding(
                          padding: EdgeInsets.only(top: 10.0),
                          child: CupertinoSegmentedControl<EasyLoadingMaskType>(
                            selectedColor: Colors.blue,
                            children: {
                              EasyLoadingMaskType.none: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("none"),
                              ),
                              EasyLoadingMaskType.clear: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("clear"),
                              ),
                              EasyLoadingMaskType.black: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("black"),
                              ),
                              EasyLoadingMaskType.custom: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("custom"),
                              ),
                            },
                            onValueChanged: (value) {
                              EasyLoading.instance.maskType = value;
                            },
                          ),
                        ),
                      ],
                    ),
                  ),
                  Padding(
                    padding: EdgeInsets.only(top: 20.0),
                    child: Column(
                      children: <Widget>[
                        Text('IndicatorType(total: 23)'),
                        Padding(
                          padding: EdgeInsets.only(top: 10.0),
                          child:
                              CupertinoSegmentedControl<EasyLoadingIndicatorType>(
                            selectedColor: Colors.blue,
                            children: {
                              EasyLoadingIndicatorType.circle: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("circle"),
                              ),
                              EasyLoadingIndicatorType.wave: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("wave"),
                              ),
                              EasyLoadingIndicatorType.ring: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("ring"),
                              ),
                              EasyLoadingIndicatorType.pulse: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("pulse"),
                              ),
                              EasyLoadingIndicatorType.cubeGrid: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("cubeGrid"),
                              ),
                              EasyLoadingIndicatorType.threeBounce: Padding(
                                padding: EdgeInsets.all(5.0),
                                child: Text("threeBounce"),
                              ),
                            },
                            onValueChanged: (value) {
                              EasyLoading.instance.indicatorType = value;
                            },
                          ),
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }
    
    class ExamplePage extends StatefulWidget {
      @override
      _ExamplePageState createState() => _ExamplePageState();
    }
    
    class _ExamplePageState extends State<ExamplePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text("example"),
            ),
            body: Container(
              child: Text("example page"),
            ));
      }
    }
    
    0 讨论(0)
提交回复
热议问题