Flutter 跨平台条件import不同包

在查看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 可以添加多次,这样的操作可以满足我们兼容不同平台的需求,希望本文章对你有所帮组。

你可能感兴趣的:(flutter)