- 第一:亲历
Flutter for Web
到底如何; - 第二:为需要从
Flutter native
到Flutter-web
的开发者,摸石头趟条路,毕竟从native
到web
,并不是一键生成的,还有许多坑要填。
Flutter-Go-Web
支持尚不稳定。我们将此版本指定为技术预览版; 对Flutter Go native
版本移植还原度大概在 80%左右。旨在帮助Flutter
开发人员,快速熟悉Flutter-web
官方的实践。
在
Flutter
官方宣布Flutter暂时不会开发热更新(Code push) 之后,Flutter-web
无疑是的动态更新代码最快捷的方式,虽然不是最佳方案,但是是最易用降级方案。
通过
Flutter-go-web
版本的学习,可以快速,有效还原Flutter-go
native 版本。帮助开发者,对快速版本H5化,做一个样例展示,提供Flutter-web
的能力演示。
准备
言归正传,开发前还是建议大家对 Flutter-web
有一个基本的了解。如果熟悉请忽略。
构建环境
1. 安装 flutter_web 构建工具
输入命令从 pub.dev 的镜像拉取 webdev程序,webdev 类似于前端的构建工具
$ flutter pub global activate webdev
确保 $HOME/.pub-cache/bin 这个环境变量存在,环境变量在 vim ~/.bash_profile 里修改
// ~/.bash_profile 加上这句
$ export PATH=“
P
A
T
H
"
:
"
PATH":"
PATH":"HOME/.pub-cache/bin”
2. 拉取 flutter_web
示例
Flutter-web
版本都是基于,web版本的packages
包,所以要另起一个新的工程。 为了避免创建的不一致性,基于官方的 flutter_web 示例做更改
$ git clone https://github.com/flutter/flutter_web.git flutter_go_web
3. 创建 flutter_go_web
项目
由于我们只有一个目标项目,所以可以删除 examples 目录,替换成
Flutter Go
项目开发。
$ cd flutter_go_web
$ rm -rf examples
4. 手动创建 yaml
文件
在项目根目录,需要创建两个关键的
.yaml
文件 build.yaml 是发布版本的必要的配置 pubspec.yaml 是所有依赖配置,类似于 webpack 里的 package.json 这两个配置内容分别如下:
build.yaml
targets:
$default:
builders:
build_web_compilers|entrypoint:
Avoid building the test directory.
generate_for: [‘web/**.dart’]
options:
dart2js_args:
- –no-source-maps
- -O4
- –fast-startup
- –minify
- –trust-primitives
- –trust-type-annotations
pubspec.yaml
name: flutter_go
description: flutter_go
environment:
You must be using Flutter >=1.5.0 or Dart >=2.3.0
sdk: ‘>=2.3.0-dev.0.1 ❤️.0.0’
dependencies:
flutter_web: any
flutter_web_ui: any
dev_dependencies:
build_runner: any
build_web_compilers: any
build_daemon: any
dependency_overrides 优先直接引用github上的packages
dependency_overrides:
flutter_web:
git:
url: https://github.com/flutter/flutter_web
path: packages/flutter_web
flutter_web_test:
git:
url: https://github.com/flutter/flutter_web
path: packages/flutter_web_test
flutter_web_ui:
git:
url: https://github.com/flutter/flutter_web
path: packages/flutter_web_ui
当然
dependency_overrides
你也可以配置成本地路径,但是为了保证依赖库的最新,还是用git上的比较好, 下面是本地路径的配置。
dependency_overrides:
flutter_web:
path: ./packages/flutter_web
flutter_web_test:
path: ./packages/flutter_web_test
flutter_web_ui:
path: ./packages/flutter_web_ui
5. 更新 packages
包
$ flutter pub upgrade
! flutter_web 0.0.0 from path packages/flutter_web
! flutter_web_ui 0.0.0 from path packages/flutter_web_ui
Running “flutter pub upgrade” in hello_world… 5.0s
6. 拷贝 Flutter-go
项目下的 libs 到Flutter_go_web
目录下
7. 现在就可以使用 webdev
构建并启动开发服务器
$ webdev serve
或者 webdev 与热重载一起使用
$ webdev serve --auto restart
[INFO] Reading cached asset graph completed, took 598ms
[INFO] Checking for updates since last build completed, took 2.1s
[INFO] Starting resource servers…
之后提示一直在连接中, 说明 缺少
resource
资源文件,继续下面操作
8. 创建 web
入口
手动创建
web
文件夹,里面创建两个文件:index.html
为入口html
页面main.dart
为html
引用文件
/// main.dart
import ‘package:flutter_web_ui/ui.dart’ as ui;
/// flutter_go 是项目名称,在pubspec.yaml 里已经设置
import ‘package:flutter_go/main.dart’ as app;
main() async {
await ui.webOnlyInitializePlatform();
app.main();
}
文件目录结构基本已经成型,如下:
9. 再次运行 webdev
编译并启动开发服务器
$ webdev serve --auto restart
本地服务器这样就能跑起来了!?先别忙,接下来报了如下一堆错误 …
package:flutter/material.dart -> package:flutter_web/material.dart
package:flutter/widgets.dart -> package:flutter_web/widgets.dart
package:flutter/cupertino.dart -> package:flutter_web/cupertino.dart
package:flutter/services.dart -> package:flutter_web/services.dart
package:flutter/rendering.dart -> package:flutter_web/rendering.dart
package:flutter/gestures.dart -> package:flutter_web/gestures.dart
dart:ui -> package:flutter_web_ui/ui.dart
你可以一个个文件替换,不过笔者写了一个转换库
trans2fw
小工具,用一个命令就可以对【官方常用的代码库】转换成web版本,减少大家的开发成本。 trans2fw 是笔者开发的一个 自动化 flutter native 项目转化成 flutter-web 项目的工具,已经提交到pub
镜像上。github 地址>>>
- 安装
trans2fw
工具, 并注册程序
$ pub global activate trans2fw
$ pub global run trans2fw
- 运行
trans2fw
工具,根据提示输入,安装完成后,基本按提示输入转换目录就可以了
$ trans2fw
[✓] 请输入需要转换的文件目录(相对于项目目录): lib
[✓] 是否覆盖原有文件 ? (y/N) y
{path: lib, cover: true}
使用输入文件目录:lib
被转换的文件::lib/routers/application.dart::4
被转换的文件::lib/routers/routers.dart::4
被转换的文件::lib/routers/router_handler.dart::4
被转换的文件::lib/resources/icon_names.dart::3
被转换的文件::lib/resources/shared_preferences_keys.dart::3
被转换的文件::lib/resources/widget_name_to_icon.dart::3
被转换的文件::lib/standard_pages/index.dart::6
…
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
前端校招精编面试解析大全点击这里获取完整版pdf查看
,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
前端校招精编面试解析大全点击这里获取完整版pdf查看