我目前正在开发一个大约75%完成的Android项目。我需要一个类似iOS的应用程序。
我可以导入这个项目来扑动吗?怎么样?
另外,flutter会支持我在这个项目中使用过的库吗?
答案 0 :(得分:18)
Flutter应用程序完全不同,即不像Android,也不像iOS。 Flutter有自己的架构,因此拥有插件等。
否,您无法将现有的Android代码转换为 Dart Flutter代码,这对于启用跨平台行为是必要的,因为所有Flutter SDK使用的代码必须用Dart编写。
但是,您可以将Android代码包含在Android文件夹中,然后尝试将其与Flutter SDK集成,这可能是全部更多的工作,而不仅仅是在Dart中重写它。这也是不您通常想要做的事情,因为原生的Android和iOS代码最有意义地用于以plugins的形式启用Flutter无法实现的功能。< / p>
还有第三种方法,即保留Android代码并仅使用Flutter 添加功能。这很难实现,因为您必须创建一个从Android代码“切换”到Flutter的界面。使用此功能,您还需要在Flutter或本机iOS中重写iOS的剩余部分,这对您没有任何帮助。
对此有一个很直接的答案。
Flutter 是原生SDK的层。 这意味着你可以保留你的代码,因为如果你曾经看过Flutter 项目,你会发现其中有,目前,基本上三个结构你可以使用:
lib
Dart 代码+文件的文件夹Flutter需要例如包括插件,简称: Dart代码 Flutter
iOS
Objective-C 或 Swift 代码的文件夹,其中还包含常用的iOS配件
android
Java 或 Kotlin (或C ++)代码和所有其他gradle文件等的文件夹。
这意味着你可以使用原生代码,但是你不需要这样做。
如果您想要,则可以在开发期间完全忽略android
和ios
文件夹。
您很可能只是在您的原生代码中修改应用程序图标,名称,版本名称,许可证密钥等方面。
Flutter 的目标是在Dart中编写所有代码,只在Flutter SDK中编写,这意味着您现有的Android代码可以包含在项目中,但它对iOS没有任何用处,因为所有跨平台工作都是在Dart中使用Flutter SDK完成的。
如果您真的想切换到Flutter SDK,您最好的选择是完全切换到Flutter,即重写 Dart 中的所有功能。
将Android代码“转换”为Flutter代码没有“导入”可能性。如果它们是用同一种语言编写的话,这甚至都不会起作用,因为Flutter架构完全不同,而且构建应用程序的方式与Android应用程序没有太大关系。
如果您认为学习Dart并重写您的跨平台应用程序是不值得的,但您仍然需要iOS支持,我建议您使用iOS本机编写,但我对该问题的一般建议是重写整个应用程序在达特。
答案 1 :(得分:1)
Flutter使用完全不同的渲染架构。使用Dart代码计算所有渲染,而不使用本机元素。
因此,您不仅可以使用本机代码,而且还可以使用&#34;导入原生代码来fl&#34;无论是。
对于图书馆来说,这是一个复杂的话题。您可以使用它们。但只有在Flutter所称的Platform channel内。这是一个api,用于在操作系统中本机运行的代码中编写系统调用。
所以像Firebase这样的库很好。但组件库或rxjava之类的东西都已经出来了。你需要一个类似的飞镖库。
答案 2 :(得分:0)
从我所看到的情况来看,你可能不得不将它移植到Dart大部分时间。但是,由于您的75%可能包含的不仅仅是编码(例如设计,交互,流程),因此简单的部分将在Dart中重新编码以完成编码。
答案 3 :(得分:0)
我会说不,没有。其原因很好地解释了@creativecreatorormaybenot。 我想补充的是,不仅仅是语言差异使得它具有挑战性,而是整个Android本机视图,视图层次结构与Flutter的视图层次结构不同。 如果您熟悉Cocos框架,它有自己的View层次结构,那么颤动类似于Google的更好,更丰富和证明(我猜,;))。 启动点仍然是常规的Android活动,但这是关于它的。然后控制流向颤动以测量和绘制UI窗口小部件。 您可能仍然需要实现一些需要系统服务的功能,硬件访问以Native Java / Kotlin android风格/ IOS本机风格编写。
建议: 在这一点上,我不建议你使用一种hackish方式将dart转换为java / kotlin和Android UI到Flutter UI,即使你在网上看到了这样做的东西。原因是,Flutter本身是Google的一项实验,并且还不像Android那样成熟。您应该期望经常添加一些细微差别。 由于你已经完成了75%,我会说全部是原生(Android和IOS)或所有Flutter。
准确回答您的问题: 我可以导入这个项目来扑动吗? 目前不是。
另外,flutter会支持我在这个项目中使用过的库吗? 有点。 既然你没有提到你使用的任何库,我将举几个例子来说明它更清楚: - 图像下载库(glide,picasso)可能被flutter的原生Image小部件取代 - 如果您正在使用任何要移植到Flutter的核心Java库,您可以按照flterter的文档关于developing packages and plugins,其实质上是说在dart中声明合同/ apis并在&#中实现java包39;机器人&#39;夹。 IOS和android的合同保持不变。 - 如果你想使用系统级组件,就像我之前提到的那样,包和插件是可行的方法。 Here是Dart团队开发的第一手插件列表。
答案 4 :(得分:0)
我可以导入此项目以进行扑动吗?怎么样?
到目前为止,我已经研究过,没有任何导入选项可用于任何其他框架的项目。与其他架构相比,颤振架构完全不同且是新的。我们可以在我们的项目中包含我们现有的android代码,但它对iOS没有任何用处,因为所有跨平台工作都是在Dart中使用Flutter SDK完成的。
会支持我在这个项目中使用过的库吗?
不,因为flutter提供了自己用Dart编写的库。他们每天都在添加新的库,我们需要使用它。
因此,我们需要用dart语言编写完整的项目,并使用flutter现有的库并构建一个新项目。