Flutter web - 调用 http.get 抛出异常
Posted
技术标签:
【中文标题】Flutter web - 调用 http.get 抛出异常【英文标题】:Flutter web - call http.get throws exception 【发布时间】:2020-03-10 04:06:28 【问题描述】:这在 android/桌面上运行良好:
Future<List<City>> fetchCities() async
final response =
await http.get(globals.url + '/city',
headers: HttpHeaders.acceptHeader: globals.apiVersion);
if (response.statusCode == 200)
// If the call to the server was successful, parse the JSON
return compute(parseCities, response.body);
else
// If that call was not successful, throw an error.
print('Failed to load cities');
throw TextException(Strings.msg_session_expired);
但是当作为 Web 应用程序启动时,我遇到了一个异常:
errors.dart:145 Uncaught (in promise) Error: Unsupported operation: Platform._version
at Object.throw_ [as throw] (errors.dart:194)
at Function._version (io_patch.dart:284)
at Function.get version [as version] (platform_impl.dart:121)
at get _version (platform.dart:74)
at Function.desc.get [as _version] (utils.dart:75)
at Function.get version [as version] (platform.dart:231)
at Object._getHttpVersion (http_impl.dart:3234)
at new _http._HttpClient.new (http_impl.dart:2071)
at Function.new (http.dart:1473)
at new io_client.IOClient.new (io_client.dart:23)
at Function.new (client.dart:30)
at _withClient (http.dart:165)
at _withClient.next (<anonymous>)
at runBody (async_patch.dart:84)
at Object._async [as async] (async_patch.dart:123)
at Object._withClient (http.dart:164)
at Object.get (http.dart:47)
at fetchCities (mcity.dart:113)
at fetchCities.next (<anonymous>)
at runBody (async_patch.dart:84)
at Object._async [as async] (async_patch.dart:123)
是否有任何方法可以使 http.get 请求在 flutter_web 上运行?
【问题讨论】:
【参考方案1】:HttpHeaders.acceptHeader
的使用可能是问题所在。它是 dart:io
库的一部分,未为 Flutter Web 启用。您应该尝试以不同的方式设置标题。例如基于这个常数值here,下面的东西应该可以工作。
final response =
await http.get(globals.url + '/city',
headers: "accept": globals.apiVersion);
在另一个post我使用了http包,表明这个包可以用于flutter web。
【讨论】:
这没有帮助。正如我所看到的,http 在内部使用 dart.io,它仍然会引发错误。看来,我不能使用任何自定义标头,否则会抛出错误。 我从我的通话中删除了所有标题,但我仍然收到同样的错误。我不明白你是怎么让它工作的。 您能否包含您的导入语句。你是对的http
包使用 dart:io
但它是通过有条件地导入它们来实现的。这意味着它将在 dart:html
和 dart:io` 之间交替,这取决于它运行的上下文。在您的异常快照中,我看到 at new io_client.IOClient.new (io_client.dart:23)
来自 http
包。它以某种方式选择io_client
而不是browser_client
。你能简单地写下你如何部署或运行你的代码吗..
我什至从导入中删除了 dart.io。我仍然遇到错误。来自主频道的颤振版本。你测试过哪个版本?
我想这是最新的,因为我刚升级到白天。 :) Doctor 摘要(要查看所有详细信息,请运行 flutter doctor -v):[√] Flutter(Channel master,v1.12.3-pre.49,在 Microsoft Windows [版本 10.0.17134.1069],语言环境 de-DE)[√ ] Android 工具链 - 为 Android 设备开发(Android SDK 版本 28.0.3) [√] Chrome - 为网络开发 [√] Android Studio(版本 3.5) [√] VS Code(版本 1.40.1) [√] 已连接设备(2 个可用) • 未发现问题!以上是关于Flutter web - 调用 http.get 抛出异常的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - http.get 在 macos 构建目标上失败:连接失败
在 Flutter 中每 1 分钟发出一次定时 http.get 请求的最简单方法是啥?
如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)