我没有扩展课程的经验 所以不要感到震惊...这就是我得到的:
我想在模型中扩展的“基本类” 避免每2行重复一次fromJson / toJson
import 'dart:convert';
class BaseModel {
Map<String, dynamic> json2Map(String json) => jsonDecode(json);
String map2Json(Map<String, dynamic> map) => jsonEncode(map);
json2List(String jsonList) {
List<Map<String, dynamic>> _list = [];
jsonDecode(jsonList).forEach((_json) => _list.add(jsonDecode(_json)));
return _list;
}
mapList2Json(List<Map<String,dynamic>> list) {
List<String> jsonList= [];
list.forEach((_map) => jsonList.add(map2Json(_map)));
return jsonEncode(jsonList);
}
}
这是扩展它的类之一:
import 'package:bloc_hub/models/base_model.dart';
class Info extends BaseModel {
final String name;
final String company;
Info({this.name,this.company});
factory Info.fromMap(Map<String, dynamic> json) => new Info(
name: json['name'],
company: json['company'],
);
Map<String, dynamic> toMap() {
var map = new Map<String, dynamic>();
map['name'] = name;
map['company'] = company;
return map;
}
}
(我在streambuilder中,client.info是一个json) 然后...当我尝试调用'json2map' 来自扩展类...
Info info = Info.fromMap(json2Map(client.info));
我明白了:
[dart] The method 'json2Map' isn't defined for the class 'ListPage'. [undefined_method]
我怎么了? 如果我不清楚,请不要问我任何事情
感谢您的帮助
[编辑:奖金问题 mixin与我的工作有何不同?]
答案 0 :(得分:1)
const char* port_name = "\\\\.\\COM4"; // OK
// char* port_name = "\\\\.\\COM4"; // Not OK
是json2Map
的实例方法,因此要调用它,必须使用BaseModel
的实例或扩展它的类(例如BaseModel
) ,例如:
Info
错误消息表明您是从var b = new BaseModel();
b.json2Map(something);
调用它的,因此找不到该方法。
或者,您可以将方法设为静态,并像ListPage
一样调用它(没有实例)。
关于mixins here有一些很好的解释(带有Python示例,但Dart的概念相同)。我想在您的示例中,将mixin与JSON相关功能更有意义,因为您可以在其他类型的对象中使用它们。