颤动,"The method 'map' can't be unconditionally invoked because the receiver can be 'null'."

Flutter, "The method 'map' can't be unconditionally invoked because the receiver can be 'null'."

当我尝试调用 snapshot.data 上的 .map 方法时出现此错误。我正在使用 SQLite 数据库。

抛出错误的代码如下:

FutureBuilder(
                future: _alarms,
                builder: (context, snapshot)
                {
                  if(snapshot.hasData){
                  return ListView(
                    children: snapshot.data.map<Widget>((alarms) {
                      return Container(

我正在 initState 方法中创建 _alarms 列表:

 @override
  void initState() {
    _alarmHelper.initializeDatabase().then((value) => print('------------dB initialized'));
    _alarms = _alarmHelper.getAlarm();
    super.initState();
  }

.getAlarm() 的定义如下:

 Future<List<AlarmInfo>> getAlarm() async{
    var result;
    var db = await this.database;

      result = await db?.query(tableName);

     result.forEach((element) { 
      var alarmInfo  = AlarmInfo.fromMap(element);
      alarms.add(alarmInfo);
      }
      );

      return alarms;
  }

我也试过加一个?。运算符,但是这 returns 另一个错误是 .map 没有为类型对象定义 children: snapshot.data?.map<Widget>((alarms) {

感谢任何帮助,如果您需要任何进一步的信息,请随时发表评论。

谢谢:)

我认为这是因为您没有为 FutureBuilder 小部件提供类型,因此 snapshot.data 来自类型 Object(而不是您期望的列表)并且map 函数不存在。

应该这样写就可以解决:

FutureBuilder<List<AlarmInfo>>(
   ...
),

此外,由于 data 可能为空(但您使用 snapshot.hasData 检查了它,您必须写:

snapshot.data!.map(...)