Составление карты будущего в трепетании? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь выполнить некоторую обработку ответа, используя пакет 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 голосов
/ 28 января 2020

У вас странный синтаксис в обратном вызове вашего .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 */ }

...