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 对应项正在正确执行。我希望在以后的更新中解决这个烦人的问题。
我正在使用 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 对应项正在正确执行。我希望在以后的更新中解决这个烦人的问题。