Flutter 11 Android原生项目集成Flutter Module

server/2024/10/22 9:55:42/

本文主要讲解如何在已有的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.ppmy.cn/server/133864.html

相关文章

ChatGPT 现已登陆 Windows 平台

今天&#xff0c;OpenAI 宣布其人工智能聊天机器人平台 ChatGPT 已开始预览专用 Windows 应用程序。OpenAI 表示&#xff0c;该应用目前仅适用于 ChatGPT Plus、Team、Enterprise 和 Edu 用户&#xff0c;是一个早期版本&#xff0c;将在今年晚些时候推出"完整体验"。…

Apache Doris简介

1.Doris 概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo&#xff0c;2018 年贡献到 Apache 社区后&#xff0c; 更名为 Doris ) &#xff0c;在百度内部&#xff0c; 有超过 200 个产品线在使用&#xff0c; 部署机器超过 1000 台&#xff0c; 单一 业务最大可达到上百…

超越 React Query:探索更高效的数据请求策略

你好&#xff0c;开发者们&#xff01; 在前端开发的海洋中&#xff0c;我们常常遇到组件间通信的难题。你是否也曾为如何优雅地在组件间传递信息而头疼&#xff1f;今天&#xff0c;我想和大家分享一个让我眼前一亮的解决方案——使用 alova。 跨组件触发请求的挑战 想象一…

JavaScript 第25章:Vue 基础

在学习JavaScript的第25章关于Vue的基础知识时&#xff0c;我们将从以下几个方面来了解Vue框架&#xff0c;并通过一个实战案例来巩固所学的知识。 Vue概述 Vue.js是一个用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue被设计为可以自底向上逐层应用。…

Android15之解决scrcpy显示Launcher桌面不全问题(二百三十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

深入探讨 HTTP 请求方法:GET、POST、PUT、DELETE 的实用指南

文章目录 引言GET 方法POST 方法PUT 方法DELETE 方法小结适用场景与特点总结最佳实践 在 API 设计中的重要性 引言 HTTP 协议的背景&#xff1a;介绍 HTTP&#xff08;超文本传输协议&#xff09;作为互联网的基础协议&#xff0c;自 1991 年发布以来&#xff0c;成为客户端和…

git禁用 SSL 证书验证

命令 git config --global http.sslVerify false注意&#xff1a;禁用 SSL 证书验证是不安全的&#xff0c;可能会使你的 Git 操作面临中间人攻击的风险。因此&#xff0c;只有在你确信网络环境是安全的&#xff0c;且了解禁用 SSL 验证的后果时&#xff0c;才应该使用这个配置…

WPF中StaticResource和DynamicResource

DynamicResource 在XAML中&#xff0c;StaticResource是一个标记扩展&#xff0c;它用于在XAML中引用页面的资源字典&#xff08;ResourceDictionary&#xff09;中定义的资源。资源可以是样式、画笔、控件模板、数据模板、字体族等任何对象。StaticResource允许你将这些资源应…