原有项目中如果直接运行 flutter run -d chrome,会发现控制器中 import 报错,原因是 dart: io 库不支持 web。io 库是 Flutter 中非常常用的库,主要是平台相关的一些 api,改造的第二步我们就需要屏蔽 dart:io 的引入。
Flutter For Web 最终运行的是在浏览器中的 js 代码,Flutter For Phone 使用,Platform 引擎与 Native 通信。js 在平台上是通过其他的系统支持(iOS 中的 JavaScriptCore) 与 Native 通信,二者是完全不同的方式,所以 dart: io 无法继续支持。
既然 dart: io 不支持 web,那我们仍然想使用原先的 Flutter 业务 UI 代码,该 如何实现(上文我们说过,我们想使用同一套代码、同一套资源整合大前端)?我们使用不同平台下支持的能力库区分。
1、创建 main_web.dart
import 'dart:html';
void runPlatformInit(){
}
2、创建 mian_mobile.dart
import 'dart:io';
void runPlatformInit(){
}
3、main.dart 文件 加入
import 'main_web.dart' if (dart.library.io) "main_io.dart"; //dart.library.io
void main() {
runPlatformInit();
runApp(MyApp());
}