【发布时间】:2019-11-09 04:48:51
【问题描述】:
我无法在列表视图中查看 json。这可能是返回类型的问题。我返回的列表即“用户”不返回任何数据,因此当我在 FutureBuilder 小部件中调用该函数时,我得到 null。
OdooResponse result;
List<Saleslist> users = [];
Future<List<Saleslist>> _getOrders() async {
var client = OdooClient("http://192.168.1.108:8050");
final domain = [
// ["sale_ok", "!=", false]
];
var fields = ["id", "name"];
// var fields = ["id", "name", "confirmation_date"];
client
.authenticate("admin", "admin", "flutterodoo11")
.then((AuthenticateCallback auth) async {
if (auth.isSuccess) {
final user = auth.getUser();
print("Hey ${user.name}");
} else {
// login fail
print("Login failed");
}
client
.searchRead("sale.order", domain, fields)
.then((OdooResponse result) {
if (!result.hasError()) {
print("Succesful");
var response = result.getResult();
var encoded = json.encode(response['records']);
data = encoded;
var convertDataToJson = json.decode(encoded);
data = convertDataToJson;
print(data);
for (var u in data) {
print(u);
Saleslist user = Saleslist(u["name"], u["id"]);
users.add(user);
}
} else {
print(result.getError());
}
print(users.length);
});
});
return users;
}
这是 Future Builder 的代码
child: FutureBuilder(
future: _getOrders(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.data == null) {
print(data);
return Container(
child: Center(
child: CircularProgressIndicator(),
));
} else {
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: snapshot.data.length,
itemBuilder: (context, int index) {
return ListTile(
title: Text(snapshot.data.name),
);
});
}
// }
}),
),
这是我从 odoo_api 得到的 json
[{id: 1, name: SO001}, {id: 2, name: SO002}, {id: 3, name: SO003}, {id: 5, name: SO005}, {id: 4, name: SO004}, {id: 7, name: SO007}, {id: 9, name: SO008}, {id: 10, name: SO009}, {id: 6, name: SO006}, {id: 8, name: Test/001}, {id: 11, name: SO010}, {id: 12, name: SO011}, {id: 13, name: SO012}, {id: 14, name: SO013}, {id: 15, name: SO014}, {id: 16, name: SO015}, {id: 17, name: SO016}, {id: 18, name: SO017}, {id: 19, name: SO018}, {id: 20, name: SO019}]
编辑:
现在我收到“引发了另一个异常:类型 'List' 不是类型 'String' 的子类型”错误...我添加了 await 方法,但 FutureBuilder 小部件是相同的。
var client = OdooClient("http://192.168.1.34:8050");
List<Saleslist> users = [];
var data;
OdooResponse result;
Future<List<Saleslist>> _getOrders() async {
final domain = [
// ["sale_ok", "!=", false]
];
var fields = ["id", "name"];
// var fields = ["id", "name", "confirmation_date"];
await client
.authenticate("admin", "admin", "flutterodoo11")
.then((AuthenticateCallback auth) async {
if (auth.isSuccess) {
final user = auth.getUser();
print("Hey ${user.name}");
} else {
// login fail
print("Login failed");
}
await client
.searchRead("sale.order", domain, fields)
.then((OdooResponse result) {
if (!result.hasError()) {
print("Succesful");
var response = result.getResult();
var encoded = json.encode(response['records']);
// data = json.encode(encoded);
data = json.decode(encoded);
print(data);
for (var u in data) {
// print(u);
Saleslist user = Saleslist(u["name"], u["id"]);
users.add(user);
}
} else {
print(result.getError());
}
});
});
print(users.length);
return (users);
}
【问题讨论】:
-
在
_getOrders方法中使用await会更容易(而不是两个then方法) -
我是 Flutter 新手。我不确定如何在我的代码中实现 await。你能再解释一下吗?谢谢。
-
您能否发布一个 sn-p 以将 then 更改为 await。它仍然不适合我。
-
可能是我应该在哪里使用 await 的语法。我上面发布的代码差不多就是这样。其余的是进口和脚手架零件。