场景:同一个项目,打包成 Flutter web 和 Flutter App。 问题:Error: Not found: ‘dart:html’。
产生上面问题的原因其实就是Flutter web使用了dart:html包的类,而Flutter App没有dart:html相关类。相应的 dart.io 这个包,在 web 中也是不存在。像类似的情况有很多。
要解决上面的问题也很简单。写一个类似 MVC 的调用文件就可以了。Flutter 开发中网络请求使用最多的应该就是 dio 了。我们就以 dio 为例子,写一个调用的实例:
dio 初始化的时候需要指定HttpClientAdapter
。在app 上为 DefaultHttpClientAdapter
web 上为 BrowserHttpClientAdapter
,如果全部用DefaultHttpClientAdapter
web
端会提示不支持。如果这么写:
idWeb? BrowserHttpClientAdapter() else DefaultHttpClientAdapter
就会出现跟上面一样的。 提示 package:dio/adapter_browser.dart not found。
解决:
- http_client_adapter:用于中间承接转化工具。
- http_client_adapter_io.dart:如果是Flutter App就引入这个包
- http_client_adapter_web.dart:如果是Flutter web就引入这个包
http_client_adapter:
export './http_client_adapter_web.dart' if (dart.library.io) './http_client_adapter_io.dart';
http_client_adapter_io:
import 'package:dio/adapter.dart';
import 'package:dio/dio.dart';
HttpClientAdapter getHttpClientAdapter() {
return DefaultHttpClientAdapter();
}
http_client_adapter_web
import 'package:dio/adapter_browser.dart';
import 'package:dio/dio.dart';
HttpClientAdapter getHttpClientAdapter() {
return BrowserHttpClientAdapter();
}
调用:
import 'http_client_adapter.dart' as adapter;
httpClientAdapter = adapter.getHttpClientAdapter();