簡體   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