在Flutter中能否构建Android小部件?

50

Flutter中大量使用“widget”这个词,使得在这个主题上查找文档变得困难。

在Android上(我认为在iOS上不可能),我们可以在主屏幕上添加小部件,从而无需打开相应的应用程序即可查看与其相关的信息或触发一键操作。

在Dart和Flutter中是否可以构建这样的“小部件”?还是应该在Java中完成,然后以某种方式将其插入到我的Flutter应用程序中?

您能分享一个包含此类小部件的示例资源吗?

编辑:我没有安卓开发经验,但听起来使用可绘制画布可能会有所帮助。我能找到一些画布Flutter代码,但我还不能理解如何将它们联系起来。

编辑2:根据这个Github问题,似乎在Flutter中编写安卓主屏幕小部件是行不通的,因为Flutter有自己的渲染引擎。我很想学习kotlin来完成这个任务,但如果有人知道好的教程可以帮我,那就太棒了。


事实是你可以在Flutter中运行Java代码。所以你确实可以这样做。 - Rémi Rousselet
请检查以下链接:https://dev59.com/pFYN5IYBdhLWcg3wK1bO - Christian Assi
1个回答

15
正如OP在编辑中提到的,这目前是不可能的,因为Flutter使用了一个定制的渲染引擎。
小部件在渲染方面非常有限;文档解释了只能使用特定的布局。你可以理论上使用Flutter的软件渲染器在主实例之外的单独实例中渲染图像并显示它,但这将非常技术化,性能可能不佳,并且一点都不直观! 这里有一个非常详细的教程,指导您创建一些示例(尽管是用Java编写的)。相同的逻辑适用于Kotlin,只需进行一些语法上的更改,因为类几乎是可互换的。然而,实际上大部分工作都在布局中,一些Android的连线工作;如果您已经熟悉Android和Java,请记住,由于Kotlin运行时需要添加约7000个方法和~1MB到您的调试APK中(来自kotlin on android FAQ),因此,如果这是您所用的全部内容,您可能不会有太多的Kotlin/Java代码(尽管如果您对Java和Kotlin都不熟悉,Kotlin在某些方面可能更友好)。
此外,为了能够在Flutter应用程序和Java/Kotlin后端之间进行通信,您需要使用平台通道,如Flutter文档所述。

所以我猜原生安卓动态壁纸也是使用OpenGL实现的? - stuckedoverflow
@rmtmckenzie 可以使用以下方法实现:https://medium.com/flutter-community/flutter-platformview-how-to-create-flutter-widgets-from-native-views-366e378115b6 - emvaized
1
@emvaized,那是错误的方向 - OP正在询问如何使用Flutter编写主屏幕小部件或操作,而不是将小部件嵌入Flutter视图中。 - rmtmckenzie
1
@rmtmckenzie 哦,我现在明白了,我误解了...顺便问一下,你对我说的做法有什么想法?我已经提出了问题,但似乎没有引起足够的关注。 - emvaized
可以的!看看这篇中文文章:https://medium.com/@ashishgarg1998/how-to-create-home-screen-app-widgets-in-flutter-ce3458f3638e - SwiftiSwift

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接