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服务端 的相关文章

  • 颤振文本小部件仅显示最后一个条目

    我正在尝试在 flutter 中创建日历 目前我正在实施这些活动 为了测试这一点 我创建了一个方法来检查当前日期 即创建行的时间 是否有事件 如果是这种情况 则会在表示内容的容器中打印 x 整个事情只是第一次测试 看它是否在原则上有效 当我
  • CustomPainter 使用 Listenable 重绘

    CustomPainter 类似乎有几种触发重绘的方法 我让我的画家使用 shouldRepaint 方法 但是 我希望我的画家对可监听中的更改做出反应 而不是轮询更改 Flutter 文档指出 触发重绘的最有效方法是 扩展此类并向 Cus
  • Flutter 命令删除 .pub-cache 文件夹中的包

    如何删除flutter包 pub cache文件夹 当我们给予flutter clean 它将删除当前目录中的build文件夹 我们可以手动删除 但是我的要求是删除里面的包 pub cache使用命令的文件夹 要清除全局 PUB CACHE
  • 没有为类型“Object”定义运算符“[]”。尝试定义运算符“[]”

    我的代码在下面给出了我在这一行中从 firebase 访问用户名时遇到的问题的错误 snapshot data username 它给出了上面提到的错误 我知道访问地图数据的唯一方法是这个 FutureBuilder future Fire
  • 错误:未为类“BuildContext”定义方法“inheritFromWidgetOfExactType”

    今天编译flutter项目的时候出现了这样的错误 This will generate a JSON format file containing all messages that need to be translated pub ca
  • 快捷栏持续时间和高度

    我正在尝试展示一个小吃店 当我点击手势检测器后 这个小吃有两个按钮 问题是小吃栏出现几秒钟然后消失 所以我有两个问题 如何阻止小吃栏消失 直到用户采取行动并单击按钮 此外 小吃栏具有整个屏幕的高度 如何使其在屏幕底部具有特定高度 您可以使用
  • 如何使用 Firebase_Auth 和 Flutter 登录 Twitter

    一个人应该如何编程使用 Twitter 登录特征使用firebase auth https pub dev packages firebase auth和颤动 我看到一些使用的例子flutter twitter login https pu
  • 在 Flutter 中使用 Expansion Tile 和 ListView

    我正在尝试从此构建应用程序image https i stack imgur com gJNkO png 但是当我将 ListView 与此扩展图块放在同一页面中时 屏幕变为空 I added shrinkwrap true并工作了 但现在
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • Android Studio Flutter 项目错误:内存不足

    我在 Android Studio 上运行任何 flutter 项目 都会抛出内存不足错误 控制台中显示的消息如下所示 e b build slave windows engine build src third party dart ru
  • Flutter 应用程序在 iOS 平台的 firebase 电话身份验证中崩溃

    我在我的项目中实现了 Firebase Phone auth 在 Android 端 一切正常 但对于 iOS 端 当我尝试从我的端发送验证码时 应用程序崩溃并失去连接 我已在下面提交了我的代码 主程序 dart class MyApp e
  • Flutter:构造函数中 List 参数的默认分配

    在定义构造函数时 是否可以将常量值分配给数据类型 List 的可选参数 例如 class sample final int x final List
  • 颤动:所选值不显示在下拉列表中

    我正在从 SQLite 数据库填充城市名称并尝试显示为下拉列表 我通过遵循教程使其工作 但遇到了一个小问题 所选值不会显示在下拉列表中 它继续显示默认提示值 但是 我能够分配和检索正确的选定值 这是我的代码 cities dart clas
  • 扑。是否可以更改 TextFormField errorText 填充?

    我在用着TextFormField with OutlineInputBorder 我需要里面的文本在右侧和左侧有填充 为此 我正在使用 contentPadding const EdgeInsets symmetric vertical
  • 如何将 Dart 代码迁移到不可空 (NNBD)?

    我有一个之前编写的 Flutter 应用程序Dart 中引入了 null 安全性 https stackoverflow com questions 60068435 what is nullability in dart non null
  • 如何将 Flutter 应用连接到 tcp 套接字服务器?

    我很难将 Flutter 应用程序连接到服务器上的网络 tcp 套接字 我知道我必须使用某种中间选项 以便在 tcp 套接字到 flutter 以及 Flutter 到 tcp 套接字之间转换数据 任何想法 信息如何实现这一目标 问题是如何
  • 如何确定我们是否正在 Dart (Flutter) 中运行单元测试

    在 Flutter Dart 中从单元测试调用函数时 如何确定我正在运行单元测试还是实际应用程序 如果在单元测试中 我想传递不同的数据 您可以使用以下内容来检查您是否正在运行测试 Platform environment containsK
  • 更改项目名称

    Flutter项目的项目名称可以修改吗 项目名称是指您在创建 flutter 项目时提供的名称flutter create name 这取决于您想要实现的目标 如果您想更改手机菜单中显示的应用程序名称以及应用程序图标 则必须更改androi
  • Flutter/Dart:将十六进制颜色字符串转换为颜色?

    我们的数据库将颜色保存为String就像 AABBCC 所以我基本上正在寻找这样的函数 Color parseColor AABBCC 对于颤振 Color 类需要这样的东西Color 0xFF42A5F5 所以我需要转换 AABBCC t
  • 将 firebase 消息传递添加到 flutter android 项目时出现依赖错误

    我已将 firebase 消息传递添加到我的 Flutter 项目中 在 iOS 上运行良好 在 Android 上运行时出现错误 Android dependency androidx localbroadcastmanager loca

随机推荐

  • 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 简单