Flutter,如何在setState下调用异步函数(api请求)
Flutter, how to call async function (api request) under setState
我想在 setState 中调用异步 api 请求,但是当我使 setState 异步时,它无法正常工作。否则,我无法等待回复。我在控制器中的请求:
void fetchList() async {
isLoading(true);
try {
var _list = await Requests.getYesillemeList();
if (_list != null) {
yList.value = _list;
}
} finally {
reOrderList();
isLoading(false);
}
}
如果我在 setState 中调用 controller.fetchList(),即使它正在等待 fetchList 函数中的响应,我也无法获得响应。当我使 setState 异步、使 fetchList Future 无效并在 setState 中等待 controller.fetchList 时,我得到响应,但其余代码无法正常工作。那么,如何在 setState 中调用我的 api 请求并等待响应。
如果您正在使用 Getx,您可以使用 GetX reactive widgets/methods
示例:
控制器
class MyClass extends GetxController{
Rx<MyModel> yList = <MyModel>[].obs;
RxBool isLoading = false;
void fetchList() async {
isLoading(true);
try {
var _list = await Requests.getYesillemeList();
if (_list != null) {
yList.value = _list;
}
} finally {
reOrderList();
isLoading(false);
}
}
}
Widget/Page
class DashboardPage extends GetView<MyClass>{
@override
Widget build(BuildContext context) {
controller.fetchList();
return Obx(() => Text("${controller.yList.length}"));
}
}
我想在 setState 中调用异步 api 请求,但是当我使 setState 异步时,它无法正常工作。否则,我无法等待回复。我在控制器中的请求:
void fetchList() async {
isLoading(true);
try {
var _list = await Requests.getYesillemeList();
if (_list != null) {
yList.value = _list;
}
} finally {
reOrderList();
isLoading(false);
}
}
如果我在 setState 中调用 controller.fetchList(),即使它正在等待 fetchList 函数中的响应,我也无法获得响应。当我使 setState 异步、使 fetchList Future 无效并在 setState 中等待 controller.fetchList 时,我得到响应,但其余代码无法正常工作。那么,如何在 setState 中调用我的 api 请求并等待响应。
如果您正在使用 Getx,您可以使用 GetX reactive widgets/methods
示例:
控制器
class MyClass extends GetxController{
Rx<MyModel> yList = <MyModel>[].obs;
RxBool isLoading = false;
void fetchList() async {
isLoading(true);
try {
var _list = await Requests.getYesillemeList();
if (_list != null) {
yList.value = _list;
}
} finally {
reOrderList();
isLoading(false);
}
}
}
Widget/Page
class DashboardPage extends GetView<MyClass>{
@override
Widget build(BuildContext context) {
controller.fetchList();
return Obx(() => Text("${controller.yList.length}"));
}
}