Flutter for Web 解决跨域问题支持浏览器本地运行以及打包部署到Web服务端

2023-10-30

Flutter for Web 静态页面run起来基本没啥问题,但是加上接口调数据的时候,却遇到了浏览器跨域问题。

跨域问题1:CROS

在这里插入图片描述
解决方案:
有三种解决方案:
A、安装浏览器拓展插件moesif-orign-cors-changer(简单配置几个数据)
B、配置Nginx(配置太多了)
C、使用shelf_proxy插件
我选的C方案
1.在项目的 pubspec.yaml 中集成插件:

dependencies:
  shelf_proxy: ^1.0.1

2.在工程的lib目录下增加一个proxy_config.dart文件:

import 'package:shelf/shelf_io.dart' as shelf_io;
import 'package:shelf_proxy/shelf_proxy.dart';

Future<void> main() async {
  /// 输入你想要请求的api网关
  var reqHandle = proxyHandler("http://192.168.2.29:8081");

  /// 绑定本地端口,4500,转发到真正的服务器中
  var server = await shelf_io.serve(reqHandle, 'localhost', 4500);

  // 这里设置请求策略,允许所有
  server.defaultResponseHeaders.add('Access-Control-Allow-Origin', '*');
  server.defaultResponseHeaders.add('Access-Control-Allow-Credentials', true);
  print('Serving at http://${server.address.host}:${server.port}');
}

3.在AS的Terminal命令行中输入:dart ./lib/proxy_config.dart
本地代理服务器启动了!

4.然后就可以run web app了,输入命令: flutter run -d chrome

跨域问题2:浏览器安全设置

然而,你会发现CROS并没有解决,web 还是run不起来,这是因为谷歌浏览器的安全设置。
解决方案:

1.进入flutter\bin\cache 删除flutter_tools.stamp这个文件
2.进入 flutter\packages\flutter_tools\lib\src\web 找到并且打开 chrome.dart这个文件
3.搜索找到 ‘–disable-extensions’
4.在它下面增加一行 ‘–disable-web-security’

web兼容异常处理

到这一步的话大部分同学的项目都能跑起来了,但是–我的项目还是报错了:Error: Unsupported operation: bool.fromEnvironment can only be used as a const constructor

在项目中找到是这一行代码导致web报错不能运行:

  static bool get isRelease => bool.fromEnvironment("dart.vm.product");

解决方案:
用kReleaseMode替换bool.fromEnvironment

  import 'package:flutter/foundation.dart';
  
  static bool get isRelease => kReleaseMode;

retrofit库无法网络请求

1.用flutter build web打release包发布到服务器后,无法网络请求,而打profile包或debug包的话就正常。
2.不用retrofit,直接用dio是可以正常release打包并正常获取数据的。
结论:retrofit库在release打包的时候代码被混淆了导致无法工作。

解决方案:
因为我没有找到flutter web打包的时候如何指定某个插件不混淆的办法,所以已经提issues给作者了,希望作者大大能尽快解决。暂时只能弃用retrofit库,用回dio。

附上打profile包的命令:

flutter build web --profile --dart-define=Dart2jsOptimization=O0

部署到 Web 端

使用命令生成的包可以在项目的 /build/web 目录中查看。
等你准备好部署应用时,将 release 包上传到云或者是类似服务上

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter for Web 解决跨域问题支持浏览器本地运行以及打包部署到Web服务端 的相关文章

