FlutterWeb实战:03-与流行前端框架集成

与流行前端框架集成

前端有非常多的框架、工具、库,这些都要比 Dart Web 成熟、丰富。所以在将 Fluttter 编译成 Web 以后,若能使用现有的前端技术实现 web 端的特殊需求,肯定事半功倍。

搭建框架

在开始之前,确保你已经安装好了 node 和 npm

使用 create-react-app 初始化项目

首先使用 create-react-app 创建一个前端项目

npx create-react-app flutter_web

这些创建以下文件

  .eslintrc.jsbuild/node_modules/package.jsonpublic/src/yarn.lock

这是一个标准的前端项目,不过不用担心,我们不会使用任何 react 技术。

项目配置

为了能自定义 webpack 打包配置,需要安装一个名为 react-app-rewired 的插件,以替换 react-scripts 脚本

使用 react-app-wired 替换

安装 react-app-wired

npm install -g react-app-rewired

在根目录创建 config-overrides.js 文件,增加以下内容

const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = function override(config, env) {// Remove the default HtmlWebpackPluginconfig.plugins = config.plugins.filter((plugin) => !(plugin instanceof HtmlWebpackPlugin));// Add your own HtmlWebpackPlugin instance with your own optionsconfig.plugins.push(new HtmlWebpackPlugin({template: 'public/index.html',minify: {removeComments: false,collapseWhitespace: false,removeRedundantAttributes: true,useShortDoctype: true,removeEmptyAttributes: true,removeStyleLinkTypeAttributes: true,keepClosingSlash: true,minifyJS: false,minifyCSS: true,minifyURLs: true,},}));return config;
};

这里面引入一个名为 html-webpack-plugin 的插件,配置了需要压缩的内容。

替换 package.json 中 scripts 部分

  "scripts": {
-   "start": "react-scripts start",
+   "start": "react-app-rewired start",
-   "build": "react-scripts build",
+   "build": "react-app-rewired build",
-   "test": "react-scripts test",
+   "test": "react-app-rewired test","eject": "react-scripts eject"
}

初始化 Flutter

在当前项目目录下,执行以下命令初始化 Flutter 项目

flutter create --platforms web .

这将创建一个 Flutter 项目,并添加了 web 平台支持。

以下目录由 flutter 创建

Recreating project ....pubspec.yaml (created)lib/main.dart (created)web/analysis_options.yaml (created)

集成

现在,虽然两个项目共用一个目录,但我们需要修改一些配置,才将 flutter 项目与前端项目集成在一起工作。

编辑 package.json 文件中scripts/build 处的内容,改为

“rm -rf build && rm -rf web && react-app-rewired build && mv build web”,

同时删除不需要的依赖, 增加 react-app-rewired 依赖

  "dependencies": {
-    "cra-template": "1.2.0",
-    "react": "^19.0.0",
-    "react-dom": "^19.0.0","react-scripts": "5.0.1"},"eslintConfig": {"extends": [
-      "react-app",
-      "react-app/jest"]},
+ "devDependencies": {
+   "react-app-rewired": "^2.2.1"
+  }

运行 npm installyarn install, 更新依赖。

这行命令的作用是,构建时先清理当前项目目录 build 和 web 目录,构建完成后将前端构建目录改名为 web,以提供给 flutter 进一步构建使用。

最终,经过一番折腾, package.json 文件中的内容如下面所示

{"name": "flutter_web","version": "0.1.0","private": true,"dependencies": {"react-scripts": "5.0.1"},"scripts": {"start": "react-app-rewired start","build": "rm -rf build && rm -rf web && react-app-rewired build && mv build web","test": "react-app-rewired test","eject": "react-app-rewired eject"},"eslintConfig": {"extends": []},..."devDependencies": {"react-app-rewired": "^2.2.1"}
}

接下来我们复制 web 目录并替换掉 public 目录。

rm -rf public
cp -r web public

运行 npm run build, 如果能成功生成 web 目录,代表集成成功

前端开发

前面的准备工作完成以后,就可以愉快的开发了!

进入 src 目录,这里面就可以编写我们的前端代码了,也可以使用 npm 的任何 js 库。

为了统一维护 js,我们把 flutter web 的初始化代码从 html 中移到这里。

首先清空 src 目录中的文件,然后新建一个 index.js, 添加以下内容

