Flutter跳转原生页面 发表于 2019-03-30 | 分类于 Flutter | | 题记 Flutter毕竟刚开始一年,有些功能需要原生来实现。如下主要实现Flutter跳转原生页面 Flutter中写一个类 123456789101112import 'package:flutter/services.dart';//设定唯一标识const MethodChannel _methodChannel = MethodChannel('plugins.flutter.io/goToNative_method');class SkipPluginUtil { static void skipPage() { //设定方法名 _methodChannel.invokeMethod("goNativePage"); }} 调用 1SkipPluginUtil.skipPage(); iOS 123456789101112131415161718192021222324252627- (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 123456789101112131415161718192021222324252627282930313233343536public 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 12345678import 'dart:io';if(Platform.isIOS){//iOS }else if(Platform.isAndroid){ //Android }