我有一个数据库与一些个人资料信息,我想加载他们在我的 Jmeter 板登录后。这里是我的代码在我的 Jmeter 板屏幕。
class __DashboardPageState extends State<_DashboardPage> {
UserClass userObject;
var db;
__DashboardPageState(){
getUserObj();
}
void getUserObj() async{
db = new DatabaseHelper();
userObject = await db.fetchUsers();
}
//-----------------
@override
Widget build(BuildContext context) {
getUserObj();
Container(
padding: const EdgeInsets.only(bottom: 8),
child: new Text(
"Welcome Back, "+ userObject.firstname,
style: TextStyle(
fontFamily: "Yorkten_ConMed",
fontSize: 14,
color: Color(0xffffffff),
),
),
)
对null调用了getter "firstname"。接收方:空尝试呼叫:名
在我的控制台和屏幕中获取此错误显示错误,如附件。我知道由于异步,它在屏幕绘制之前没有初始化。但我不知道如何从数据库中拉取和加载我的小部件中的数据。
2条答案
按热度按时间sgtfey8w1#
您需要在加载数据时处理小部件的可见性。
setState
。很明显,
userObject
最初将为null,因此当您使用userObject
的属性时,请按如下方式使用:userObject?.firstname ?? '-'
,此处如果userObject
或firstname
为空,则返回'-'
zkure5ic2#
我建议你使用FutureBuilder而不是StatefulWidget页面,这样你就可以只重新加载发生变化的项目,这样做可以保存一些资源,也可以修复你的问题。在将来使用数据库调用
db.fetchUsers()
,并使用如下代码:您可以稍后在
snapshot.hasData
时验证此数据是否为空,并像snapshot.data.firstname ?? 'No name'
一样做出相应的React