【发布时间】:2019-11-21 03:14:19
【问题描述】:
我需要对此进行澄清,我创建了一个包含 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());
},
),
【问题讨论】:
-
您能否解释一下“数据不断同时获取”的含义?
-
@Martyns 数据不断获取和获取,即我使用它来检查 print('*********Response from Transaction API***** $response');但是这条线不断重复,它使应用程序冻结。
-
你使用的是StatefulWidget还是StatelessWidget?
-
@EsenMehmet。我正在使用 StateFulWidget。
-
@Harbdollar 这就是问题所在。使用变量 assign 或使用 StatelessWidget 在 initState 中执行 future。