安卓原生项目中集成flutter moudle

Flutter Modul集成到IOS项目 Flutter Modul集成到既又IOS项目 阅读详情

去年做了一年的flutter 项目,今年新公司接到的任务是在原生项目中嵌入flutter moudle,开始上手有点手生,一步一步踩坑中,话不多说,上代码直接干。

跳转的方式有很多,我用的是FlutterEngine 的方式:

原生项目中 New -->> moudle -->> flutter moudle 

创建完成再 import moudle

首先安卓原生正常创建一个Activity

class PadFlutterActivity : AppCompatActivity(),FlutterUiDisplayListener{

    val FLUTTER_ROUTE_NAME = "flutter_route_name"

    var mFlutterEngine: FlutterEngine? = null
    var mFlutterView: FlutterView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_catering)
        val flutterRoute = intent.getStringExtra(FLUTTER_ROUTE_NAME)
        mFlutterEngine = FlutterEngineCache.getInstance().get(App.KEY_FLUTTER_CATERING);
        mFlutterEngine!!.navigationChannel.setInitialRoute(flutterRoute)
        mFlutterView = createFlutterView()
        mFlutterView!!.attachToFlutterEngine(mFlutterEngine!!);

    }

    private fun createFlutterView(): FlutterView? {
        var flutterView = FlutterView(this)
        var layoutParams = FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        )
        fl_flutter.addView(flutterView, layoutParams)

        return flutterView
    }

    override fun onFlutterUiDisplayed() {
        fl_flutter.visibility = View.VISIBLE
    }

    override fun onFlutterUiNoLongerDisplayed() {

    }

    override fun onResume() {
        super.onResume()
        mFlutterEngine!!.lifecycleChannel.appIsResumed()
    }

    override fun onPause() {
        super.onPause()
        mFlutterEngine!!.lifecycleChannel.appIsInactive()
    }

    override fun onStop() {
        super.onStop()
        mFlutterEngine!!.lifecycleChannel.appIsPaused()
    }

}

在Application 中初始化FlutterEngine

 private fun initFlutter() {
        flutterEngine = FlutterEngine(this)
        flutterEngine!!.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
        FlutterEngineCache.getInstance().put(KEY_FLUTTER_PAD,flutterEngine)
    }
val flutterRoute = intent.getStringExtra(FLUTTER_ROUTE_NAME) 这个是给flutter端传递参数用的,防止后期加需求,先把入口设计出来,用于后期区分跳转哪个页面,今天也是刚做到这一步,还没完善

Flutter 端 就简单做个接收处理就好了,

Widget _widgetForRoute(String routeName) {
  switch(routeName) {
    case "catering":
      return CateringWidget();

    default:
      return CateringWidget();
  }
}

runApp 运行这个代码就好了,我还有一些其他需求,在踩坑,但简单的集成到这一步就没问题。记录一下开发过程,网上的其他大佬写的太深,看不太懂,也欢迎大家留言讨论
To Be Continue

Flutter-视频系列--图解-Android-原生集成-Flutter-Module 我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。不断奔跑,你就知道学习的意义所在! 阅读详情

相关推荐

字节跳动业务在Flutter 轻量级引擎上的实践与优化

本文介绍了字节业务在 Flutter 轻量级引擎上的实践历程,介绍了在此过程中遇到的各种各样的问题以及最终使用的解决方案。

YZcoder的博客 3987

Flutter 开发中踩坑笔记总汇,Android中为什么需要Handler

根据pubspec.yaml文件中所引用库的版本号,Flutter会从服务器获取最新的库,并更新到pubspec.lock文件中。

m0_60388216的博客 1001

【HarmonyOS NEXT】Flutter目前是否支持engineGroup

目前engine产物应该不需要频繁更新,主要需要更新的是flutter.har。默认会优先使用 --loal-engine 指定的目录下的flutter.har,需要删掉后才会使用flutter_flutter中ohos模板里的flutter.har。flutter_flutter里的flutter.har会定期更新的。目前是否有实现以下效果的API可以调用?Flutter / engineGroup / engine / 黑屏。版本加载过程是黑屏显示,加载完成后可以正常显示。

