flutter - 从本地数据库获取数据后出现空错误
问题描述
我有一个几乎没有个人资料信息的数据库,我想在登录后将它们加载到我的仪表板中。这是我的仪表板屏幕中的代码。
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'。接收者:空尝试呼叫:名字
在我的控制台和屏幕中将此作为错误显示为附加错误。我知道由于异步它在屏幕被绘制之前没有被初始化。但除此之外,我不知道如何从 db 中提取和加载我的小部件中的数据。
解决方案
您需要在加载数据时处理小部件的可见性。
- 代替构造函数使用AfterLayout来加载数据,一旦从 DB 中获取数据,执行
setState
. - 您可以使用包screen_loader在加载数据时显示加载器。
- 您需要处理可能的空值
就像你的情况一样,很明显userObject
最初会是 null 所以当你使用userObject
's 的属性时,像这样使用: userObject?.firstname ?? '-'
,如果或者userObject
或者firstname
是 null 然后返回'-'
推荐阅读
- css - 除了 :hover 还有其他方法可以更改字体颜色吗
- java - 这个自定义的“寻路”算法有什么问题?
- service - Kubernetes:我什么时候必须使用 ingress + ClusterIP 选择上述负载均衡器类型的服务?
- scala - 如何使用 spark scala 解析具有键值对的 XML 节点
- android - 自定义视图上的弹跳球 - Android
- c - 将二维结构数组传递给函数时如何访问它的所有成员?
- node.js - 如何按 ID node.js 过滤猫鼬集合
- excel - 对范围进行排序时需要对象
- java - 如何在特定时间将 WorkManager OneTimeWorkRequest 入队
- vba - 如何通过退出嵌套循环来处理错误?