前提:以下问题基于使用FlutterEngineGroup接入到原生工程所出现的问题
pod install 显示 Invalid Podfile
file: cannot load such file -- ../test_flutter_module/.iOS/Flutter/podhelper.rb.
- 1、test_flutter_module目录执行:
flutter clean
- 2、test_flutter_module目录执行:
flutter pub upgrade
- 3、cd到宿主目录执行:
pod install
,(有可能会在pod之前执行pod repo update等
FlutterEngineGroup debug环境 flutter module内存每打开一个很多
这种情况是正常的,原因是debug时,需要加载大量调试的数据,所以造成内存过多。但是在release包时,内存问题会被优化
混合工程release包打出来是白屏
这种情况分两种: 1.一直是白屏 2.第一次不是白屏,后面再进去就白屏
-
第一种情况: 大概率是和你本地ruby版本有关,Ruby导致pod install后,再打包时没有对应的app.framework。后面降级ruby后,问题解决,打包正常。我的电脑是M1的, 出现这种情况,具体解决请参考这个链接# Flutter Library not loaded: @rpath/App.framework/App
-
第二种情况: 因为flutter侧在打开时还没获取到size,解决如下
flutter main.dart
文件中:在打开页面时判断是否有size,没有就等有size再去渲染,
import 'dart:ui';//注意这个要import
@pragma('vm:entry-point')
void test_page() => handleRelesaeWhiteScreen('test_page');
//处理release包白屏问题
void handleRelesaeWhiteScreen(String entryPoint) {
//如果size是0,则设置回调,在回调中runApp
if (window.physicalSize.isEmpty) {
window.onMetricsChanged = () {
//在回调中,size仍然有可能是0
if (!window.physicalSize.isEmpty) {
window.onMetricsChanged = null;
runApp(Main(entryPoint: entryPoint));
}
};
} else {
//如果size非0,则直接runApp
runApp(Main(entryPoint: entryPoint));
}
}
使用navigationController push flutter页面时,导航栏还是iOS原生的
解决
[self.navigationController pushViewController:flutterViewController animated:YES];
//隐藏导航栏
self.navigationController.navigationBarHidden = YES;
原生和flutter之间调试==> flutter attach 无效
xcode 先clean下
,再确认下install_framework "${PODS_ROOT}/../../test_flutter_module/.ios/Flutter/App.framework"
是否填写
第一次打开flutter Module会黑屏一下
- 法一:使用 present的形式打开
- 法二:可以基于
FlutterViewController
类写一个子类,子类vc中viewDidLoad方法里面设置背景色
@interface FlutterBaseViewController: FlutterViewController
end
@implementation FlutterBaseViewController
- (instancetype)initWithEntryPoint:(NSString *)entryPoint {
FlutterEngineGroup *gruop = ((AppDelegate *)UIApplication.sharedApplication.delegate).flutterEngineGroup;
FlutterEngine *engine = [gruop makeEngineWithEntrypoint:entryPoint libraryURI:nil];
[GeneratedPluginRegistrant registerWithRegistry:engine];
self = [super initWithEngine:engine nibName:nil bundle:nil];
if (self) {
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
//设置合适的颜色
self.view.backgroundColor = [UIColor whiteColor];
}