Flutter 11 Android原生项目集成Flutter Module

本文主要讲解如何在已有的Android原生老项目中集成Flutter模块。

实现流程:

1、在Android原生项目根目录下,创建Flutter Module;

2、修改Android原生项目settings.gradle,绑定 Flutter Module;

3、修改Android原生项目app目录下的build.gradle,添加flutter依赖;

4、使用Flutter Module里面的页面,显示在Android原生页面中。

一、创建Flutter Module

推荐在Android原生项目根目录下,创建Flutter Module,当然在其他目录下创建Flutter Module也是可以的,这里在Android原生项目根目录下创建Flutter Module主要是为了方便管理;

二、绑定 Flutter Module

打开Android原生项目根目录下的settings.gradle文件,修改下面内容,绑定 Flutter Module。

pluginManagement {repositories {gradlePluginPortal()google()mavenCentral()maven { url 'https://jitpack.io' }}
}
dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)repositories {maven { url 'https://maven.aliyun.com/repository/public' }maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }maven { url 'https://maven.aliyun.com/repository/central' }maven { url 'https://jitpack.io' }google()mavenCentral()maven {allowInsecureProtocol = trueurl 'http://download.flutter.io'}}}setBinding(new Binding([gradle:this]))
evaluate(new File(settingsDir,'flutter_lib/.android/include_flutter.groovy'))
include ':flutter_lib'

注意:new File(settingsDir,'flutter_lib/.android/include_flutter.groovy'),中settingsDir获取到的是Android原生项目根目录,如果你创建的Flutter Module不是在原生项目根目录下,需要修改settingsDir的值。

三、添加flutter依赖

打开Android原生项目app目录下的build.gradle 文件,修改下面内容,添加flutter依赖。

implementation project(':flutter')

修改完后,执行 Sync Now,同步一下项目,待flutter相关插件下载完成,出现下面图标,即成功依赖创建的Flutter Module。

四、 使用Flutter Module页面

以FlutterFragment方式,将Flutter Module页面插入原生页面中。

1、创建Flutter页面

在fluter_lib/lib目录下,创建两个空页面HomelandPage和VideoPage。

homeland_page.dart

/*年轻人,只管向前看,不要管自暴自弃者的话*/import 'package:flutter/cupertino.dart';///create by itz on 2024-10-18 16:56
///desc :
class HomelandPage extends StatefulWidget {const HomelandPage({super.key});@overrideState<HomelandPage> createState() => _HomelandPageState();
}class _HomelandPageState extends State<HomelandPage> {@overrideWidget build(BuildContext context) {return const Text("HomelandPage");}
}

video_page.dart

/*年轻人,只管向前看,不要管自暴自弃者的话*/import 'package:flutter/cupertino.dart';///create by itz on 2024-10-18 17:27
///desc :
class VideoPage extends StatefulWidget {const VideoPage({super.key});@overrideState<VideoPage> createState() => _VideoPageState();
}class _VideoPageState extends State<VideoPage> {@overrideWidget build(BuildContext context) {return const Text("VideoPage");}
}

2、修改Flutter MyApp

在创建Flutter Module时,会自动生成main.dart 文件作为Flutter的入口文件。修改main.dart 文件里面的MyApp,适配当Android原生页面传入不同的路由地址时,启动对应的页面。

import 'dart:ui';import 'package:flutter/material.dart';
import 'package:flutter_lib/page/homeland_page.dart';
import 'package:flutter_lib/page/video_page.dart';void main() => runApp(const MyApp());class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: _pageRoute(window.defaultRouteName),);}_pageRoute(String defaultRouteName) {switch (defaultRouteName) {case "main/homeland":return const HomelandPage();case "main/video":return const VideoPage();default:return const HomelandPage();}}
}

3、原生页面绑定Flutter页面

在Android原生页面中,通过FlutterFragment函数,以Fragment的方式获取到Flutter页面。

val homelandFragment = FlutterFragment.withNewEngine().initialRoute("main/homeland").build<FlutterFragment>()val videoFragment = FlutterFragment.withNewEngine().initialRoute("main/video").build<FlutterFragment>()

