【问题标题】:Flutter : Crash on using "package:http/http.dart" on iOS simulator?Flutter:在 iOS 模拟器上使用“package:http/http.dart”时崩溃?
【发布时间】:2018-08-30 12:30:39
【问题描述】:

我正在使用带有 Android Studio 的 Flutter beta 0.15v。崩溃仅发生在 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)

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

 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 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'");
    }
  }
}

【问题讨论】:

  • 看起来更像是模拟器问题而不是 http 问题。
  • 我会尝试flutter channel dev flutter doctor。当前的beta 已经有点过时了。
  • 尝试了开发频道,但到目前为止没有任何进展。感谢您的建议。
  • 你能发布你的飞镖代码吗?
  • 更新了api调用代码。做检查

标签: ios ios-simulator flutter


【解决方案1】:

我已尝试此代码,并且在装有 iOS 11.2 的 iPhone X 上运行良好。

_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 一起使用的dart.io 库中,异常出现在第176 行here 中。

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

这是我的颤振版本:

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 并粘贴您的输出。

【讨论】:

  • 我指的是raywenderlich教程,开放API如下:api.github.com/orgs/raywenderlich/members。附言: 相同的 API 在 Android 模拟器上运行没有问题
  • @JIteshSUvarna 我试过我的代码了吗?它给你任何例外吗?再说一遍,你能发布成员类代码吗?
  • 成员类是指json结构。如果是,那么 api.github.com/orgs/raywenderlich/members 正在提供 json。
  • @JIteshSUvarna 不是 json。我的意思是您使用某些工具生成的 dart 代码部分(swagger?当您谈论开放 api 时)。因为也许在那个代码中你有一些在 Android 上运行良好的日志函数,而在 iOS 上尝试在一些没有这种方法的类上调用“stdout”......你是如何生成 dart Member 类代码的?或者我能看到它更好吗?无论如何,我猜如果您在没有成员类的情况下运行代码,您不会收到任何错误,不是吗?
  • 感谢您的解释。检查问题,添加成员数据类。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 2011-12-09
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多