首页 > 解决方案 > Dart/Flutter//“方法 'toDate' 在 null 上被调用。接收者:null 尝试调用:toDate()”

问题描述

我正在尝试使用 toDate() 将时间戳从 firebase 转换为 DateTime。

return StreamBuilder<List<Contact>>(
      stream:DBService.instance.getUsersInDB(_searchText) ,
        builder: (context, _snapshot){
        var _usersData = _snapshot.data;
      return _snapshot.hasData ? Container(
        height :MediaQuery.of(context).size.height * 0.75,
        child: ListView.builder(
          itemCount: _usersData.length,
          itemBuilder: (BuildContext _context,
              int _index){
            var _userData = _usersData[_index];
           var _currentTime = DateTime.now();
            var _isUserActive = _userData.lastseen.toDate().isBefore(  //ERROR
              _currentTime.subtract(Duration(hours: 1),
              ),
            );
            return ListTile(
              title: Text(_userData.name),
              leading: Container(
                width: 50,
                height: 50,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(100),
                  image: DecorationImage(
                    fit: BoxFit.cover,

我有这个错误;

'以下 NoSuchMethodError 被抛出构建:方法'toDate'在 null 上被调用。Receiver: null 尝试调用:toDate() ' 有谁知道如何解决这个问题?

提前致谢

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


变量 lastseen 为 null 并且您正在尝试对其调用方法。尝试使用 null 感知运算符来保护您免受可能的 null 的影响,例如?.??参见此处

            var _isUserActive = _userData?.lastseen?.toDate()?.isBefore(  
              _currentTime.subtract(Duration(hours: 1),
              ),
 )??false;

通过使用?.我们可以防止您遇到的错误,如果最后一个方法/属性评估为 null ,??我们将分配给值 false。_isUserActive

还要检查您是否toDate()在 UserData 中的此方法内正确转换。


推荐阅读