尝试通过流访问子集合时出现 RangeError (RangeError (index): Invalid value: Valid value range isempty: 0)
我试图在 flutter 中创建 2 个下拉菜单,并通过 firebase 流填充。这个想法是,用户可以选择一个类别,然后第二个下拉列表将根据所选类别显示相关的子类别。发生的事情是我不断收到以下信息。我的子类别集合嵌套在我的类别集合
RangeError (RangeError(索引):无效值:有效值范围为空:0)中
static Stream<QuerySnapshot> getCategories() {
return catsRef.orderBy('name', descending: false).snapshots();
}
static Stream<QuerySnapshot> getSubCategories(category) {
return catsRef
.doc(category)
.collection('sub-categories')
.orderBy('name', descending: false)
.snapshots();
}
StreamBuilder<QuerySnapshot>(
stream: DatabaseService.getCategories(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return Container();
if (setDefaultCategory) {
category = snapshot.data.docs[0].get('name');
debugPrint('setDefault category: $category');
}
return DropdownButton(
isExpanded: false,
value: category,
items: snapshot.data.docs.map((value) {
return DropdownMenuItem(
value: value.get('name'),
child: Text('${value.get('name')}'),
);
}).toList(),
onChanged: (value) {
debugPrint('selected onchange: $value');
setState(
() {
debugPrint('category selected: $value');
category = value;
setDefaultCategory = false;
setDefaultMakeModel = true;
},
);
},
);
},
),
Container(
child: category != null
? StreamBuilder<QuerySnapshot>(
stream:
DatabaseService.getSubCategories(category),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
debugPrint(
'snapshot status: ${snapshot.error}');
return Container(
child: Text(
'snapshot empty category: $category sub-category: $subCategory'),
);
}
if (setDefaultMakeModel) {
subCategory =
snapshot.data.docs[0].get('name');
debugPrint('setDefault subCat: $subCategory');
}
return DropdownButton(
isExpanded: false,
value: subCategory,
items: snapshot.data.docs.map((value) {
debugPrint('subCat: ${value.get('name')}');
return DropdownMenuItem(
value: value.get('name'),
child: Text(
'${value.get('name')}',
overflow: TextOverflow.ellipsis,
),
);
}).toList(),
onChanged: (value) {
debugPrint('subCat selected: $value');
setState(
() {
// Selected value will be stored
subCategory = value;
// Default dropdown value won't be displayed anymore
setDefaultMakeModel = false;
},
);
},
);
},
)
: Container(
child:
Text('cat: $category subcat: $subCategory'),
),
),
I am trying to essentially create 2 dropdown within flutter that are populated via firebase streams. The idea is that a user can choose a category and the second dropdown will then show relevant sub categories based on the selected category. What happens is that I keep getting the following. My subcategories collection is nested within my categories collection
RangeError (RangeError (index): Invalid value: Valid value range is empty: 0)
static Stream<QuerySnapshot> getCategories() {
return catsRef.orderBy('name', descending: false).snapshots();
}
static Stream<QuerySnapshot> getSubCategories(category) {
return catsRef
.doc(category)
.collection('sub-categories')
.orderBy('name', descending: false)
.snapshots();
}
StreamBuilder<QuerySnapshot>(
stream: DatabaseService.getCategories(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return Container();
if (setDefaultCategory) {
category = snapshot.data.docs[0].get('name');
debugPrint('setDefault category: $category');
}
return DropdownButton(
isExpanded: false,
value: category,
items: snapshot.data.docs.map((value) {
return DropdownMenuItem(
value: value.get('name'),
child: Text('${value.get('name')}'),
);
}).toList(),
onChanged: (value) {
debugPrint('selected onchange: $value');
setState(
() {
debugPrint('category selected: $value');
category = value;
setDefaultCategory = false;
setDefaultMakeModel = true;
},
);
},
);
},
),
Container(
child: category != null
? StreamBuilder<QuerySnapshot>(
stream:
DatabaseService.getSubCategories(category),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
debugPrint(
'snapshot status: ${snapshot.error}');
return Container(
child: Text(
'snapshot empty category: $category sub-category: $subCategory'),
);
}
if (setDefaultMakeModel) {
subCategory =
snapshot.data.docs[0].get('name');
debugPrint('setDefault subCat: $subCategory');
}
return DropdownButton(
isExpanded: false,
value: subCategory,
items: snapshot.data.docs.map((value) {
debugPrint('subCat: ${value.get('name')}');
return DropdownMenuItem(
value: value.get('name'),
child: Text(
'${value.get('name')}',
overflow: TextOverflow.ellipsis,
),
);
}).toList(),
onChanged: (value) {
debugPrint('subCat selected: $value');
setState(
() {
// Selected value will be stored
subCategory = value;
// Default dropdown value won't be displayed anymore
setDefaultMakeModel = false;
},
);
},
);
},
)
: Container(
child:
Text('cat: $category subcat: $subCategory'),
),
),
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论