在查看Dio源码时,根据跳转指引进入源码发现是一个抽象类,没有实现具体业务需求,十分不解
abstract class Dio {
factory Dio([BaseOptions? options]) => createDio(options);
/// Default Request config. More see [BaseOptions] .
late BaseOptions options;
......
}
点击createDio跳转到entry_stub.dart源码,发现非常简洁,没有实现具体逻辑
import '../dio.dart';
Dio createDio([BaseOptions? options]) => throw UnsupportedError('');
最终在细看dio.dart 源码发现依赖import其中的“奥妙”
import 'entry_stub.dart'
if (dart.library.html) 'entry/dio_for_browser.dart'
if (dart.library.io) 'entry/dio_for_native.dart';
我们可以看到这里使用到了条件导入,在编译时根据不同平台导入不同的依赖替换默认依赖。
在使用Flutter开发应用时,往往对于不同平台需要import不同包,在编译时由于平台限制导致编译不通过,针对该问题,我们可以根据不同平台导入对于平台依赖即可
举例说明
import 'platform.dart' if (dart.library.html) 'web.dart';
语法说明:
imoprt "默认依赖文件" if (条件)“满足条件时,使用该依赖替换默认依赖文件”
Dio 库里面也是有该方案进行平台兼容,可以看到 if 可以添加多次,这样的操作可以满足我们兼容不同平台的需求,希望本文章对你有所帮组。
|