2

我使用 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);
      });
  });
}
4

0 回答 0