原有项目中如果直接运行 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

    1. import 'dart:html';
    2. void runPlatformInit(){
    3. }

    2、创建 mian_mobile.dart

    1. import 'dart:io';
    2. void runPlatformInit(){
    3. }

    3、main.dart 文件 加入

    1. import 'main_web.dart' if (dart.library.io) "main_io.dart"; //dart.library.io
    2. void main() {
    3. runPlatformInit();
    4. runApp(MyApp());
    5. }