Как я могу вспомнить будущего провайдера (riverpod) на сборке

У меня есть простая страница, на которой показан продукт, и я пытаюсь использовать riverpod и futureprovider, но будущее называется только при первом посещении страницы?

final productInfo = FutureProvider<Map<String, dynamic>>((ref) async {
  final response =
      await http.get('https://www.api.com/$clickedID');
  final content = json.decode(response.body) as Map<String, dynamic>;
  return content;
});


person william dam    schedule 12.12.2020    source источник


Ответы (2)


Пожалуйста, используйте

final userProvider = StreamProvider<User>(
 final response =
      await http.get('https://www.api.com/$clickedID');
  final content = json.decode(response.body) as Map<String, dynamic>;
  return content;
);

теперь вы можете слушать провайдера, используя watch,

  AsyncValue<User> user = watch(userProvider);
person Abhishek Ghaskata    schedule 12.12.2020
comment
Затем я получаю ошибку типа: Future ‹type› не может быть назначен потоку ‹type› - person william dam; 12.12.2020
comment
используйте конструктор потоков, а не конструктор будущего. - person Abhishek Ghaskata; 12.12.2020
comment
Хорошо, спасибо, это сработает, даже если это не стрим? - person william dam; 14.12.2020
comment
да @williamdam - person Abhishek Ghaskata; 15.12.2020

Нет встроенной функции, но вы можете изменить значение с таким же будущим позже.

recallProductInfoFutureProvider() {
final response = http.get('https://www.api.com/$clickedID');
  final content = json.decode(response.body) as Map<String, dynamic>;
productInfo.overrideWithValue(content)
}

Рассмотрите возможность использования с StreamProvider и просмотра внутри Consumer для обновления пользовательского интерфейса overrideWithValue.

person Luke Stanyer    schedule 10.02.2021