Flutter跳转原生页面

题记

Flutter毕竟刚开始一年,有些功能需要原生来实现。如下主要实现Flutter跳转原生页面

Flutter中写一个类

1
2
3
4
5
6
7
8
9
10
11
12
import 'package:flutter/services.dart';
//设定唯一标识
const MethodChannel _methodChannel =
MethodChannel('plugins.flutter.io/goToNative_method');
class SkipPluginUtil {
static void skipPage() {
//设定方法名
_methodChannel.invokeMethod("goNativePage");
}
}

调用

1
SkipPluginUtil.skipPage();

iOS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
FlutterViewController *controller = (FlutterViewController *)self.window.rootViewController;
//取到唯一标识
FlutterMethodChannel *channel = [FlutterMethodChannel methodChannelWithName:@"plugins.flutter.io/goToNative_method" binaryMessenger:controller];
[channel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult _Nonnull result) {
//寻找对应的方法名
if ([call.method isEqualToString:@"goNativePage"]) {
[controller presentViewController:[FirstViewController new] animated:YES completion:nil];
}else{
NSLog(@"%@",[FlutterError errorWithCode:@"-1" message:@"" details:@""]);
}
}];
[GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

Android

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class SkipPlugin implements MethodChannel.MethodCallHandler {
private Activity activity;
//取到唯一标识
private static final String CHANNEL_METHED = "plugins.flutter.io/goToNative_method";
private SkipPlugin(Activity context) {
activity = context;
}
static void registerWith(PluginRegistry.Registrar registrar) {
MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL_METHED);
SkipPlugin skipPlugin = new SkipPlugin(registrar.activity());
channel.setMethodCallHandler(skipPlugin);
}
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
try {
switch (methodCall.method) {
//找到对应方法
case "goNativePage": {
activity.startActivity(new Intent(activity, Main2Activity.class));
break;
}
}
} catch (Exception e) {
result.error("IOException encountered", methodCall.method, e);
}
}
}

额外篇判断iOS还是Android

1
2
3
4
5
6
7
8
import 'dart:io';
if(Platform.isIOS){//iOS
}else if(Platform.isAndroid){ //Android
}