Flutter Web初尝试以及一些问题解决

Flutter 2在3月份发布以后,开放了移动端、Web端、桌面端的发布能力,之前一直使用Flutter开发移动应用,没有敢用Flutter做Web项目,近期有时间自己调研了一下,也遇到了一些问题,在这里记录一下。
创建一个Flutter项目做Demo,集成了一些插件:项目地址

目前遇到的问题(不断更新中...)

1、跨域
2、多设备调试
3、标题(Title)
4、获取应用版本号

一、跨域问题

主要使用了cached_network_image来加载网络上的图片来展现跨域问题,直接用Image.network也是可以的,在网络上随便找了一张图片http://via.placeholder.com/350x150

PS: 一般看一个插件支持那些平台,可以在pub.dev上看下面列出的平台,但是cached_network_image很奇怪,显示并不支持web,但是当浏览器运行起来后,也是可以加载出图片的。

image.png

1、本人习惯用VSCode开发,VSCode运行Flutter Web项目首先选择设备为Chrome
Chrome

2、然后选择Debug,点击三角符号运行
调试项目

3、不出意外,运行成功后,Chrome就展现出项目了,这里首页用了一个第三方框架:gesture_password_widget,因为也想看看这个手势密码在Web上的表现
首页

4、根据上面的提示滑动正确的手势顺序,就进入了功能列表页面
功能列表页

5、点击Cached Network Image Demo,进入测试加载图片页面,发现图片加载失败,并且控制台报错了
加载失败

6、很明显,这边请求的图片服务器和页面运行的地址不通,产生了跨域问题
报错信息

7、解决方法在这篇文章里说的很详细:Flutter Web 跨域问题解决方案,里面推荐了多种方法,我这边用了第三种,类似启动一个代理服务的方式,在Demo项目里的lib/server/cors.dart文件中配置目标服务器地址和代理地址及端口,然后通过终端运行该文件,启动一个代理服务。

dart xxx/xxx/xxx/cors.dart
启动成功

8、这里我配的代理服务是localhost:4040,现在打开localhost:4040/350x150,图片加载成功


显示成功

9、然后把Demo项目里加载图片的地址改一下

// imageUrl: "http://via.placeholder.com/350x150",
imageUrl: "http://localhost:4040/350x150",

10、可以看到,图片已经可以加载出来了


加载成功
补充:后来看到了这篇文章,调试的时候也可以通过这种方式绕过跨域问题。

二、调试问题

接着上面,跨域问题解决后,我想在手机上通过浏览器测一下,目前项目启动在电脑上的地址是http://localhost:52754/#/,确认电脑和手机处于同一个网段后,我打开手机Safari浏览器,然后将地址的localhost修改为电脑的ip,发现居然无法打开

无法链接

尝试了不同的启动方式,如

flutter run -d chrome

也不起作用

在网上搜索的时候发现有人咨询过类似问题:flutter - 从真实的移动浏览器访问flutter localhost,里面的回答解释了为什么Flutter运行的Web项目不能充当服务器被访问,然后也给出了解决方法,大致意思就是让你先编译出来Web项目,然后在本地部署一下,就可以通过其他设备访问了。

这个方法虽然可以解决,但是不方便一边开发一边调试,于是再找解决方案,发现有人提供了这样一条命令

flutter run -d chrome --web-hostname xxx.xxx.xxx.xxx --web-port xxxx

尝试了一下,通过终端将电脑的ip地址输进去,再加个端口号,运行起来后,发现可以通过外部设备访问了


访问成功

接着我们修改一下代码内容,发现页面没有自动刷新,在控制台中看到如下提示,意思是改动过后,需要在终端输入命令r来刷新


提示
PS:这样会有一个新问题,就是上面跨域问题的配置,需要将localhost换成相同的ip地址,这样才能在外部设备也访问到配置的外部服务器地址

三、标题(Title)

网页标签上的标题,可以通过最外层的MaterialApp设置title

MaterialApp(、
  title: '标题aaa'
  ...
)

网页标题

但是这样有个问题,不论页面怎么切换,永远都是显示这个标题,正常开发思维,肯定是切换到登录页,标题就显示‘登录’,设置页就显示‘设置’等等。

这边有两种解决办法:

1、直接在页面最外面包一层Title

@override
Widget build(Context context) {
  return Title(
    label: '当前页面的标题',
    primaryColor: Theme.of(context).primaryColor,
    child: ..,
  );
}

2、使用SystemChrome.setApplicationSwitcherDescription

@override
Widget build(BuildContext context) {
    SystemChrome.setApplicationSwitcherDescription(ApplicationSwitcherDescription(
      label: '当前页面的标题',
      primaryColor: Theme.of(context).primaryColor.value,
    ));


  return Container(...);
}

个人还是喜欢用第二种,第一种需要再嵌套一层的感觉不是很爽。。

四、获取应用版本号

以前开发App的时候,直接用package_info插件就可以获取版本号、包名等信息,但是看到package_info这个插件是不支持Web的,于是我就换了另一个package_info_plus,这个支持Web。

未完待续...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容