Flutter 与 Android iOS 原生的通信有以下四种方式:
BasicMessageChannel 实现 Flutter 与 原生(Android 、iOS)双向通信
(转载https://blog.csdn.net/zl18603543572/article/details/96043692)
MethodChannel 实现 Flutter 与 原生原生(Android 、iOS)双向通信
EventChannel 实现 原生原生(Android 、iOS)向Flutter 发送消息(上文已经介绍过)
route传参方式(本文主要介绍这种)
回归主题,我们来实现最基本的原生跳转Flutter传值问题,安卓和IOS通用。以下列举IOS的代码与Flutter的代码
原生OC代码:
FlutterViewController* flutterViewController = [[FlutterViewController alloc] initWithProject:nil nibName:nil bundle:nil];
flutterViewController.modalPresentationStyle = UIModalPresentationFullScreen;
[flutterViewController setInitialRoute:@"page?{\"id\":\"123\"}"];
[self presentViewController:flutterViewController animated:YES completion:nil];
page是Flutter的dart页面,传id=123的参数给flutter,这个地方也可以写成 NSString *str = [NSString stringWithFormat:@"page?%@",AAA];(AAA是IDdic的json字符串。 NSDictionary*IDdic =@{@"id":@"123"};字典转json字符串的代码我就不贴了)
FLutter代码(main.dart):
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'page.dart';
void main() {
SystemUiOverlayStyle systemUiOverlayStyle =SystemUiOverlayStyle(statusBarColor:Colors.transparent);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
runApp(MaterialApp(
home: _widgetRoute(window.defaultRouteName,),
));
}
Widget _Route(String params){
//解析路由参数
String pageName =Util.getPageName(params);
Map< String,dynamic> pageParams =Util.getNativeParams(params);
print(pageName+'名字');
print(pageParams.toString()+'参数');
//跳转页面
switch(pageName){
case 'page':
return pageHome(mapParam:pageParams,);
case 'XXX':
return xxxPage(mapParam:pageParams,);
default:
return null;
}
}
其中的Util.dart文件为
import 'package:flutter/services.dart';
import 'dart:convert';
class Util {
///路由参数
static getPageName(String route){
String pageName =route;
if (route.indexOf("?") != -1)
//截取
pageName =route.substring(0,route.indexOf("?"));
return pageName;
}
///参数
static parseNativeParams(String route){
MapnativeParams = {};
if(route.indexOf("?") != -1){
nativeParams =json.decode(route.substring(route.indexOf("?") +1));
}
return nativeParams;
// return nativeParams['pageParams'] ?? "{}";
}
}
最后跳转过去的页面里面
class pageHome extends StatefulWidget {
MapmapParam;
pageHome({this.mapParam});
@override
_State createState() =>_State();
}
class _State extends State<pageHome> with WidgetsBindingObserver {....后面就不写了