我需要澄清一下,我创建了一个包含 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
然后调用fetchTransactions
在initState
功能。
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/