我正在尝试更改基于FutureProvider的值,该值在用户按下按钮时触发。onTap
回调函数:
ElevatedButton(
onPressed: () {
final promptResp = ref.watch(
getProvider(
Tuple2(
'/gen-image',
{'prompt': controller.text},
),
),
);
promptResp.when<void>(data: (value) {
ref.read(isLoading.notifier).state = false;
final data = jsonDecode(value.body);
ref.read(imagesProvider.notifier).state = data;
}, error: (e, r) {
return;
}, loading: () {
ref.read(isLoading.notifier).state = true;
});
},
以及服务提供方:
final getProvider = FutureProvider.family(
(ref, Tuple2<String?, Map<String, dynamic>?> info) async {
final path = info.item1;
final params = info.item2;
final url = backendUrl().replace(queryParameters: params, path: path);
final resp = await http.get(url, headers: {
'X-FIREBASE_TOKEN': await ref.read(authProvider).currentUser!.getIdToken()
});
return resp;
});
因此,按下按钮时,loading
回调被调用,但接收数据时,data
回调未被触发。似乎在重建时,onTap
的执行停止。
如何通过按钮触发此回调?
我也使用了AsyncValue.whenData
,但是回调仍然没有被触发
1条答案
按热度按时间mepcadol1#
尝试在回调中使用
ref.read
:不要在回调中使用
ref.watch
,不要在小工具中使用init
方法。