Mayism123的博客 379

从源码看Flutter Android端的启动流程

点击上方蓝字关注我,知识会给你力量Flutter容器Flutter在Android中的渲染载体就是Flutter容器,通常是以Activity和Fragment的形式承载,虽然也有FlutterView,但是需要单独处理的关联方法太多,所以不太建议使用,这篇文章将分析Flutter在Android中的加载和启动流程,了解Flutter是如何在Android中加载并渲染的。小小Android,eas...

eclipse_xu 2446

开关电源EMC整改实录:用WSX系列共模电感搞定30MHz辐射超标

本文详细介绍了开关电源EMC整改实战,通过WSX系列共模电感成功解决30MHz频段辐射超标问题。文章分析了共模干扰的产生机制,对比了不同磁芯材料的性能差异,并提供了电路布局优化与安装技巧,最终通过实测数据验证了整改方案的有效性。

weixin_29305313的博客 414

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6063

一款零侵入的高效Flutter混合栈管理方案,你值得拥有!(1)

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!上面分享的字节跳动公司2020年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。就先写到这,码字不易,写的很片面不好之处敬请指出,如果觉得有参考价值的朋友也可以关注一下我。

2301_77595001的博客 408

Figure 03人形机器人与Helix端到端控制系统:具身智能突破深度解析

2026年5月,Figure AI的Figure 03人形机器人在一场震撼业界的直播中完成了长达200小时的连续全自动作业,分拣近25万个包裹,零故障。这一里程碑式的成就标志着人形机器人正式从「实验室展示」迈入「规模化商用」阶段。本文深入剖析Figure 03的核心技术——Helix端到端神经网络控制系统,包括System 0/1/2三层架构、视觉运动策略、全身协同控制等关键技术,并提供完整的Python/Go代码示例,帮助开发者理解具身智能的核心原理与实现路径。关键词。

shao.bing的专栏 992

android调用flutter页面,flutter android 开发笔记(四.根据路由进入不同的flutter页面)...

如果一个页面有多个flutterView或者不同activity加载不同flutterView,需要设置不同标识作为flutter的路由表,不同路由标识加载不同的flutterview关键代码://java代码mFlutter2Engine = new FlutterEngine(this);mFlutter2Engine.getNavigationChannel().setInitialRout...

weixin_28868927的博客 652

[面试]SoC验证工程师面试常见问题(三)

SoC 验证工程师面试中,SystemVerilog、UVM 和 SystemC 的代码题目通常涵盖面向对象编程、约束随机化、UVM 组件设计、内存建模等主题。通过练习上述示例题目和理解关键点,你可以更好地应对现场编码环节。如果有具体的面试方向(如特定协议验证)或公司偏好,可以提供更多信息,我会进一步定制题目和答案。祝你面试顺利!

元直的博客 1616

SAP 公司间库存调拨通过IDOC完成自动发票校验

本文仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP ERP软件,软件相应著作权归SAP所有。公司间采购时,通过SAP内部EDI 数据传输功能, 由销售方开的公司间发票自动触发采购方的发票校验。​欢迎扫码加如下微信,我会把大家拉到SAP PP学习群,随时欢迎跟我和其他SAP PP顾问一起交流和学习,如下图库存调拨订单,系统已经完成了发货方发货和收货方收货。

2402_84262664的博客 923

Flutter android原生项目引入flutter module

前言: 各位同学的大家好,有段时间没有给大家更新文章了,最近在学习flutter和安卓混合开发的知识点。所以就像总结一下,然后后分享给大家。 这一期文章的讲的知识一定要有用到Android studio 所以用vscode开发同学要稍微改下IDE (但是这不是重点) 那么废话不多说我们正式开始。 准备工作 需要安装flutter的开发环境:大家可以去看看之前的教程: 1 win系统flutter开发环境安装教程: https://www.jianshu.com/p/152447bc8718 2 mac

