flutter页面闪烁问题修改

我们的项目是flutter和Native混合的开发项目,切换tabbar时,发现tabbar上对应的flutter页面会偶尔有页面闪烁现象,包括使用Flutter_boost展示的flutter页面,再pop返回时,也会有闪烁现象。
在FLBFlutterViewContainer的源码中,发现viewDidAppear中有这样的代码:

[BoostMessageChannel didShowPageContainer:^(NSNumber *result) {}
                                           pageName:_name
                                             params:_params
                                           uniqueId:self.uniqueIDString];
//NOTES:务必在show之后再update,否则有闪烁
[self surfaceUpdated:YES];

第一行代码点进去看下,能看出来它就是一个通过MethodChannel去fluter加载页面的,但是这个方法时异步的,就不能保证[self surfaceUpdated:YES];肯定会在show之后才执行了,这也就产生了提示的闪烁问题。

+ (void)didShowPageContainer:(void (^)(NSNumber *))result pageName:(NSString *)pageName params:(NSDictionary *)params uniqueId:(NSString *)uniqueId
 {
     if ([pageName isEqualToString:kIgnoreMessageWithName]) {
         return;
     }
     NSMutableDictionary *tmp = [NSMutableDictionary dictionary];
     if(pageName) tmp[@"pageName"] = pageName;
     if(params) tmp[@"params"] = params;
     if(uniqueId) tmp[@"uniqueId"] = uniqueId;
     [self.methodChannel invokeMethod:@"didShowPageContainer" arguments:tmp result:^(id tTesult) {
         if (result) {
             result(tTesult);
         }
     }];
 }

具体为什么闪烁还搞不明白呢,刚接触flutter水平不够没能力深究,在此记录一下,我的解决办法就是创建一个FLBFlutterViewContainer的分类,进行方法交 换,重写一个方法dd_surfaceUpdated:和原有的方法surfaceUpdated:进行交换,加很短的延时就可以避免这个闪烁问题了,是不是解决所有的闪烁问题不清楚,但是能解决我上面提到的闪烁bug了,时间不能太久,不然flutter页面加载会有明显的空白时间。

-(void)dd_surfaceUpdated:(BOOL)appeared{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.05 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
           [self dd_surfaceUpdated:appeared];
    });
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容