flutter_web 初体验

Google I/O 大会宣布了 flutter 支持 web 开发,其设计目的是为了构建 高度互动,富含图形的网页

Flutter 目前的目的就是全平台开发。目前已经支持了 Android, iOS, Windows, macOS, Linux 以及 Web。

安装 webdev 工具

需要官方提供的 webdev 工具来为我们编译。打开 flutter_webGetting Started 中找到 Install the flutter_web build tools,详细说明了如何安装 webdev 工具。

配置 webdev

flutter packages pub global activate webdev
复制代码

建议:配置 dartpub~/.pub-cache/bin 到环境变量

VSCode 创建 Flutter Web 项目

Dart 官方文档 & Flutter Web 项目创建教程

在 VSCode 打开命令面板,输入命令:

>Flutter:New Web Project
复制代码

然后稍等就可以看到下面的界面:

输入项目名后就可以看到 VSCode 出现一个窗口让你选择项目保存在哪个目录下面。 选择完目录后,VSCode 会新建一个窗口来运行你的项目。

然后直接运行,VSCode 只需要按 F5 快捷键就行了。

选 “ Dart & Flutter ”

最后,默认的浏览器会弹出一个新的窗口来运行这个项目。

  • lib 是我们主要要写的项目代码和原有的 Flutter 基本一致
  • web 包含一个 html 文件和一个 main.dart
  • .dart_tool 是项目打包运行编译生成的文件

index.html 引用了 web/main.dart 编译生成的 js 文件

<head>
  <meta charset="UTF-8">
  <title>hello flutter</title>
  <script defer src="main.dart.js" type="application/javascript"></script>
</head>
复制代码

web/main.dart 调用了 lib/main.dart,写代码基本修改 lib 目录下的代码就好了。

main() async {
  await ui.webOnlyInitializePlatform();
  app.main();
}
复制代码

添加图片

与 flutter 项目有点区别,添加的图片只能是放在 web/assets/ 下。

.
├──pubspec.lock
├── pubspec.yaml
└── web
    ├── assets
    │   ├── FontManifest.json
    │   └── images
    │       └── swift_logo.png
    ├── index.html
    └── main.dart
复制代码

把 swift_logo.png 放在了 images 目录下。

使用的代码:

Image.assets('images/swift_logo.png')
复制代码

Flutter web 相关比较完整项目

相关问题的解决方案

  • 本地环境下 Image.assets('images/xxx.png') 可以展示,但是部署到服务器上后,加载不出来。

    有两个解决方案

    • 方案一

      wen/main.dart 中修改成如下:

      /// ....
      import 'package:flutter_web_ui/src/engine.dart' as engine;
      
      main() async {
        await ui.webOnlyInitializePlatform(
            assetManager: engine.AssetManager(assetsDir: "assets"));
        app.main();
      }
      复制代码
    • 方案二:

      web/assets/ 下添加 AssetManifest.json

      {
          "assets": [
              "images/swift_logo.png"
          ]
      }
      复制代码
  • 图标不能展示

    web/assets/ 下添加 FontManifest.json

    [{
        "family": "MaterialIcons",
        "fonts": [{
          "asset": "https://fonts.gstatic.com/s/materialicons/v42/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2"
        }]
      }
    ]
    复制代码

Flutter_web 现在的一些限制

  • 出于性能以及可移植性考虑,Flutter Web 应用目前不支持直接使用 CSS,即跟原生 Flutter 一样,全部使用组件代码来实现样式;
  • 并非所有Flutter API都在Flutter for web上实现;
  • 目前只支持 Chrome 浏览器上调试页面,其他浏览器调试可能会有问题;
  • Flutter_web 的插件还不完善,暂时只提供了最基础的 dart:html、dart:js、dart:svg、dart:indexed_db,可以通过他们访问绝大多数浏览器的 API;
  • Flutter_web 编译还很慢, 然后编译出来的包比较大;
  • 在桌面浏览器上运行,还有一些不足,大部分是基于移动应用的操作特性,而没有对桌面系统的操作习惯进行特殊的优化。

现有成果预览

站点: swiftclub 代码:swiftclub/site

了解更多详情请关注 SwiftOldBird 官方微信公众号:

原文链接:swiftoldbird.loveli.site/2019/08/17/…

转载于:https://juejin.im/post/5d5a9cd3518825237b5bee21

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值