Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何修复将项目插入AnimatedList(连接到Firebase数据库)期间的rangeError_Flutter_Dart_Google Cloud Firestore_Flutter Animatedlist - Fatal编程技术网

Flutter 如何修复将项目插入AnimatedList(连接到Firebase数据库)期间的rangeError

Flutter 如何修复将项目插入AnimatedList(连接到Firebase数据库)期间的rangeError,flutter,dart,google-cloud-firestore,flutter-animatedlist,Flutter,Dart,Google Cloud Firestore,Flutter Animatedlist,我将向数据库插入一个文档,并更新一个GlobalKey的AnimatedList的当前状态,以便让它知道添加的新项 但过了一会儿,小部件的重建修复了错误屏幕,我的新项目正常添加 我认为问题在于从数据库获取数据时没有足够的时间进行更新,原因是当我使用此选项时: sleep(常数持续时间(秒:1)); 错误没有出现 此外,我还检查了snapshot.data列表中的项目数和文档数,它们在小部件的构建过程中并不相等,这给了我一个错误,但在重建过程中它们是相等的,重建过程恰好在错误的构建之后开始 删

我将向数据库插入一个文档,并更新一个GlobalKey的AnimatedList的当前状态,以便让它知道添加的新项

但过了一会儿,小部件的重建修复了错误屏幕,我的新项目正常添加

我认为问题在于从数据库获取数据时没有足够的时间进行更新,原因是当我使用此选项时:

sleep(常数持续时间(秒:1));
错误没有出现

此外,我还检查了snapshot.data列表中的项目数和文档数,它们在小部件的构建过程中并不相等,这给了我一个错误,但在重建过程中它们是相等的,重建过程恰好在错误的构建之后开始 删除也一样,但在删除过程中没有错误屏幕

这是我的密码:

导入“包装:颤振/材料.省道”;
导入“包:cloud_firestore/cloud_firestore.dart”;
////////////////////////////////////////////////////////////////////////
///////////////////////名单/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
类项目{
项({this.name,this.icon});
图标;
字符串名;
}
类ListScreen扩展StatefulWidget{
@凌驾
_ListScreenState createState()=>\u ListScreenState();
}
类_ListScreenState扩展状态{
GlobalKey listKey=GlobalKey();
int-id;
bool-isInit=true;
var动画列表;
_附加项(){
Firestore.instance.collection('incrementID')。document('IDINCREMENTATION'))
.setData({'lastID':--id});
设置状态(){
Firestore.instance.collection('items').document('ITEM_$id'))
.setData({'name':'Item$id'});
listKey.currentState.insertItem(0);
//睡眠(持续时间(秒:1));
});
}
_removeItem(int索引、DocumentSnapshot快照){
设置状态(){
Firestore.instance.runTransaction((事务)异步{
等待事务。删除(快照。引用);
});
listKey.currentState.removeItem(
指数
(上下文,动画)=>buildItem(上下文,快照,0,动画),
持续时间:常数持续时间(毫秒:100),
);
});
}
小部件构建项(
BuildContext上下文、DocumentSnapshot文档、int索引、动画){
返回大小转换(
轴:轴垂直,
sizeFactor:动画,
孩子:大小盒子(
孩子:ListTile(
标题:文本(文件['name']),
onTap:(){
_删除项目(索引、文件);
},
),
),
);
}
//获取上次使用的id
getData()异步{
return wait Firestore.instance.collection('incrementID').getDocuments();
}
@凌驾
小部件构建(构建上下文){
getData()。然后((val){
id=int.parse(val.documents[0].data['lastID'].toString());
});
返回脚手架(
主体:方向性(
textDirection:textDirection.ltr,
孩子:StreamBuilder(
流:Firestore.instance.collection('items').snapshots(),
生成器:(上下文,快照){
如果(!snapshot.hasData)返回常量文本('Loading…');
animatedList=新的animatedList(
键:listKey,
initialItemCount:snapshot.data.documents.length,
itemBuilder:(上下文、索引、动画){
返回
构建项(
上下文、快照、数据、文档[索引]、索引、,
动画);
},
);
返回动画列表;
},
)),
浮动操作按钮:浮动操作按钮(
onPressed:\u addItem,
工具提示:“减量”,
子:图标(Icons.add),
),
);
}
}

您可能应该
等待
,然后
插入项()

_addItem() async {
  await Firestore.instance.collection('incrementID').document('IDINCREMENTATION')
      .setData({'lastID':--id});
  await Firestore.instance.collection('items').document('ITEM_$id')
      .setData({'name':'Item $id'});

  setState(() {
    listKey.currentState.insertItem(0);
  });
}