api - 在 flutter 中同时获取数据

标签 api flutter dart

我需要澄清一下,我创建了一个包含 asyn 的带有 sharepreferrence 的函数,并且在这个相同的函数中我试图从服务器获取数据,并且我使用 FutureBuilder 来显示输出 但我观察到数据一直在同时获取,
这可能是什么问题。这是代码

我的数据获取函数

List<TransactionsModel> parseTransactons (String responseBody) {
  Map data = json.decode(responseBody);
  var output = data['transactions']; //returns a List of Maps
  final castingtoMAP =  output.cast<Map<String, dynamic>>();
  return castingtoMAP.map<TransactionsModel>((json) => 
    TransactionsModel.fromJson(json)).toList();
}

Future<List<TransactionsModel>> fetchTransactions(http.Client client)  async {
  final SharedPreferences prefs = await 
  SharedPreferences.getInstance();
  String email = prefs.getString('Email');
  String session = prefs.getString('session');

  var map = new Map<String, String>();
  map["email"] = email;
  map["sesscode"] = session;

  var response = await http.post(new API().Transaction, body: map);
  print('*********Response from Transaction API***** $response');
  return parseTransactons(response.body); 
} 

显示数据

FutureBuilder<List<TransactionsModel>>(
  future: fetchTransactions(http.Client()),
  builder: (context, snapshot) {
    if (snapshot.hasError)
       return MyFunctions().showToast(snapshot.error);
    return snapshot.hasData
      ? TransactionCardWidget(snapshot.data)
      : Center(child: CircularProgressIndicator());
  },
),

最佳答案

如果您的小部件是 Stateless或者是 Stateful你调用setState Future<List<TransactionsModel>> 的新实例正在通过调用 fetchTransactions 创建,从而提出新的要求。您需要保存 Future该函数在 State 中返回的 StatefulWidget然后调用fetchTransactionsinitState功能。

class .... extends State<..> {
    Future<List<TransactionsModel>> transactionsFuture;

    void initState() {
        transactionsFuture = fetchTransactions(http.Client());
    }

    Widget build(BuildContext context){
        ...
        FutureBuilder<List<TransactionsModel>>(
            future: transactionsFuture,
            builder: (context, snapshot) {
        ...
    }
}

关于api - 在 flutter 中同时获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56988559/

相关文章:

dart - 如何防止 RenderBox 覆盖其他小部件?

mysql - flutter:我怎样才能收到与mysql数据库相同的值?

android - 在 Flutter 中如何使 PageView 滚动得更快?动画似乎很慢,内部 ListView 无法响应我的垂直手势

dart - 按下一个 MaterialButton 时更改一个 MaterialButton 的颜色?

dart - 扩展PaperDialog并通过Dart调用toggle()

api - "private language WTF"与糟糕的库/API/DSL 设计有何区别?

c++ - 获取窗口控件的API方法

javascript - 我想通过从网站获取 API 来直接显示 map ,而不使用任何 JS 库

api - 有没有办法将自定义道路(例如越野路线)添加到谷歌地图,然后获取使用它们的路线?

android - 应用程序运行时屏幕顶部显示带有应用程序标题的标签