flutter項目,使用flutter_webview_plugin有顯示不完等問題--通過原生WKWebView解決(flutter項目里顯示ios頁面)

先提供demo,目錄如下圖

主要步驟(下面會具體介紹)

一、首先讓flutter項目可以顯示ios控件

flutter提供了一個AndroidView(android),UiKitView(ios)的控件,來實現(xiàn)原生顯示在flutter上
1、ios端 info.plist文件設置;
2、ios端 FlutterPlatformView代理方法- (UIView*)view;提供原生view;
3、 ios 端 FlutterPlatformViewFactory代理方法

- (NSObject<FlutterPlatformView>*)createWithFrame:(CGRect)frame
                                   viewIdentifier:(int64_t)viewId
                                        arguments:(id _Nullable)args;

生成FlutterPlatformView
4、 ios 端FlutterPlugin代理方法

+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar;

注冊原生view
5、 flutter 通過UiKitView嵌入 原生view

二、ios頁面里封裝WKWebView

具體介紹:

1、ios端 info.plist文件設置:io.flutter.embedded_views_preview為yes

2、ios端 FlutterPlatformView代理方法- (UIView*)view;提供原生view;

3、 ios 端 FlutterPlatformViewFactory代理方法生成FlutterPlatformView

4、 ios 端FlutterPlugin代理方法注冊原生view

5、 flutter 通過UiKitView嵌入 原生view

封裝wkwebview,就屬于原生的了,怎么寫就很簡單了

我這里只簡單顯示了下

//
//  WGFlutterIosWebView.m
//  Runner
//
//  Created by wanggang on 2019/8/19.
//  Copyright ? 2019 The Chromium Authors. All rights reserved.
//

#import "WGFlutterIosWebView.h"
#import <WebKit/WebKit.h>


@interface WGFlutterIosWebView()<WKNavigationDelegate,WKUIDelegate>

//WGFlutterIosWebView 創(chuàng)建后的標識
@property (nonatomic, assign) NSInteger viewId;
@property (nonatomic, strong) WKWebView *wkWebView;

@end


@implementation WGFlutterIosWebView

-(instancetype)initWithWithFrame:(CGRect)frame
                  viewIdentifier:(NSInteger)viewId
                       arguments:(id _Nullable)args
                 binaryMessenger:(NSObject<FlutterBinaryMessenger>*)messenger{
    
    self = [super init];
    if (self) {
        if (frame.size.width==0) {
            frame=CGRectMake(frame.origin.x, frame.origin.y, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height);
        }
        
        self.wkWebView =  [[WKWebView alloc] initWithFrame:frame];
        _wkWebView.navigationDelegate = self;
        _wkWebView.UIDelegate = self;
        
        //接收 初始化參數(shù)
        NSDictionary *dic = args;
        NSString *content = dic[@"content"];
        if (content!=nil) {
            [_wkWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:content]]];
        }
        
        _viewId = viewId;
    }
    return self;
}

- (nonnull UIView *)view {
    return self.wkWebView;
}
@end
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。