注意:原生创建FlutterFragment时传入的路由名称,要跟MyApp里面编写的路由名称保持一致。

最终实现效果如下:

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

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

相关文章

15分钟学Go 第6天:变量与常量

第6天&#xff1a;变量与常量 在Go语言中&#xff0c;变量和常量是编程的基础概念。理解如何定义和使用它们不仅能帮助我们管理数据&#xff0c;还能增强代码的可读性和可维护性。在本章中&#xff0c;我们将详细探讨Go语言中的变量和常量&#xff0c;涵盖它们的定义、使用、作…

[Xshell] Xshell的下载安装使用及连接linux过程 详解(附下载链接)

前言 Xshell.zip 链接&#xff1a;https://pan.quark.cn/s/5d9d1836fafc 提取码&#xff1a;SPn7 安装 下载后解压得到文件 安装路径不要有中文 打开文件 注意&#xff01;360等软件会拦截创建注册表的行为&#xff0c;需要全部允许、同意。或者退出360以后再安装。 在“绿化…

spdlog学习记录

spdlog Loggers&#xff1a;是 Spdlog 最基本的组件&#xff0c;负责记录日志消息。在 Spdlog 中&#xff0c;一个 Logger 对象代表着一个日志记录器&#xff0c;应用程序可以使用 Logger 对象记录不同级别的日志消息Sinks&#xff1a;决定了日志消息的输出位置。在 Spdlog 中&…

程序员节的故事:在代码的海洋中遨游

#1024程序员节 | 征文# 一年一度的程序员节又来了&#xff0c;作为一名热爱编程的开发者&#xff0c;我总是期待着这个特殊的日子。10月24日&#xff0c;不仅是程序员们的节日&#xff0c;更是我们分享故事、交流技术的时刻。今年的1024征文活动让我感到无比兴奋&#xff0c;因…

Axure重要元件三——中继器修改数据

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;中继器修改数据 主要内容&#xff1a;显示编辑内容、表格赋值、修改数据 应用场景&#xff1a;更新行、表单数据行修改 案例展示&#xff1a; 正文…

STM32L031F6P6基于CubeMX的串口通信调试笔记

用CubeMX创建项目 本实例用的PA14、PA13两个引脚&#xff0c;LPUART1。 对串口参数进行设置&#xff1a; 开启串口中断&#xff1a; 时钟源设置成内部高频时钟&#xff1a; 对项目进行设置&#xff1a; 生成代码&#xff1a; 在串口初始化函数中加入 __HAL_UART_ENA…

C++11 thread,mutex,condition_variable,atomic,原子操作CAS,智能指针线程安全,单例模式最简单实现方式

1.thread 在c11中&#xff0c;c标准委员会开发出了thread库&#xff1b;接下来我们先来看看这个库的使用吧&#xff1b; 1.1 thread类接口介绍 1.1.1 thread类构造函数 我们thread库中的thread类的构造函数可以通过直接传递回调函数与函数的参数来构造线程&#xff1a; int…

THP4 SOP16 芯片 高速光耦芯片

光电耦合器输入端加电信号使发光源发光&#xff0c;光的强度取决于激励电流的大小&#xff0c;此光照射到封装在一起的受光器上后&#xff0c;因光电效应而产生了光电流&#xff0c;由受光器输出端引出&#xff0c;这样就实现了电一光一电的转换。 由于光耦合器输入输出间互相…

mysql主从复制及故障修复

一、主MySQL数据库的配置 分别在三台主机&#xff08;chen2/10.110、chen3/10.120、chen4/10.130)中安装mysql数据&#xff0c;其中chen2/10.110作为主MySQL服务器&#xff0c;其余两台作为从MySQL服务器。 1、在主机上部署mysql数据库 详细的请看上一篇&#xff1a;mysql数据…

2021年江西省职业院校技能大赛(高职组) “云计算应用”赛项样题

