天天看點

Flutter實戰總結-3-flutterEngine的runWithEntrypoint使用

作者:滬上小樹

我使用Flutter的第一個場景是:在已有的iOS Native應用中嵌入Flutter不同子產品頁面。是以首先原本想調試的是runWithEntrypoint libraryURI,按照官方文檔在 iOS 應用中添加 Flutter 頁面 - Flutter 中文文檔 - Flutter 中文開發者網站 - Flutter Dart入口,在lib中增加檔案,定義新的entrypoint,flutterEngine運作傳回YES,但是FlutterViewController界面一直無法顯示。如下:

Flutter實戰總結-3-flutterEngine的runWithEntrypoint使用

flutter工程增加一個界面檔案

Flutter實戰總結-3-flutterEngine的runWithEntrypoint使用

XCode中的flutterEngine使用方式

libraryURI的字元串也嘗試過@"package:lib/other_file.dart"這種格式,但仍然同樣問題。經驗證不是@pragma('vm:entry-point') 的問題,因為在main.dart中定義這個新入口,[self.flutterEngine runWithEntrypoint:@"main2"],預設是加載main.dart檔案,是可以正常顯示界面的。

也沒有找到更多關于libraryURI的解釋,暫時先當做這個方式不建議用。在調試不同方式之後,總結一個我認為這種場景的實踐方式:

  1. 在lib下增加新的dart界面檔案,比如signUp.dart注冊界面
  2. 然後在main.dart定義signUp的entrypoint,執行個體signUp界面
  3. 在iOS工程中,隻使用[self.flutterEngine runWithEntrypoint:@"entrypoint"]
  4. 類似于把main.dart當做路由入口的檔案,仍然單獨寫其他flutter子產品界面即可。
Flutter實戰總結-3-flutterEngine的runWithEntrypoint使用

flutter module中的檔案和代碼

加載效果:

Flutter實戰總結-3-flutterEngine的runWithEntrypoint使用