我使用 Either 通过 REST API 获取数据,如下所示:
Future<Either<ResponseError, List<ResponseApi>>> getApi() async {
...
if (ERROR) {
return Left(ERROR);
else {
return Right(RESPONSE);
}
然后我想获取如下数据:
FutureBuilder _getPhonebooks() {
return FutureBuilder<Either<ResponseError, List<ResponsePhonebook>>>(
future: RequestGetPhonebook().getPhonebooks(),
builder: (
BuildContext context, AsyncSnapshot<Either<ResponseError, List<ResponsePhonebook>>> snapshot) {
if (snapshot.hasData) {
return _cerateData(snapshot.data);
}
else {
...
}
然后我在 _createData() 中进行如下操作:
Widget _cerateData(Either<ResponseError, List<ResponseApi>> data) {
return data.fold((l) {
return Text(l.error + '\n' + l.errorDescription);
}, (r) {
return ListView.builder(
itemCount: r.length,
itemBuilder: (context, index) {
return _tile(r[index].lastName + r[index].firstName, r[index].reading, Icons.work);
});
});
}