@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: slides,
initialData: [],
builder: (context, AsyncSnapshot snap) {
List slideList = snap.data.toList();
return PageView.builder(
controller: ctrl,
itemCount: slideList.length + 1,
itemBuilder: (context, int currentIdx){
if (currentIdx == 0) {
return _buildTagPage();
}
else if (slideList.length >= currentIdx){
bool active = currentIdx == currentPage;
return _buildStoryPage(slideList[currentIdx - 1], active);
}
}
);
},
);
}
这是Reflectly应用程序克隆的摘录,我在(context, int currentIdx) {
中遇到错误。
我假设我必须在某处添加return语句,但是不知道在哪里做。
答案 0 :(得分:0)
如果两个都是假的,则必须在两个if语句之后添加return语句:
itemBuilder: (context, int currentIdx){
if (currentIdx == 0) {
return _buildTagPage();
}
else if (slideList.length >= currentIdx){
bool active = currentIdx == currentPage;
return _buildStoryPage(slideList[currentIdx - 1], active);
}
return [some_widget]; // <---- here
}
答案 1 :(得分:0)
这里的问题是if
-else if
组合不是穷举的,这意味着在某些情况下,两个条件都不满足,因此都不满足的代码块被执行。
但是,itemBuilder
指定需要从回调中返回Widget
。因此,您会看到错误。
要解决此问题,您可以添加else
语句以使if
-else
组合穷尽并从两者中返回,也可以添加return
最后,如果之前没有返回任何内容,则总是可以达到的;
controller: ctrl,
itemCount: slideList.length + 1,
itemBuilder: (context, int currentIdx){
if (currentIdx == 0) {
return _buildTagPage();
} else if (slideList.length >= currentIdx) {
bool active = currentIdx == currentPage;
return _buildStoryPage(slideList[currentIdx - 1], active);
}
return Text('No slide availabe.');
}
);
如您所见,我在最后添加了一个return语句,它将向用户显示一条消息。