随机推荐

  • line-height:1是什么意思

    line height 1是什么意思 其实仍旧是设置行高的一种方法 只不过简化了语句 举个例子 比如此时你设置了font size 20px 之后你设置了line height 1 转义过来的意思就是line height 20px 行高为
  • 傻瓜式-根据自定义规则编码生成

    private final ReentrantLock lock new ReentrantLock public Result addProvider Provider proNew new Provider try lock lock
  • c语言ox是什么意思啊,ox什么意思

    营销树今天精心准备的是 ox什么意思 下面是详解 OX是什么意思 OX是无色透明的化学液体邻二甲苯的英文简写 OX作为英文单词是可数名词 基本含义是牛 读音为 英 ks 美 ks 复数 oxen 同义词 wild ox 例句They are
  • 福大计算机学硕扩招,福州大学2021年推免数据,快来了解这所211大学的保研情况!...

    福州大学是省部共建高校 是 双一流 建设高校 是 211工程 建设高校 学校现有1个国家重点实验室 8个国家级工程研究中心 3个国家国际科技合作基地 3个教育部重点实验室 有11个博士后科研流动站 11个一级学科博士点 2021年推荐优秀应
  • Arthas开源一周年,Github Star 160K,我们一直在坚持什么?

    缘起 最近看到一个很流行的标题 开源XX年 star XXX 我是如何坚持的 看到这样的标题 忽然发觉Arthas从2018年9月开源以来 刚好一年了 正好在这个秋高气爽的时节做下总结和回顾 Arthas Arthas是Alibaba开源的
  • WSL2创建多实例--发行版管理工具wsl2distromanager使用

    简介 wsl2 distro manager是github上的一款WSL的开源实例管理工具 它具有GUI界面 是目前我发现的比较方便的管理工具 项目地址如下 https github com bostrot wsl2 distro mana
  • 氮化镓 服务器电源管理系统报价,基于氮化镓的电源解决方案总体拥有成本评估...

    引言 近年来 电信市场正在朝云计算的方向转变 这导致超大规模数据中心空前快速的增长 而每个机架需要处理的功能也越来越多 反过来 这种趋势也意味着对功率的需求快速增加 而重点则是采用消耗更少电力的更高效 体积更紧凑的电源 散热同样是这里需要考
  • 信息安全保障体系规划方案

    本文转载自公众号爱方案 ID ifangan 本文内容为信息安全技术体系 运维体系 管理体系的评估和规划 是信息安全保障体系的主体 一 概述 1 1引言 本文基于对XX公司信息安全风险评估总体规划的分析 提出XX公司信息安全技术工作的总体规
  • C语言实战例题:必会的 10 个C语言经典练习题,源码分享

    这些都是基本的 C 程序 可以帮助刚踏入 C 编程世界的新手 快来试试吧 1 C 语言编程 Hello World include
  • 虚拟服务器磁盘 厚置备置零,VMware ESXi 虚拟硬盘格式记录:厚置备延迟置零、厚置备置零、精简置备...

    创建磁盘时 会进行两个操作 分配空间 置零 1 厚置备延迟置零 默认的创建格式 创建磁盘时 直接从磁盘分配空间 但对磁盘保留数据不置零 所以当有I O操作时 只需要做置零的操作 磁盘性能较好 时间短 适合于做池模式的虚拟桌面 2 厚置备置零
  • 微信小程序授权登录流程

    自我介绍 我是IT果果日记 微信公众号请搜索 IT果果日记 一个普通的技术宅 定期分享技术文章 欢迎点赞 关注和转发 请多关照 首先 我们要了解什么是微信小程序登录 它的作用是什么 用户登录 微信小程序登录是为了让开发者的服务器获取用户的o
  • MySQL主从复制实现读写分离

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud SpringCloudAlibaba 黑马旅游 谷粒商城 目录 读写分离 1 1 多台数据库 1 2 MySQL
  • Java集合框架图析(Collection-List)

    Java集合框架图析 Collection List 前言 Java 集合 也称作容器 主要是由两大接口 Interface 派生出来的 Collection 和 Map 顾名思义 容器就是用来存放数据的 那么这两大接口的不同之处在于 Co
  • Android 指纹识别(给应用添加指纹解锁)

    使用指纹 说明 指纹解锁在23 的时候 官方就已经给出了api 但是由于Android市场复杂 无法形成统一 硬件由不同的厂商开发 导致相同版本的软件系统 搭载的硬件千变万化 导致由的机型不支持指纹识别 但是 这也挡不住指纹识别在接下来的时
  • nmake编译Qt第三方库出现无法打开包含文件type_traits

    最近需要为个人项目ShaderLab添加内嵌的代码编辑窗口功能 支持语法高亮和Intellisense 最初使用了QCodeEditor 发现这个第三方的库对词法分析的实现效果不太行 代码换行后直接缩进到首行 无法定位到前一句的首行 考虑换
  • c++ 学习之 构造函数的使用

    上代码 class person public person cout lt lt person 的无参默认构造函数 lt lt endl person int age cout lt lt person 的有参默认构造函数 lt lt e
  • 程序设计综合实习(C语言):用指针优化学生成绩排名

    一 目的 1 熟悉变量的指针和指向变量的的指针变量的概念和使用 2 熟悉数组的指针和指向数组的的指针变量的概念和使用 3 掌握冒泡法或选择法排序的算法 4 掌握函数的定义 调用 声明 以及参数的两种传递方式 二 实习环境 Visual St
  • 2.3 模拟信号与数字信号

    通过之前的学习我们知道声音是模拟信号 在日常生活中使用的电脑和手机使用的是数字信号 两者区别在于数字信号是离散的 模拟信号是连续的 用电信号表示离散的0 1 1 归零制 用正的脉冲表示1用负的脉冲表示0 开始和结束都会回归至0位 2 不归零
  • win10和android手机日历事件的同步(华为手机)

    法一 使用google账号完成win10和android日历的同步 所谓同步嘛 很简单啊 只要两处登录同一个账号就可以了 so 我从网上查了查 google日历和微软的日历可以同步 所谓google日历和微软日历可以同步的意思是指 在浏览器
  • Flutter for Web 解决跨域问题支持浏览器本地运行以及打包部署到Web服务端

    Flutter for Web 静态页面run起来基本没啥问题 但是加上接口调数据的时候 却遇到了浏览器跨域问题 跨域问题1 CROS 解决方案 有三种解决方案 A 安装浏览器拓展插件moesif orign cors changer 简单