Flutter开发的Web应用 构建及部署 标准流程指南

前言

Flutter是Google推出的跨平台开发框架,支持多种平台:Windwos,Mac,iphone,Android,Web,Linux,甚至经过一些折腾还可以支持树莓派,十分强大,笔者曾写过一些探索其底层架构的文章,有兴趣的读者可自行阅读。

笔者的Flutter版本为3.16.5,算是比较新的一个版本了,本文将进行标准的把web项目部署到自有云服务器这一流程,云服务器采用Nginx作为Web托管服务器,服务器运维面板为宝塔面板(但这个不影响什么)。

本文的部署没有涉及到SSR等额外优化技术,只是全面介绍了如何让这一套合规走起来。

正文

构建产物

确保flutter应用支持Web端:

flutter create --platforms web .

构建Web产物:

flutter build web

额外补充

可以选择两种不同的渲染器来运行和构建 Web 应用:

使用 HTML 渲染
使用 HTML,CSS,Canvas 和 SVG 元素来渲染,应用的大小相对 CanvasKit 较小。

使用 CanvasKit 渲染
应用在移动和桌面端保持一致,有更好的性能,以及降低不同浏览器渲染效果不一致的风险。但是应用的大小会增加大约 2MB。

--web-renderer 可选参数值为 autohtml 或 canvaskit

  • auto(默认)- 自动选择渲染器。移动端浏览器选择 HTML,桌面端浏览器选择 CanvasKit。

  • html - 强制使用 HTML 渲染器。

  • canvaskit - 强制使用 CanvasKit 渲染器。

详情可看官方文档​​​​​​Web 渲染器 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter

最简单的方式就选择flutter build web即可

上传产物

即上传产物到Web服务器,这个就不多赘述了,把打包产物的所有东西都上传上去就ok,打包产物的目录在build/web。

此外,在服务器上安装nginx的过程也不赘述,这些直接看其他博文就好。

配置Nginx服务器

为Flutter应用添加一个新的server块,server的示例配置直接可以照抄如下写法:

