【发布时间】:2022-01-04 16:14:33
【问题描述】:
我正在尝试使用 uri 中的查询参数获取数据
uri = uri.replace(queryParameters: {'with': 'nutrition;restaurant;category;extras;extraGroups;options;optionGroups;foodReviews;foodReviews.user'})
但是,当我从 uri 中同时删除选项和选项组时,它可以正常工作,没有错误。它们在数据库中的存储方式或它们的 api 控制器中的存储方式没有什么不同。
我知道这绝对是我的疏忽,但我想不起来并且需要一些关于我错过或做错了什么会导致该错误的想法。
完整代码如下:
Future<Stream<Food>> getFood(String foodId) async {
Uri uri = Helper.getUri('api/foods/$foodId');
uri = uri.replace(queryParameters: {'with': 'nutrition;restaurant;category;extras;extraGroups;foodReviews;foodReviews.user'});
try {
final client = new http.Client();
final streamedRest = await client.send(http.Request('get', uri));
log( streamedRest.stream.toString() );
return streamedRest.stream.transform(utf8.decoder).transform(json.decoder).map((data) => Helper.getData(data)).map((data) {
return Food.fromJSON(data);
});
} catch (e) {
print(CustomTrace(StackTrace.current, message: uri.toString()).toString());
return new Stream.value(new Food.fromJSON({}));
}
}
这是模型:
import '../helpers/custom_trace.dart';
class OptionGroup {
String id;
String name;
OptionGroup();
OptionGroup.fromJSON(Map<String, dynamic> jsonMap) {
try {
id = jsonMap['id'].toString();
name = jsonMap['name'];
} catch (e) {
id = '';
name = '';
print(CustomTrace(StackTrace.current, message: e));
}
}
Map toMap() {
var map = new Map<String, dynamic>();
map["id"] = id;
map["name"] = name;
return map;
}
@override
String toString() {
return this.toMap().toString();
}
@override
bool operator ==(dynamic other) {
return other.id == this.id;
}
@override
int get hashCode => this.id.hashCode;
}
【问题讨论】: