繁体   English   中英

在单个 UIViewController 最佳实践中嵌入多个 Flutter 小部件?

[英]Embedding multiple Flutter Widgets in single UIViewController best practices?

我正在研究将 Flutter 集成到现有的 iOS 和 Android 项目中。 我的主要经验是在 iOS 上,所以这篇文章将从 iOS 的角度出发。 但是可以随意将 UIViewController 替换为 Activity/Fragment。 我将就我目前的理解提供一些背景知识,并在文章末尾提出我的实际问题。

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

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

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

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

接下来是我的实际问题:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM