【问题标题】:Getting null error after fetching data from local db从本地数据库获取数据后出现空错误
【发布时间】:2020-09-02 10:41:43
【问题描述】:

我有一个包含少量个人资料信息的数据库,我想在登录后将它们加载到我的仪表板中。这是我在仪表板屏幕中的代码。

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 中提取和加载我的小部件中的数据。

【问题讨论】:

    标签: flutter dart sqflite


    【解决方案1】:

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

    • 不要使用构造函数使用AfterLayout 来加载数据,一旦从数据库中获取数据,请执行setState
    • 您可以使用包screen_loader在加载数据时显示加载器。
    • 您需要处理可能的空值

    就像你的情况一样,很明显userObject最初将为空,所以当你使用userObject的属性时,使用如下:userObject?.firstname ?? '-',如果userObjectfirstname为空,则返回'-'

    【讨论】:

    • 实际上,一旦从本地数据库中提取数据,我想重新加载屏幕,我没有任何线索来识别何时加载数据,因为使用 Future
    猜你喜欢
    • 2020-09-15
    • 2019-11-12
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多