window.flutterWebRenderer = "html";
window.addEventListener('load', function(ev) {// Download main.dart.js_flutter.loader.loadEntrypoint({entrypointUrl: 'main.dart.js',serviceWorker: {serviceWorkerVersion: serviceWorkerVersion,}}).then(function(engineInitializer) {return engineInitializer.initializeEngine();}).then(function(appRunner) {return appRunner.runApp();});
});

项目构建

# 构建前端
npm run build
# 构建Flutter
flutter clean && flutter build web --build-number=$VERSION_CODE --build-name=$TAG --web-renderer html --profile --base-href /webapp/

上述命令中, 和 都是环境变量,需要提前设置好

export VERSION_CODE=1
export TAG=1.0.0

这里需要注意的是,如果你不希望通过子目录访问 Flutter web 应用,那么需要将 base-href 设置为 /,或者移除该选项

flutter clean && flutter build web --build-number=$VERSION_CODE --build-name=$TAG --web-renderer html --profile

源码获取

https://gitee.com/zacks/flutter-web-demo

参考资料

  • Create React App
  • React App Wired
  • 编写你的第一个 Flutter 网页应用
  • flutter-web-demo

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

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

相关文章

C++ 中的 cJSON 解析库:用法、实现及递归解析算法与内存高效管理

在现代软件开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其易于阅读和编写、易于机器解析和生成的特性,被广泛应用于各种场景。C 作为一种强大的编程语言,自然也需要一个高效的…

新一代高性能无线传输模块M-GATEWAY3

M-GATEWAY3是M3系列的通用接口模块,用于接收各种总线信号并将它们集成到一个系统中。该模块通过标准化传输协议XCPonETH进行输出,确保为各种测量应用提供无损信号。此外,M-GATEWAY3支持通过热点、ETH-PC或USB-C传输数据。借助M-GATEWAY3&…

计算机毕业设计——Springboot的旅游管理

📘 博主小档案: 花花,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 花花在深度学习任务中展现出卓越的能力,包括但不限于java、python等技术。近年来,花花更…

deepseek+“D-id”或“即梦AI”快速生成短视频

1、deepseek生成视频脚本 1.1、第一步:使用通用模板提出需求,生成视频脚本 对话输入示例脚本1: 大年初五是迎财神的日志,帮我生成10秒左右的短视频, 体现一家3口在院子里欢庆新年, 孩子在院子里放鞭炮烟…

