【问题标题】:ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized. E/flutter (21284):在初始化绑定之前访问了 ServicesBinding.defaultBinaryMessenger。 E/颤振(21284):
【发布时间】:2020-04-11 15:10:00
【问题描述】:

如何解决这个问题?我需要检查用户是否登录

[错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常: 在绑定之前访问了 ServicesBinding.defaultBinaryMessenger 被初始化。 E/flutter (21284):如果您正在运行应用程序 并且需要在runApp() 之前访问二进制信使 调用(例如,在插件初始化期间),那么你需要 首先明确调用WidgetsFlutterBinding.ensureInitialized()。 E/flutter (21284):如果你正在运行一个测试,你可以调用 TestWidgetsFlutterBinding.ensureInitialized() 作为第一行 您的测试的 main() 方法来初始化绑定。 E/颤振 (21284): #0 默认二进制信使。 (包:flutter/src/services/binary_messenger.dart:76:7) E/flutter (21284): #1 defaultBinaryMessenger (包:flutter/src/services/binary_messenger.dart:89:4) E/flutter (21284):#2 MethodChannel.binaryMessenger (包:flutter/src/services/platform_channel.dart:140:62) E/flutter (21284):#3 MethodChannel.setMethodCallHandler (包:flutter/src/services/platform_channel.dart:368:5) E/flutter (21284):#4 新的 FirebaseAuth._ (包:firebase_auth/src/firebase_auth.dart:15:13)E/flutter (21284):#5 FirebaseAuth.instance (包:firebase_auth/src/firebase_auth.dart:25:53)E/flutter (21284):#6 FirebaseAuth.instance (包:firebase_auth/src/firebase_auth.dart:25:29)E/flutter (21284): #7 main (package:alqaiser/main.dart:44:36) E/flutter (21284): #8 _runMainZoned.. (dart:ui/hooks.dart:239:25) E/flutter (21284): #9 _rootRun (dart:async/zone.dart:1126:13) E/flutter (21284): #10
_CustomZone.run (dart:async/zone.dart:1023:19) E/flutter (21284): #11 _runZoned (dart:async/zone.dart:1518:10) E/flutter (21284): #12 runZoned ( dart:async/zone.dart:1502:12) E/flutter (21284): #13
_runMainZoned。 (dart:ui/hooks.dart:231:5) E/flutter (21284): #14 _startIsolate。 (dart:isolate-patch/isolate_patch.dart:307:19) E/flutter (21284): #15 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12) E/flutter (21284):

这是我的人功能

void main() async {
  FirebaseAuth auth = FirebaseAuth.instance;
  auth.currentUser().then((u) {
    if (u == null?true:u.phoneNumber==null?true:false) {
      runApp(MaterialApp(

        home: PhoneAuth(),
      ));
    } else {
      runApp(MyApp());
    }
  }).catchError((e) {
    print(e);
    runApp(MyAppT2(e.toString() + ";"));
  });
}

【问题讨论】:

    标签: flutter


    【解决方案1】:

    你可以把WidgetsFlutterBinding.ensureInitialized();放在第一行
    代码sn-p

    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      FirebaseAuth auth = FirebaseAuth.instance;
      auth.currentUser().then((u) {
        if (u == null?true:u.phoneNumber==null?true:false) {
          runApp(MaterialApp(
    
            home: PhoneAuth(),
          ));
        } else {
          runApp(MyApp());
        }
      }).catchError((e) {
        print(e);
        runApp(MyAppT2());
      });
    }
    

    完整的测试代码

    import 'package:flutter/material.dart';
    import 'package:firebase_auth/firebase_auth.dart';
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      FirebaseAuth auth = FirebaseAuth.instance;
      auth.currentUser().then((u) {
        if (u == null?true:u.phoneNumber==null?true:false) {
          runApp(MaterialApp(
    
            home: PhoneAuth(),
          ));
        } else {
          runApp(MyApp());
        }
      }).catchError((e) {
        print(e);
        runApp(MyAppT2());
      });
    }
    
    class PhoneAuth extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Container();
      }
    }
    
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyAppT2 extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      int _counter = 0;
    
      void _incrementCounter() {
        setState(() {
          _counter++;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  'You have pushed the button this many times:',
                ),
                Text(
                  '$_counter',
                  style: Theme.of(context).textTheme.display1,
                ),
              ],
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ),
        );
      }
    }
    

    【讨论】:

    • 现在我无法测试这段代码,但我会在今天晚上测试这段代码,如果正确,我会接受这个答案,
    • 它是否有效或您是否找到任何其他方法来解决此问题?
    【解决方案2】:

    我遇到了同样的问题,我刚刚添加了 WidgetsFlutterBinding.ensureInitialized();在我主要的第一行,问题就消失了。 ensureInitialized 方法,我引用 flutters 文档,

    (https://api.flutter.dev/flutter/widgets/WidgetsFlutterBinding/ensureInitialized.html)

    返回一个 WidgetsBinding 的实例,如有必要,创建并初始化它。如果创建了一个,它将是一个 WidgetsFlutterBinding。如果之前已经初始化过,那么它至少会实现 WidgetsBinding。

    只有在调用runApp之前需要初始化绑定时才需要调用该方法。

    【讨论】:

      猜你喜欢
      • 2020-09-07
      • 2020-11-22
      • 2020-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 2022-06-19
      • 2020-12-29
      • 2021-09-10
      相关资源
      最近更新 更多