chuyouyinghe的专栏 1256

简单易懂的AXI_Lite 总线详解

简单易懂的AXI_Lite 总线详解 1、前言 AXI_LITE协议主要应用于Xilinx的ZYNQ芯片构架下的ARM和FPGA之间的数据读写,更偏向于单个寄存器的读写。 2、AXI总线与ZYNQ的关系 AXI(Advanced eXtensible Interface)本是由ARM公司提出的一种总线协议,Xilinx从6系列的FPGA开始对AXI总线提供支持,此时AXI已经发展到了AXI4这个版本,所以当你用到Xilinx的软件的时候看到的都是“AIX4”的IP,如Vivado打包一个AXI IP的时候,

m0_46642108的博客 8494

Flutter混合开发框架(二)——FlutterEngineGroup使用及原理分析

前序 要解决的问题以及现在的常用解决方案就不再详细叙述,主要就是要做混合开发这件事。 背景 FlutterEngineGroup是由官方推出的Flutter+Native混合开发解决方案,与FlutterBoost不同的是,使用的是多引擎的处理方式,并优化了每个引擎的大小以及数据处理方式,让大部分数据实现共享,只有部分生命周期等内容做了隔离。 实现方式 相较于单Engine形式,多Engine无需关心页面栈等问题,但新增了一个问题,就是多Engine中的数据共享。 多Engine的方式,如果我们自己设计,那

thunder_sz的博客 7449

广州吉欧电子科技有限公司安卓开发工程师岗位 - 技术核心、职责详解与面试指南

广州吉欧电子科技有限公司招聘安卓开发工程师,该岗位可接收优秀应届生。岗位职责包括:1)负责安卓应用架构设计与开发,确保稳定性和可扩展性;2)功能模块编码实现与测试;3)性能优化与用户体验提升;4)后端接口对接;5)系统版本适配;6)用户反馈处理迭代;7)特殊要求熟悉RTK高精度定位技术原理及使用。该岗位要求扎实的安卓开发技术、良好的架构设计能力、性能优化经验,以及特定领域的RTK专业知识,是一个技术全面且具有专业特色的开发岗位。

郑伟强dev的专栏 153

YOLO11改进:轻量级改进 | 通用倒瓶颈(UIB)搜索块结合C3k2二次创新 | 轻量化之王MobileNetV4

通用倒瓶颈(UIB)搜索块替代YOLO11的C3k2

会AI的学姐 293

Android项目中集成Flutter,实现秒开Flutter模块

