网站建设推广是什么,大连高新园区,cos领域wordpress,网站图片自动下载flutter不支持反射#xff0c;所以本来很简单的事情#xff0c;一下子变复杂了。当然官方也提供了一些工具来方便开发者。
由于Dart的map和array的数据结构和json一样#xff0c;所以在flutter中#xff0c;变成了json string与Map#xff0c;array之间的砖换。
#x…flutter不支持反射所以本来很简单的事情一下子变复杂了。当然官方也提供了一些工具来方便开发者。
由于Dart的map和array的数据结构和json一样所以在flutter中变成了json string与Maparray之间的砖换。
1json结构{name:alan,age:18friends:[张三,李四]
} 2将json转为Mapconst MapString, dynamic json2 {name:alan, age: 18, friends: [张三, 李四]};
那么如何在实体类和json之间转换呢 这时就要用到工具了。在pubspec.yaml中添加 build_runner: ^2.0.0json_annotation: ^4.3.0json_serializable: ^6.0.0
还需要用到flutter.bat来运行build_runner。flutter.bat在你安装的flutter sdk下面。 必须添加环境变量 因为flutter.bat一定要在你的工程目录下运行。 运行命令flutter pub run build_runner watch --delete-conflicting-outputs
加了watch可以实时检测变化并且编译。
运行时会出现pub exit with code 64 关掉所有android studio,重新打开就好了。 以下是你手工写的实体类(文件名user_info.dart)。 一定要加构造函数不像java.
另外还要加上part user_info.g.dart; 不然会报错user_info.g.dart must be included as a part directive in the input library with。
import package:json_annotation/json_annotation.dart;
part user_info.g.dart;JsonSerializable()
class UserInfo{JsonKey(name: name)final String name;UserInfo({required this.name});factory UserInfo.fromJson(MapString, dynamic json) _$UserInfoFromJson(json);MapString, dynamic toJson() _$UserInfoToJson(this);
}
实体类写好后再运行上面提到的命令行。就会在相同目录下生成下面的文件// GENERATED CODE - DO NOT MODIFY BY HANDpart of user_info.dart;// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************UserInfo _$UserInfoFromJson(MapString, dynamic json) UserInfo(name: json[name] as String,);MapString, dynamic _$UserInfoToJson(UserInfo instance) String, dynamic{name: instance.name,}; 不知你有没有觉得下面的套路代码写起来很烦。 这个问题我们可以在android studio加一个liveTemplate。 part $File$.g.dart;factory $Name$.fromJson(MapString, dynamic json) _$ $Name$FromJson(json);MapString, dynamic toJson() _$ $Name$ToJson(this); 这样我们只要敲入from就可以自动生成了。我把part部分也加了防止有时候忘记。 毕竟flutter这么搞json很不人性化。