Web services 封装每个模型的Web请求

Web services 封装每个模型的Web请求,web-services,flutter,dart,service,encapsulation,Web Services,Flutter,Dart,Service,Encapsulation,我不熟悉Dart and Flatter,我使用的是我在一个博客上找到的Webservice模式,当时看起来很聪明,但随着我在开发过程中的进展,它的限制性似乎超过了它的价值。这里的目标是从服务器获取json,根据获取的模型自动解析并实例化它 为了添加标题和正文,我已经对类进行了扩展,现在我需要获取事件的单个实例,但我无法使用无状态静态all方法发出该请求。我们的目标是拥有一个灵活的封装服务,可以根据模型实现发出请求并解析它们 如果不清楚,我有事件id,现在我想获取单个事件的详细信息 以下是媒体帖

我不熟悉Dart and Flatter,我使用的是我在一个博客上找到的
Webservice
模式,当时看起来很聪明,但随着我在开发过程中的进展,它的限制性似乎超过了它的价值。这里的目标是从服务器获取json,根据获取的
模型自动解析并实例化它

为了添加
标题
正文
,我已经对类进行了扩展,现在我需要获取
事件
的单个实例,但我无法使用无状态静态
all
方法发出该请求。我们的目标是拥有一个灵活的封装服务,可以根据
模型
实现发出请求并解析它们

如果不清楚,我有
事件id
,现在我想获取单个事件的详细信息

以下是媒体帖子:

资源
类:

类资源{
最终字符串url;
弦体;
地图标题;
T函数(响应)解析;
setBody(字符串jsonString){
this.body=jsonString;
}
设置标题(映射标题映射){
this.headers=headerMap;
}
资源({this.url,this.parse});
}
Webservice类:

类Web服务{
地图标题;
弦体;
Webservice({this.headers,this.body});
未来加载(资源)异步{
resource.setHeaders(this.headers);
最终响应=等待http.get(resource.url,headers:resource.headers);
如果(response.statusCode==200){
返回resource.parse(响应);
}否则{
抛出异常('加载数据失败!');
}
}
未来post(资源)异步{
resource.setHeaders(this.headers);
资源主体(本主体);
最终响应=等待http.post(
resource.url,
headers:resource.headers,
body:resource.body,
);
打印(响应状态码);
如果(response.statusCode==200){
返回resource.parse(响应);
}否则{
抛出异常('未能发布到终结点!');
}
}
}
和一项实施:

class Event {
  final String title;
  final int id;

  Event({this.title, this.id});

  factory Event.fromJson(Map<String, dynamic> json) => Event(
        title: json['title'] as String,
        id: json['event_id'] as int,
      );

  static Resource<List<Event>> get all {
    return Resource(
      url: Constants.baseURI + '/events',
      parse: (response) {
        final result = json.decode(response.body);
        Iterable list = result;
        return list.map((model) => Event.fromJson(model)).toList();
      },
    );
  }
类事件{
最后的字符串标题;
最终int id;
事件({this.title,this.id});
工厂事件.fromJson(映射json)=>事件(
title:json['title']作为字符串,
id:json['event_id']作为int,
);
静态资源获取全部{
返回资源(
url:Constants.baseURI+'/events',
解析:(响应){
最终结果=json.decode(response.body);
Iterable列表=结果;
return list.map((model)=>Event.fromJson(model)).toList();
},
);
}
和客户端代码:

映射头={
HttpHeaders.authorizationHeader:this.user.token.token
};
Webservice(headers:headers)。加载(Event.all)。然后((events)=>{
setState(()=>{u events=events})
});

一旦我把问题写出来,答案就相当明显了。尽管我仍然对别人的意见感兴趣/接受
网络服务

基本上,我已经有了一个模型对象,在本例中是一个
事件
。因此,我将该方法设置为非静态,并按原样调用它。在本例中,我正在构建一个新的事件对象,因为我的端点返回了我需要的内容,但您可以看到一个
构建
函数或其他帮助充实它的东西

模型上的非静态
one
功能,这里的关键是
Webservice
现在位于此方法中:

Future one()异步{
等待Web服务()
.装载(
资源(
url:Constants.baseURI+'/event/'+this.id.toString(),
解析:(响应){
最终结果=json.decode(response.body);
返回Event.fromJson(结果);
},
),
)
.然后((事件){
返回事件;
});
}
然后,客户端代码:

this.event.one().then((事件){\*…*\}
鲍勃是你叔叔。
Webservice
保持不变