问题描述
我正在使用提供程序包。我想在等待请求完成时显示加载微调器。下面的模式太冗长了。请帮我让它不那么冗长。这是我的代码
class APIService with ChangeNotifier {
// Check for working API backend
bool isWorking = false;
bool isLoading = false;
set _isLoading(bool value) {
isLoading = value; <--
notifyListeners();
}
Future<bool> selectAPI(String input) async {
_isLoading = true; <-- 1
final uri = Uri.tryParse('https://$input$url')!;
final response = await http.get(uri);
if (response.statusCode == 200) {
final body = jsonDecode(response.body) as Map<String,dynamic>;
bool isTrue = body['info']['title'] == 'SamFetch';
_isLoading = false; <-- 2
notifyListeners();
return isWorking = isTrue;
}
_isLoading = false; <-- 3
throw response;
}
}
IconButton(
icon: apiService.isLoading
? CircularProgressIndicator()
: Icon(Icons.done),onpressed: () async {
await addAPI(apiService,cache);
}),}
下面是 addAPI() 方法
Future<void> addAPI(APIService apiService,Cache cache) async {
if (api != null) {
try {
await apiService.selectAPI(api!);
if (apiService.isWorking) {
await cache.saveAppName(api!);
}
} on SocketException catch (e) {
print(e);
} catch (e) {
await cache.clearCache();
}
}
}
setState
是最终解决方案吗?
解决方法
您可以使用 Future Builder 并在 value
属性中设置您的 Future 函数。您可以根据功能的状态控制可见小部件。所以你不必使用 future
变量。