【发布时间】:2019-10-18 00:53:28
【问题描述】:
我正在创建一个颤振应用程序并创建了一个页面,该页面从 sqlite 数据库中提取数据并动态加载一个小部件,该小部件在页面加载时显示来自 sqlite db 的数据。由于某种原因,小部件未加载。当我热重新加载应用程序时,它仅在调试模式下加载动态小部件。
这是我的代码:
Users userList = new Users();
List details = new List<Widget>();
var db = new DB_Helper();
_addToUserList(Map<dynamic, dynamic> json)
{
userList.membersList.add(json);
return userList.membersList;
}
List<Widget> getTeamMembers()
{
// Get data from db
db.getMembers().then((data) {
// clear list to prevent repeating if page refreshes
userList.membersList.clear();
details.clear();
for (Members m in data)
{
Map<String, dynamic> json;
json =
{
"member_id": m.memberId,
"member_name": m.memberName,
"member_email": m.memberEmail
};
_addToUserList(json);
}
for (Map<dynamic, dynamic> u in userList.membersList) {
Map<String, dynamic> js = u;
var emailCtrl = new TextEditingController();
var name = js["member_name"];
emailCtrl.text = js["member_email"];
details.add(
new Card(
color: Colors.blue,
margin: EdgeInsets.all(2),
child: ExpansionTile(
title: Text(name),
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Container(
width: 280,
padding: EdgeInsets.all(0),
margin: EdgeInsets.all(0),
child: TextField(
enabled: false,
controller: emailCtrl,
style: TextStyle(color: Colors.purple),
decoration: InputDecoration(
labelText: "EMAIL:",
labelStyle: new TextStyle(color: Colors.black),
border: InputBorder.none,
),
),
),
],
),
),
],
),
],
),
),
);
}
});
return details;
}
我已尝试获取数据并将其存储在 initState() 中的列表中,但页面仍然加载为空白。
我在查询 sqlite 时尝试使用 await,但它在我调用小部件的脚手架主体属性内引发错误。
它唯一正确加载的时间是,当我删除查询数据库的代码并使用值硬编码 userList 而不是从 sqlite 中将其拉出时。查询 sqlite db 似乎阻止了小部件的显示。如何从 sqlite 中提取数据并将其添加到动态小部件以在页面加载时显示?
【问题讨论】: