Flutter:在 iOS 模拟器上使用 "package:http/http.dart" 时崩溃?

Flutter : Crash on using "package:http/http.dart" on iOS simulator?

我正在使用 Flutter beta 0.15v Android Studio.The 崩溃只发生在 iOS 模拟器 - IphoneX 11.2。

Unhandled exception:
NoSuchMethodError: The getter 'stdout' was called on null.
Receiver: null
Tried calling: stdout
#0      Object.noSuchMethod (dart:core-patch/dart:core/object_patch.dart:46)
#1      stdout (package:flutter_tools/src/base/io.dart:176)
#2      StdoutLogger.writeToStdOut (package:flutter_tools/src/base/logger.dart:100)
#3      StdoutLogger.printStatus (package:flutter_tools/src/base/logger.dart:95)
#4      _AppRunLogger.printStatus (package:flutter_tools/src/commands/daemon.dart:849)
#5      printStatus (package:flutter_tools/src/globals.dart:39)
#6      ResidentRunner._serviceDisconnected (package:flutter_tools/src/resident_runner.dart:756)
#7      _rootRun (dart:async/zone.dart:1122)
#8      _CustomZone.run (dart:async/zone.dart:1023)
#9      _FutureListener.handleWhenComplete (dart:async/future_impl.dart:151)
#10     _Future._propagateToListeners.handleWhenCompleteCallback (dart:async/future_impl.dart:603)
#11     _Future._propagateToListeners (dart:async/future_impl.dart:659)
#12     _Future._completeWithValue (dart:async/future_impl.dart:477)
#13     _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:507)
#14     _rootRun (dart:async/zone.dart:1126)
#15     _CustomZone.run (dart:async/zone.dart:1023)
#16     _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:949)
#17     _microtaskLoop (dart:async/schedule_microtask.dart:41)
#18     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50)
#19     _runPendingImmediateCallback (dart:isolate-patch/dart:isolate/isolate_patch.dart:113)
#20     _RawReceivePortImpl._handleMessage (dart:isolate-patch/dart:isolate/isolate_patch.dart:166)

API调用代码如下,使用http.dart

 import 'package:http/http.dart' as http;

              _loadData() async {
            String dataURL = "https://api.github.com/orgs/abc/members";
            http.Response response = await http.get(dataURL);
            setState(() {
              final membersJSON = JSON.decode(response.body);

              for (var memberJSON in membersJSON) {
                final member = new Member(
                    memberJSON["login"], memberJSON["avatar_url"]);
                _members.add(member);
              }
            });
          }

当你在ios模拟器上运行时,每次都会抛出上述异常。

会员资料class

class Member {
  final String login;
  final String avatarUrl;

  Member(this.login, this.avatarUrl) {
    if (login == null) {
      throw new ArgumentError("login of Member cannot be null. "
          "Received: '$login'");
    }
    if (avatarUrl == null) {
      throw new ArgumentError("avatarUrl of Member cannot be null. "
          "Received: '$avatarUrl'");
    }
  }
}

我试过这段代码,在我的 iPhone X 和 iOS 11.2.

上运行良好
_loadData() async {
String dataURL = "https://api.github.com/orgs/raywenderlich/members";
http.Response response = await http.get(dataURL);
setState(() {
  final membersJSON = JSON.decode(response.body);

  for (var memberJSON in membersJSON) {
    final member = new Member(
        memberJSON["login"], memberJSON["avatar_url"]);
   //_members.add(member);
    debugPrint("${member.login}");
  }
});

}

错误出在与 HTTPClientRequest and the exception is in the line 176 here 一起使用的 dart.io 库中。

我在 iOS emulator 上使用 http 没有错误。所以我猜问题出在您的SDK版本或您正在解析的数据中。或者你的模拟器有问题...你在真实设备上试过吗?

这是我的 flutter 版本:

Flutter 0.1.5 • channel beta • https://github.com/flutter/flutter.git
Framework • revision 3ea4d06340 (5 weeks ago) • 2018-02-22 11:12:39 -0800
Engine • revision ead227f118
Tools • Dart 2.0.0-dev.28.0.flutter-0b4f01f759

你可以尝试我的示例项目here

请试一试,如果有效或出现同样的错误,请告诉我。

此外键入 flutter --version 并粘贴您的输出。

在新项目中重新创建整个演示后问题得到解决。问题可能仅出在 ios 的构建过程中,因为旧项目的 android 对应项正在正确执行。我希望在以后的更新中解决这个烦人的问题。