如何从扩展类中调用方法?

时间:2019-01-08 20:28:58

标签: dart flutter mixins

我没有扩展课程的经验 所以不要感到震惊...这就是我得到的:

我想在模型中扩展的“基本类” 避免每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与我的工作有何不同?]

1 个答案:

答案 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相关功能更有意义,因为您可以在其他类型的对象中使用它们。