2021年江西省职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项样题 【任务 1】基础运维任务[5 分]【题目 1】基础环境配置【题目 2】镜像挂载【题目 3】Yum 源配置【题目 4】时间同步配置【题目 5】计算节点分区 【任务 2】OpenStack 搭建任务[15 分]【题目…

现今 CSS3 最强二维布局系统 Grid 网格布局

深入学习 CSS3 目前最强大的布局系统 Grid 网格布局 Grid 网格布局的基本认识 Grid 网格布局: Grid 布局是一个基于网格的二位布局系统&#xff0c;是目前 CSS 最强的布局系统&#xff0c;它可以同时对列和行进行处理&#xff08;它将网页划分成一个个网格&#xff0c;可以任…

日本HarmonicDrive哈默纳科减速机SHF系列在半导体中的应用

半导体行业作为现代工业的核心领域之一&#xff0c;其技术的不断进步对于推动全球经济和科技创新起着至关重要的作用。而在半导体制造的复杂过程中&#xff0c;各种先进的设备和技术相互配合。日本 HarmonicDrive 哈默纳科减速机 SHF 系列具有优异的定位精度和旋转精度&#xf…

ES6扩展运算符

1.介绍&#xff1a; ... 扩展运算符能将数组转换为逗号分隔的参数序列&#xff1b; 扩展运算符&#xff08;spread&#xff09;也是三个点&#xff08;...&#xff09;。它好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的 参数序列&#xff0c;对数组进…

2024年最值得关注的5款数据可视化工具

在信息爆炸的时代&#xff0c;数据可视化工具扮演着至关重要的角色。它们帮助我们从海量数据中提取有价值的信息&#xff0c;并将这些信息以直观、易于理解的方式展现出来。无论是企业决策者、数据分析师还是普通用户&#xff0c;都能通过数据可视化工具更有效地分析和理解数据…

ESP32移植Openharmony外设篇(1)MQ-2烟雾传感器

外设篇 实验箱介绍 旗舰版实验箱由2部分组成&#xff1a;鸿蒙外设模块&#xff08;支持同时8个工作&#xff09;、鸿蒙平板。 其中&#xff0c;鸿蒙平板默认采用RK3566方案。 OpenHarmony外设模块采用底板传感器拓展板方式&#xff0c;底板默认采用ESP32方案&#xff0c;也…

【Linux】【Jenkins】后端maven项目打包教程-Linux版

本次安装版本&#xff1a;2.4 jenkins详细安装教程1、安装git环境2、安装mavne环境2.1 下载依赖2.2、解压、赋权2.2、配置环境变量2.3、验证安装 3、jenkins-插件下载3.1、进入jenkins-->系统管理3.2、进入系统管理-->插件管理3.3、下载两个插件&#xff08;如果之前下载…

【JVM神秘大门】Java虚拟机原理的保姆式教学,零基础速成精英之路(上篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

智慧园区的未来:三维可视化系统建设策略

园区三维可视化系统是指利用先进的数字技术和虚拟现实技术&#xff0c;对园区内部空间、设施、资源等进行实时模拟、展示和管理的系统。该系统可以帮助园区管理者更好地了解园区整体布局、资源分配情况&#xff0c;优化空间规划、设施管理&#xff0c;提高园区运营效率和服务水…

江恩理论(Gann Theory)

威廉江恩 威廉江恩&#xff08;William D.Gann&#xff09;&#xff0c;1878年出生于美国德州&#xff0c;二十世纪最著名的投资家。在股票市场上的骄人成绩无人可比。 江恩理论 江恩理论是一种通过数学、几何学、宗教和天文学的综合运用&#xff0c;来分析和预测市场走势的投…

探索 Python 中的 XML 转换利器:xml2dict

文章目录 **探索 Python 中的 XML 转换利器&#xff1a;xml2dict**一、背景介绍二、xml2dict 是什么&#xff1f;三、如何安装 xml2dict&#xff1f;四、基本用法五、实际应用场景六、常见问题及解决方案七、总结 探索 Python 中的 XML 转换利器&#xff1a;xml2dict 一、背景…