server {listen 80;server_name flutterapp.mydomain.com;root /www/my_flutter_app/build/web;index index.html;location / {try_files $uri $uri/ /index.html;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {expires 30d;}location ~ .*\.(js|css)?$ {expires 12h;}access_log /www/wwwlogs/flutterapp-access.log;error_log /www/wwwlogs/flutterapp-error.log;
}
  • listen 指定web的监听端口号
  • server_name 代表域名,没有的话就写服务器ip地址吧
  • root 代表web的跟路径目录
  • index 指定了用index.html文件作为响应
  • 第一个location匹配所有的请求路径,先尝试按请求的URI在root定义的目录下查找文件;如果没有找到,再尝试将URI当作目录处理并查找该目录下的index.html文件;如果还是没有找到,最后就返回根目录下的index.html文件,这样配置更适合flutter这种SPA应用一些。
  • 第二个location和第三个location都是定义了缓存,提升网站访问性能
  • 后面就是两个报错log了

接下来保存并且重启Nginx服务,同时不忘放行指定端口就大功告成。

补充

在Nginx配置中,server_name 指令用于定义处理请求的服务器的名称。这可以是一个具体的域名(如 example.com),一个子域名(如 sub.example.com),一个通配符名称(如 *.example.com 表示 example.com 的所有子域名),或者是一个精确名称(如 localhost 或特定的一个名称,不一定是有效的域名)。

server_name 将匹配HTTP请求的 Host 头部,使Nginx正确地匹配并处理这些请求。

另外,实测部署flutterWeb后一些显示效果可能会有些问题,需要继续测试改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FDM3D打印系列——手涂水性漆和补土

大家好,我是阿赵。   继续探索FDM3D打印。这次要打印的是拳皇系列的经典角色,八神庵:   上次那个卢卡尔打印的尺寸有点小,为了配合着卢卡尔的高度,所以这次这个八神庵也打印的特别的小:   特别小的…

C语言 键盘输入与屏幕输出——数据的格式化屏幕输出

目录 顺序结构 C语言如何实现数据的输入和输出? 数据的格式化屏幕输出 printf()格式字符 printf()的格式修饰符 顺序结构 一般而言,顺序结构程序涉及如下三个基本操作: *输入数据 *处理数…

C++STLmap,set

我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

什么是公网IP?

公网IP,即公开网络IP地址,是指在互联网中公开可见、可访问的IP地址。每个设备在连接互联网时,都需要一个唯一的公网IP地址,以便其他设备可以定位并与之通信。 尽管公网IP在网络通信中具有重要作用,但它也带来了一些安全…

在GitHub上上传项目(Idea)

repository创建好后,GitHub会提示相应的命令 在Idea的终端执行这些命令,就OK了 在GitHub上查看,已经上传成功

【Hello,PyQt】QTextEdit和QSplider

PyQt5 是一个强大的Python库,用于创建图形用户界面(GUI)。其中,QTextEdit 控件作为一个灵活多用的组件,常用于显示和编辑多行文本内容,支持丰富的格式设置和文本操作功能。另外,QSlider 控件是一…

JavaScript高级 —— 学习(二)

目录 一、深入对象 (一)创建对象三种方式 1.利用对象字面量创建 2.利用 new Object() 创建 3.利用构造函数创建 (二)利用构造函数创建对象 1.构造函数介绍 2.约定 3.实例化执行过程 (三)实例成员…

git命令-项目使用

项目中用到的git命令,记录下来,后续项目可以直接用 配置命令 一次性设置: git config --global user.name "Your Name" git config --global user.email "youremailaddress.com"git config --global alias.pl "pu…

【React】React AJAX

在React中使用AJAX(Asynchronous JavaScript and XML)是一种常见的做法,用于从服务器获取数据并在组件中显示。尽管AJAX的名字中包含了XML,但现在更多地使用JSON(JavaScript Object Notation)作为数据交换格…

opengl草稿复习,承上启下(一)

目录 1、链接文件夹中的cpp 2、链接资源到输出目录 3、多编译目标 4、cmakelist添加库 4、添加glfw和glad 5、glfw运行 6、NDC、VBO、VAO 7、渐变三角形 8、渲染两个三角形 9、渲染两个三角形,同时基于原来颜色进行渐变 10、三角形渲染模块化 11、纹理渲…

Python API(happybase)操作Hbase案例

一、Windows下安装Python库:happybase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase,需要开启HBase的Thrift服务。所以,在Linux服务器上,执行如…

Kerberos 认证 javax.security.auth.logon.LoginException:拒绝链接 (Connection refused)

kerberos 服务重启之后异常 项目中用到了hive 和hdfs ,权限认证使用了Kerberos,因为机房异常,导致了Kerberos 服务重启,结果发现本来运行正常的应用服务hive 和hdfs 认证失败,报错信息是 典型的网络连接异常 排查思路…

软考 - 系统架构设计师 - 架构风格

软件架构风格是指描述特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件,以及这些构件的组织方式,惯用模式指众多系统所共有的结构和语义。 目录 架构风格 数据流风格 批处理架构风格 管道 - 过滤器架构风格 调用 / 返回风格 主程序…

动手学机器学习初探机器学习+习题

初探机器学习 “两只手”代表的是人工智能可以做的两大类任务,即预测与决策。 “四条腿”则代表支撑人工智能的四大类科学技术,包括搜索、推理、学习和博弈。 非参数化模型(nonparametric model):与参数化模型相反&…

二、分布式事务

目录 二、分布式事务2.1 什么是分布式事务2.2 分布式事务产生的背景2.3 分布式事务产生的场景2.4 分布式事务理论4.1 CAP理论4.2 Base理论 5、分布式事务的解决方案 二、分布式事务 2.1 什么是分布式事务 一组操作会产⽣多个数据库session会话 此时就会出现分布式事务 2.2 分…

PTA----->幸运数字

一,题目: Rain Sure同学定义了幸运数字——如果一个正整数n是幸运数字,那么当且仅当n和(n1)/2都是素数。 现在给定q次查询: 第i次询问给定两个正整数li​,ri​,请你求出在区间[li​,ri​]中有多少个数字是幸运数字。…

我的第一个 VTK 程序

我的第一个 VTK 程序 我的第一个 VTK 程序VTK 可视化流程源程序运行结果 我的第一个 VTK 程序 环境: Visual Studio 2022 CommumityQt 6.2.3 MSVC2019 64位VTK 9.3.0 不会Cmake编译VTK库?看这个:使用 Cmake 对 VTK-9.3.0 进行编译 不会在…

代码随想录算法训练营第二十五天|17.电话号码的字母组合、39.组合总和

文档链接:https://programmercarl.com/ LeetCode17.电话号码的字母组合 题目链接:​​​​​​​​​​​​​​https://leetcode.cn/problems/letter-combinations-of-a-phone-number/ 思路: 理解本题后,要解决如下三个问题&…

Apache Hive的基本使用语法(一)

一、数据库操作 创建数据库 create database if not exists myhive;查看数据库 use myhive; desc database myhive;创建数据库并指定hdfs存储 create database myhive2 location /myhive2;删除空数据库(如果有表会报错) drop database myhive;…

基于jsp+mysql+Spring的SpringBoot招聘网站项目

基于jspmysqlSpring的SpringBoot招聘网站项目(完整源码sql)主要实现了管理员登录,简历管理,问答管理,职位管理,用户管理,职位申请进度更新,查看简历 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀…