Flutter开发web应用第一课

2023-12-12  本文已影响0人  非新生代菜鸟

背景

因公司新项目启动,需要给出一个web版本的核心demo,上一个项目是flutter写的windows应用,正好趁机熟悉一下flutter在web开发的使用。

新建工程

IDE为android studio,新建flutter工程,没什么差别,记得勾选web就行,目录结构如图:


工程目录结构
目录结构图

新手注意的地方

1、让 Flutter 使用 path 策略

在main.dart中,需要导入flutter_web_plugins/url_strategy.dart包,并在main(){}函数中usePathUrlStrategy();这是官方文档中让Flutter 使用 path 策略的方法:
使用前url可能长这样:flutterexample.dev/#/path/to/screen,使用后:flutterexample.dev/path/to/screen

import 'package:flutter_web_plugins/url_strategy.dart';
void main() async {
  await Global.init(); // 初始化sp本地存储
  usePathUrlStrategy();
  runApp(const MyApp());
}

2、使用本地化存储shared_preferences

这里需要注意的是,引入Getx框架的Get_storage,可以实现对象存储,但刷新网页后,数据会重置。因此需要使用shared_preferences来实现数据本地持久化。

打包应用

运行flutter build web --release打包,build/web将会生成一个包含Flutter Web 应用程序的静态文件夹,便可以将这些文件部署到任何支持静态文件的 Web 服务器上。比如 /www/wwwroot/my_domain下:

*Nginx下需要配置文件设置:

server
{
    listen 80;
    server_name my_domain;
    index index.html index.htm default.htm default.html;
    root /www/wwwroot/my_domain;
    # 防止直接访问子url会404;
    location / {
        try_files $uri $uri/ /index.html;
    }
  ......
}

如果要使用docker部署,则在release目录下新建Dockerfile(注意此文件没有后缀名)配置文件,并输入以下内容:

# 使用 Nginx 作为基础镜像
FROM nginx:latest

# 设置工作目录
WORKDIR /usr/share/nginx/html

# 复制 Flutter Web 应用的 release 文件到工作目录
COPY build/web/ .

# 配置 Nginx 以处理路由
COPY nginx.conf /etc/nginx/conf.d/default.conf

# 暴露 Nginx 的默认端口
EXPOSE 80

# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

请注意,上述 Dockerfile 使用了 Nginx 作为基础镜像。此外,还需要提供一个 nginx.conf 文件,以确保 Nginx 正确处理 Flutter Web 应用程序的路由。以下是一个简单的 nginx.conf 文件示例:

server {
    listen 80;
    server_name my_domain;

    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

请将这两个文件放在与 Dockerfile相同的目录中(release文件夹下)。然后使用以下命令构建和运行 Docker 容器:

docker build -t my_image_name .

将构建好的my_image_name文件上传至服务器后,切换到当前目录执行:

docker run -p 8080:80 my_image_name

确保端口映射适用于当前服务器的环境,并且可以通过浏览器访问 http://my_domain:8080 来查看Flutter Web 应用程序。

以上

上一篇 下一篇

猜你喜欢

热点阅读