首页 > 解决方案 > 不使用 FutureBuilder 检索数据

问题描述

我想在不使用 FutureBuilder 方法的情况下检索我的数据

这是我的方法:

Future<bool> fetchJointures(http.Client client) async {
  final response = ('{"isInteresses": false}');

  return compute(parseJointures, response.body);
}

bool parseJointures(String responseBody) {
     final jsonParsed = json.decode(responseBody);
  return jsonParsed['isInteresses'];
}

以及此示例如何:https ://flutter.io/docs/cookbook/networking/background-parsing显示数据:

 FutureBuilder<bool>(
       future: fetchJointures(http.Client()),
       builder: (context, snapshot) {
         if (snapshot.hasError) print(snapshot.error);

      return A_Widget(data : snapshot.data);
    },
  );

我想检索我的数据并将其存储在这样的 var 中:

布尔数据=快照。数据;

最后,我搜索如何检索我的数据并将其存储在 var 而不是小部件的参数中。

标签: dartflutter

解决方案


您遇到的问题是由于您可能没有为您的应用程序设置架构,因此您的状态、业务逻辑和 ui 代码被混合到一个地方。

您想要做的是能够独立于将数据绑定到 FutureBuilder 来请求数据(我最近做了同样的事情)。您需要首先将所有操作逻辑与 UI 分离,因此您需要某种架构。它们有很多,但我发现最有用的两个是:

  1. 范围模型。对于一个体面的范围模型教程看看这个

  2. Redux(在你目前的情况下矫枉过正)

例如,这是我的 notices_model 文件中的一个函数。

Future fetchNotices() async {
 if (_notices == null || _notices.length == 0) {
  _notices = await _mobileApi.getNotices();
  notifyListeners();
 }
}

您看到的 _notices 有一个 List 类型的局部变量,我通过属性公开。所以简而言之。

  1. 设置一个架构,将您的视图逻辑与您的操作/业务逻辑分开

  2. 绑定到视图逻辑中的属性并正常执行操作。

还可以在他们的 github 上查看FlutterSamples的架构和示例


推荐阅读