aspectFill(填充目标区域的同时保持图像的原有宽高比 (aspect ratio)图像不会被拉伸或压缩变形

“aspectFill” 是一个常用于图像和视频处理的术语,尤其是在用户界面 (UI) 设计和图形编程领域。它描述的是一种图像缩放或调整大小的方式,旨在填充目标区域的同时保持图像的原有宽高比 (aspect ratio)。 更详细的解释: Aspect Ratio (宽高比): 指的是图…

吃瓜教程Day1笔记

主要内容: 1. 什么是机器学习以及 2. 机器学习的相关数学符号,为后续内容作铺垫,并未涉及复杂的算法理论, 因此阅读本章时只需耐心梳理清楚所有概念和数学符号即可。 3. “模型评估与选择” 是在模型产出以后进行的下游工作&…

SpringCloud - Gateway 网关

前言 该博客为Sentinel学习笔记,主要目的是为了帮助后期快速复习使用 学习视频:7小快速通关SpringCloud 辅助文档:SpringCloud快速通关 源码地址:cloud-demo 一、简介 官网:https://spring.io/projects/spring-clou…

律所录音证据归集工具:基于PyQt6与多线程的自动化音频管理解决方案

在律所日常工作中,音频证据的整理与归集是一个高频且复杂的任务。面对大量的案件录音文件,如何实现快速且准确的分类与存档,成为了律所提高效率、降低出错率的关键。本文将通过技术角度解析一款名为律所录音证据归集工具的项目,详…

外贸网站源码 助力企业抢占蛇年市场先机!

在竞争激烈的外贸市场中,蛇年无疑是企业寻求突破与增长的关键一年。外贸网站源码为企业提供了快速搭建专业外贸网站的解决方案,助力企业在新的一年抢占市场先机。 快速上线 时间就是商机,尤其是在蛇年这样充满变数和机遇的年份。外贸网站源码…

什么是 Elasticsearch?

Elasticsearch 是一个非常强大的开源搜索和分析引擎,广泛应用于各种需要全文搜索、结构化搜索、聚合分析以及复杂数据分析的场景。下面我们就一起来揭开 Elasticsearch 的神秘面纱吧! 什么是 Elasticsearch? Elasticsearch 是由 Elastic 公…

PyCharm结合DeepSeek-R1

PyCharm结合DeepSeek-R1,打造专属 AI 编程助手 在程序员的日常工作中,提高编程效率、快速解决代码问题是重中之重。今天给大家分享一个强强联合的组合 ——PyCharm 插件 Continue 与 DeepSeek-R1,它们能帮你打造出强大的个人 AI 编程助手。 …

DeepSeek-Coder系列模型:智能编程助手的未来

文章目录 一、模型架构与核心功能1. 模型架构2. 核心功能 二、多语言支持与代码生成1. Python代码生成2. Java代码生成3. C代码生成4. JavaScript代码生成 三、仓库级代码理解1. 代码结构分析2. 上下文理解 四、FIM填充技术1. 函数自动填充2. 代码补全 五、应用场景1. 代码补全…

Spring Boot从入门到精通:核心知识点+实战指南

目录 一、Spring Boot 是什么?为什么它如此流行? 二、快速创建你的第一个Spring Boot应用 2.1 使用Spring Initializr生成项目 2.2 核心代码示例 三、深度解析Spring Boot核心机制 3.1 自动配置原理揭秘 3.2 自定义Starter实战 四、生产环境必备…

bash shell笔记——循环结构

0 引言 本文主要介绍linux bash shell循环结构的基本使用 1 测试环境 查看系统版本: uname -a : Ubuntu 18.04 查看bash版本: bash -version : GNU bash, version 4.4.20(1)-release 创建.sh文件: vim 00test.sh 修改00test.sh权限&…

C/C++算法竞赛学习书籍

文章目录 C Primer Plus:中文版(第六版)C Primer 中文版(第 5 版)算法竞赛进阶指南 (李煜东)挑战程序设计竞赛 (秋叶拓哉 岩田阳一 北川宜稔)算法竞赛入门经典(第2版) (刘汝佳)啊哈算法 (啊哈磊…

Word成功接入DeepSeek详细步骤

原理 原理是利用Word的VBA宏,写代码接入API。无需下载额外插件。 步骤一、注册硅基流动 硅基流动统一登录 注册这个是为了有一个api调用的api_key,有一些免费的额度可以使用。大概就是这个公司提供token,我们使用这个公司的模型调用deepsee…

vue-点击生成动态值,动态渲染回显输入框

1.前言 动态点击生成数值&#xff0c;回显输入框&#xff0c;并绑定。 2.实现 <template><div style"display:flex;align-items: center;flex-direction:row"><a-input:key"inputKey"v-model"uploadData[peo.field]"placehold…

Python 识别图片和扫描PDF中的文字

目录 工具与设置 Python 识别图片中的文字 Python 识别图片中的文字及其坐标位置 Python 识别扫描PDF中的文字 注意事项 在处理扫描的PDF和图片时&#xff0c;文字信息往往无法直接编辑、搜索或复制&#xff0c;这给信息提取和分析带来了诸多不便。手动录入信息不仅耗时费…

利用邮件合并将Excel的信息转为Word(单个测试用例转Word)

利用邮件合并将Excel的信息转为Word 效果一览效果前效果后 场景及问题解决方案 一、准备工作准备Excel数据源准备Word模板 二、邮件合并操作步骤连接Excel数据源插入合并域预览并生成合并文档 效果一览 效果前 效果后 场景及问题 在执行项目时的验收阶段&#xff0c;对于测试…

进阶版MATLAB 3D柱状图

%% 1. 数据准备 % 假设数据是一个任意形式的矩阵 % 例如&#xff1a;5行 x 7列的矩阵 data [3 5 2 6 8 4 7;7 2 6 9 3 5 8;4 8 3 7 2 6 9;6 1 5 8 4 7 2;9 4 7 3 6 2 5];% 定义行和列的标签&#xff08;可选&#xff09; rowLabels {Row1, Row2, Row3, Row4, Row5}; % 行标签…