在单个 UIViewController 最佳实践中嵌入多个 Flutter Widget?



我正在研究将Flutter集成到现有的iOS和Android项目中。我的主要经验是在iOS上,所以这篇文章将从iOS的角度出发。但是请随意将UIViewController替换为活动/片段。我将介绍我目前的理解的一些背景,并将在帖子末尾提出我的实际问题。

我们的主要用例是将小Widget嵌入到现有的视图控制器中。我已经浏览了 Flutter 文档和指南,并成功地与我们的项目集成(实际上很容易!),但担心 Flutter 的整体设计与我们期望的用途不兼容。

理想情况下,Flutter 似乎希望成为应用程序的整个 UI:在应用程序启动时创建和启动引擎,将引擎传递给 FlutterView,并将其作为应用程序的根视图。 或者,Flutter 似乎很乐意在应用程序中拥有整个流程,您可以在其中推送全屏Widget来完成一些工作, 可能会推送/弹出更多屏幕,并最终将控制权交还给本机应用程序。

但是,如果我有一个带有一些 UI 组件的本机屏幕,我还想有一个颤振Widget来显示一些其他数据 - 例如条形图 - 似乎我需要在我的 Flutter 项目中为每种类型的Widget创建单独的模块或单独的@pragma(vm:entry-point)函数(图, 在这种情况下)我想显示。

我的理解是,这些Widget中的每一个都需要自己的 Flutter 引擎实例,该实例将正确的入口点/路由加载到该Widgetmain函数,然后调用runApp(MyWidget)

等等我的实际问题:

  • 在视图控制器中嵌入 FlutterWidget的最佳实践是什么?
  • 要将一组小Widget嵌入到视图控制器中,我需要为每个创建单独的引擎隔离,这是否正确?
  • 这甚至是考虑使用 Flutter 的正确方法吗?我知道预热和缓存的引擎启动延迟有解决方法,我可以在Flutter 中重新创建整个屏幕。但我想尽可能地保留我们的原生作品,并让 Flutter 成为一种附加更改。
  • 是否可以有效地将引擎重用于单独的 VM 入口点?拥有一个可以按需使用的缓存引擎池(除了内存压力和线程限制)会不会很"奇怪"?

我仍然对 Flutter 感兴趣,但到目前为止,它的功能给我留下了深刻的印象!如果我在这里遗漏了什么,请告诉我。

对于将来遇到此问题的任何人,截至 2020 年 10 月 21 日,不鼓励在本机 UIViewController 中嵌入多个 Flutter 小部件的用例。以高性能方式执行此操作需要更新 Flutter,以便更好地在引擎实例之间共享内存和线程。

最新更新