使用提供程序包时显示加载微调器等待请求完成

问题描述

我正在使用提供程序包。我想在等待请求完成时显示加载微调器。下面的模式太冗长了。请帮我让它不那么冗长。这是我的代码

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 变量。