前言
近期調(diào)接口加密,iOS原生已經(jīng)調(diào)通的情況下,直接把iOS里的Objective-C代碼拷貝到flutter的插件包里調(diào)用,居然花了我3天時(shí)間,遇到的問(wèn)題基本上都很無(wú)理頭的情況,比如本來(lái)需要傳輸json字符串,結(jié)果直接傳了toString()字符串,另外一個(gè)就是過(guò)度為了追求代碼的復(fù)用,導(dǎo)致判斷邏輯過(guò)于復(fù)雜,不利于查找bug,以后寫代碼盡量功能分離,不要為了追求代碼的復(fù)用而犧牲代碼的可讀性,功能模塊化
遇到的問(wèn)題1:
使用
toString()方法能將對(duì)象轉(zhuǎn)換成字符串,但是會(huì)丟失引號(hào)等信息,不再是標(biāo)準(zhǔn)JSON,導(dǎo)致服務(wù)端解析不正常
json轉(zhuǎn)換為字符串
import 'dart:convert' as convert;
/// json轉(zhuǎn)換為字符串
void testJson2String(){
var user = { "name": "John Smith", "email": "john@example.com"};
String jsonString = convert.jsonEncode(user);
String normalString2 = user.toString();
print('打印對(duì)象: $user');
print('打印toString: $normalString2');
print('打印JSON: $jsonString');
var nameList = ["小明","韓梅梅","李華"];
String normalNameString = nameList.toString();
String josnNameString = convert.jsonEncode(nameList);
print(nameList);
print(normalNameString);
print(josnNameString);
}
打印結(jié)果
打印對(duì)象: {name: John Smith, email: john@example.com}
打印toString: {name: John Smith, email: john@example.com}
打印JSON: {"name":"John Smith","email":"john@example.com"}
[小明, 韓梅梅, 李華]
[小明, 韓梅梅, 李華]
["小明","韓梅梅","李華"]
字符串轉(zhuǎn)json
/// 字符串轉(zhuǎn)json
void testString2Json(){
var jsonTxt1 = '{ "name": "John Smith", "email": "john@example.com"}';
Map<String, dynamic> user = convert.jsonDecode(jsonString1);
var jsonTxt2 = '["小明","韓梅梅","李華"]';
List nameList = convert.jsonDecode(jsonTxt2);
}