键值对处理
前言
经过这个系列的上一篇博客,大家学习到了怎么参数传递,不过现在的参数传递大部分都是用键值对的,那么今天我们就学习一下怎么把参数进行键值对处理。
准备工具
这套课程是采用Android Studio和xcode进行开发的。当前在此之前请准备好Flutter开发环境,我这里就不进行讲解了。
IOS
这篇博客,IOS的部分比较好处理,我就先讲IOS的这端的处理
IOS底层处理
else if([@"sendMessage" isEqualToString:call.method]){
//接受flutter上层传递的参数
NSDictionary* argsMap=call.arguments;
NSString * message=argsMap[@"message"];
NSString * info=argsMap[@"info"];
//对字符串进行拼接
NSString * newMessage=[NSString stringWithFormat:@"%@%@",@"IOS端:",message];
NSString * newInfo=[NSString stringWithFormat:@"%@%@",@"IOS端:",info];
//打印字符串
NSLog(newMessage);
NSLog(newInfo);
//以键值对的形式返回,传回上次
result(@{@"message": message,@"info":@"flutter_info"});
}
Android
Android处理键值对,相对复杂,需要三个类
ConstraintsMap类
public class ConstraintsMap {
private final Map<String, Object> mMap;
public ConstraintsMap(){
mMap = new HashMap<String,Object>();
}
public ConstraintsMap(Map<String, Object> map){
this.mMap = map;
}
public Map<String, Object> toMap() {
return mMap;
}
public boolean hasKey(String name){
return this.mMap.containsKey(name);
}
public boolean isNull(String name){
return mMap.get(name) == null;
}
public boolean getBoolean(String name){
return (boolean) mMap.get(name);
}
public double getDouble(String name){
return (double) mMap.get(name);
}
public int getInt(String name) {
if(getType(name) == ObjectType.String) {
return Integer.parseInt(((String)mMap.get(name)));
}
return (int) mMap.get(name);
}
public String getString(String name){
return (String) mMap.get(name);
}
public ConstraintsMap getMap(String name){
return new ConstraintsMap((Map<String, Object>)mMap.get(name));
}
public ObjectType getType(String name) {
Object value = mMap.get(name);
if (value == null) {
return ObjectType.Null;
} else if (value instanceof Number) {
return ObjectType.Number;
} else if (value instanceof String) {
return ObjectType.String;
} else if (value instanceof Boolean) {
return ObjectType.Boolean;
} else if (value instanceof Map) {
return ObjectType.Map;
} else if (value instanceof ArrayList) {
return ObjectType.Array;
} else {
throw new IllegalArgumentException("Invalid value " + value.toString() + " for key " + name +
"contained in ConstraintsMap");
}
}
public void putBoolean(String key, boolean value) {
mMap.put(key, value);
}
public void putDouble(String key, double value) {
mMap.put(key, value);
}
public void putInt(String key, int value) {
mMap.put(key, value);
}
public void putString(String key, String value) {
mMap.put(key, value);
}
public void putNull(String key) {
mMap.put(key, null);
}
public void putMap(String key, Map<String, Object> value) {
mMap.put(key, value);
}
public void merge(Map<String, Object> value) {
mMap.putAll(value);
}
public void putArray(String key, ArrayList<Object> value) {
mMap.put(key, value);
}
}
ObjectType 枚举值
public enum ObjectType {
Null,
Boolean,
Number,
String,
Map,
Array,
}
FlutterPlugin1Plugin
if(call.method.equals("sendMessage")){
//接受参数
String message=call.argument("message");
String info=call.argument("info");
System.out.println("Java层--->message:"+message);
System.out.println("Java层--->info:"+info);
//键值对处理
ConstraintsMap params=new ConstraintsMap();
params.putString("message",message);
params.putString("info","infoData");
//返回键值对
result.success(params.toMap());
}
Flutter
Flutter调用底层
static Future<String>sendMessage(String message) async {
//这里传递多个参数
final Map<dynamic,dynamic> res = await _channel.invokeMethod('sendMessage',<String,dynamic>{"message":message,"info":'infoDate'});
//接受底层传回来的参数
String res_message=res['message'];
String res_info=res['info'];
print(res_info);
return res_message;
}
flutter布局
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
@override
void initState() {
super.initState();
initPlatformState();
}
Future<void> initPlatformState() async {
String platformVersion;
try {
platformVersion = await FlutterPlugin1.getNative;
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
children: <Widget>[
Text('Running on: $_platformVersion\n'),
RaisedButton(
child: Text(
'参数传递',
style: TextStyle(
fontSize: 28.0
),
),
onPressed: () async{
String message=await FlutterPlugin1.sendMessage('Flutter Plugin');
print("Flutter:"+message);
},
)
],
),
),
),
);
}
}
今天就分享到这里了,希望这篇博客可以给你在flutter插件开发提供帮助。喜欢的朋友关注一下