Flutter Dart Completer.complete()结果永远无法解析

Flutter Dart Completer.complete()结果永远无法解析,flutter,dart,Flutter,Dart,我有一个函数,它返回的未来取决于要解析的回调结果: Future connectSocket(String email, String password, {Function onConnectCallback}) async { var completer = new Completer(); print("Connecting..."); var query = getQueryString(email, password); socketIO = aw

我有一个函数,它返回的未来取决于要解析的回调结果:

   Future connectSocket(String email, String password, {Function onConnectCallback}) async {
    var completer = new Completer();
    print("Connecting...");
    var query = getQueryString(email, password);
    socketIO = await SocketIOManager().createInstance(SocketOptions(localDomainWindows, query: query));

    socketIO.on("loginError", (data) {
      print("Login err");
      _connected = false;
      connectedCallback();
      completer.complete(false);
    });

    socketIO.onConnect((data) {
      print("***CONNECTED***");
      _connected = true;
      completer.complete(true);
      connectedCallback();
    });
    socketIO.connect();
    return completer.future;
  }
我可以看到,
***已连接***
打印到控制台,我的套接字服务器确认连接,但函数
等待
-如果解决方案从未恢复,它只是挂起

    socketConnection.connectSocket(_email, _password)
    .then((success) {
     print("SUCCESS") // never gets printed
}

对此唯一可能的解释是,回调中的某些代码阻止了您的程序继续运行,因为
Completer.complete
应始终使
未来的
完成。
但是,如果它被阻止,事件循环将永远无法调用您的代码


由于
bool
赋值永远不应该被阻塞(
\u connected=true;
),函数中唯一可以停止程序的部分是
connectedCallack()。如果您删除或修复它,您应该会看到将来的完成。

您能在print语句之后调用
completer.complete
吗?@creativecreatormormaybeno我没有将complete()调用移到print语句之前,它就起作用了。。。抓住我了。如果你想把它放在一个答案中,我会把它标记为接受,因为它是
connectedCallback()调用以某种方式阻止它。它在另一个组件中调用
setState()
,我猜它搞乱了什么