在扑朔迷离中描绘未来?

时间:2020-01-28 18:45:20

标签: flutter dart future

我正在尝试使用Dio flutter软件包进行一些响应处理

我具有以下功能

Future<Map<String, dynamic>> forgotPassword(Map body) => client.dio
  .post('/user/forgotpassword', data: body)
  .then(
      (response) => {
            print('POST /user/forgotpassword $response'),
            response.data as Map<String, dynamic>
          },
      onError: (error) => {
        throw error
        })
  .catchError((error) => client.handleRequestError(error));

我希望它返回一个Future<Map<String, dynamic>>,它是在response.data as Map<String, dynamic>上指定的,但是我从编译器中收到了一个dart(return_of_invalid_type)错误。

A value of type 'Future<Set<void>> can't be returned from method 'forgotPassword' because it has a return type of 'Future<Map<String, dynamic>>'.

将Future的值映射到Map(或其他任何类)的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

.then的回调中,您有一些奇怪的语法。如果您放弃=>表示法,则说明一切正常:

Future<Map<String, dynamic>> forgotPassword(Map body) => client.dio
  .post('/user/forgotpassword', data: body)
  .then(
      (response) {
            print('POST /user/forgotpassword $response'),
            response.data as Map<String, dynamic>
          },
      onError: (error) => {
        throw error
        })
  .catchError((error) => client.handleRequestError(error));

仅对单行语句使用=>,因为它返回语句的结果。您看到Future<Set<void>>的返回类型的原因是因为您通过执行Set

创建了(response) => { /* this is treated as a Set */ }