本文目标 成功在Android原生项目中集成Flutter Warning 从Flutter v1.1.7版本开始,Flutter module仅支持AndroidX应用 在release模式下Flutter仅支持以下架构:x86_64,armeabi-v7a,arm64-v8a,不支持mips和x86,所以引入Flutter前需要选取Flutter支持的架构 android{ //... defaultConfig { //配置支持的动态库类型 nd.

分享身边生活经验blog 744

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Flutter多容器踩坑

背景 项目中的flutter混合栈采用类似咸鱼flutter_boost的单引擎方案,不同的Flutter Activity间通过合理的引擎绑定与解绑机制实现多Flutter Activity。此前app内只是针对flutter -> native ->flutter的场景进行适配,且能正常运行,新的业务需求需要实现两个相邻FlutterActivity间的跳转,理论上而言两个相邻FlutterActivity间跳转的剩余工序其实就是截屏操作——防止Flutter Activity引擎解绑时画面

Marco_Rys的博客 2373

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【Flutter】Flutter 混合开发 ( 简介 | Flutter 混合开发集成步骤 | 创建 Flutter Module )

一、Flutter 混合开发简介、 二、Flutter 混合开发集成步骤、 三、创建 Flutter Module、 1、使用命令行创建 Flutter Module 项目 ( 仅做参考 )、 2、Android Studio 中创建 Flutter Module ( 推荐 )、 3、Flutter Module 项目文件结构、 四、相关资源、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3321

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

flutter module打包成framework引入原生工程

到这里 Flutter Module 就完全引入到了现有的 iOS 工程中,关于如何运行代码,可以去官方文档 - Adding a Flutter screen to an iOS app[5] 中查找。这样集成的方案,感觉是目前最方便的了。(如有更佳方案,烦请告知)Flutter 端写完代码直接运行就可以了。iOS 端直接,超级简单。如有缺陷,希望大家提出,共同学习!?References[1]把flutter作为framework添加到已存在的iOS中:[2]

allanGold 2211

Flutter 多引擎渲染,在稿定 App 的实践

发这篇文章的原因主要是关于Flutter 多引擎的介绍也好,实践也好,可参考的资源实在太少,包括官方的 issues 也没很多有价值的信息,前几个月确实在坑的泥潭里死去活来。但好在已经走出了一条羊肠小道,可供大家参考。

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 1513

Flutter 2.0 下混合开发浅析

多余的前言 Flutter 2.0 发布时,其中最受大家关注之一的内容就是 Add-to-App 相关的更新,因为除了热更新之外,Flutter 最受大家诟病的就是混合开发体验不好。 为什么不好呢?因为 Flutter 的控件渲染直接脱离了原生平台,也就是无论页面堆栈和渲染树都独立于平台运行,这固然给 Flutter 带来了较好的跨平台体验,但是也造成了在和原生平台混合时存在高成本的问题。 且不说在已有的原生项目中集成 Flutter ,就是现阶段在 Flutter 中集成原生控件的 PlatformV

恋猫de小郭的博客 6709

Android 在原生项目中新建一个Flutter的Module

这个地址的两个xxx,第一个改成你的旧项目名,第二个改成刚刚建的Flutter项目名,这里的结构以您的实际情况为准。插件安装完后会提示重启AndroidStudio,重启完毕后进行第三步;要是能够得到您的关注,深海会更加荣幸,感谢各位的支持!Dart插件的作用是Dart语法的提示和补全等功能。创建完成后,将这个Flutter项目拷贝到旧项目下。等同步完成后,你会发现项目中多了一个这个文件夹。如果您感觉深海写的不错的话,请给文章点个赞吧。如果您有不同的见解或疑问,欢迎到评论区留言。至此结束,目的达成。....

赵星海 2294

Flutter 使用本地module抽离相关公共方法和类

做android开发的时候通常会把所有公共的方法组件抽离到一个module里面,后续做其他项目的时候,只需要引用这个module所有的第三方的库,自定义的方法和组件类都可以直接使用不需要做其他的设置,于是flutter也想如此进行处理,具体做法如下 1.File--Project Structure 2.点击 左上角的 “+” 号新建module 3.选择flutter,县级next 4.自定义自己的module的名称,点击Finish base的module就创建好了..

瞬神_夜一的专栏 5146

【flutter 添加多module】

请注意,每个模块都是一个独立的Flutter项目,因此可以在每个模块中使用独立的lib、assets和其他文件夹。你可以在每个模块中编写和运行独立的代码,也可以在主项目中使用这些模块作为依赖项。确保将path_to_module1和path_to_module2替换为实际的路径,它们应该是相对于主项目根目录的路径。这将在你的项目根目录下创建一个新的目录,该目录将作为你的新模块的根目录。打开终端或命令行界面,并导航到你的Flutter项目的根目录。现在,你的主项目将能够引用和使用这些子模块。

sunflowerbig的博客 1800

Flutter 学习之旅 之 flutter 作为 module ,在 Android 端主动唤起 Flutter 开发的界面 简单的整理

Flutter 是一款开源的 UI 软件开发工具包,由 Google 开发和维护。它允许开发者使用一套代码同时构建跨平台的应用程序,包括移动设备(iOS 和 Android)、Web 和桌面平台(Windows、macOS 和 Linux)。Flutter 使用 Dart 编程语言,它可以将代码编译为 ARM 或 Intel 机器代码以及 JavaScript,从而实现快速的性能。

仙魁XAN 2036
上一篇: Andriod Studio 生成签名文件问题
Loki_M
博客等级 码龄9年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值