从本地数据库获取数据后出现空错误

时间:2020-05-16 15:15:58

标签: flutter dart sqflite

我的数据库几乎没有个人资料信息,我想在登录后将其加载到我的仪表板中。这是我的仪表板屏幕中的代码。

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),
        ),
      ),
    )

getter'firstname'在null上被调用。接收者:null已尝试 呼叫:名字

在我的控制台和屏幕上将其作为错误获取,显示出类似附件的错误。我知道由于异步,它不会在绘制屏幕之前初始化。但是我不知道如何从数据库中提取和加载我的小部件中的数据。 enter image description here

1 个答案:

答案 0 :(得分:0)

您需要在加载数据时处理窗口小部件的可见性。

  • 从数据库中提取数据后,请执行setState,而不是使用构造函数使用AfterLayout加载数据。
  • 您可以使用软件包screen_loader来显示正在加载数据的加载器。
  • 您需要处理可能的空值

就像您的情况一样,很明显userObject最初将为null,因此,当您使用userObject的属性时,使用的方式如下:userObject?.firstname ?? '-',此处为userObjectfirstname为空,然后返回'-'