PlanDaysExList是一个包含锻炼练习的列表,如果列表为空......它应该将我导航到restScreen()
/如果列表包含练习......它应该将我导航到getPlanExercisesScreen()
我的问题是,当列表有练习或空...它总是导航我到getPlanExercisesScreen()
,我不知道问题在哪里。
下面是我代码:
Widget DaysDetails(context,index,weekNum) => InkWell(
onTap: ()
{
LifeStyleCubit.get(context).PlanDaysExList=[];
LifeStyleCubit.get(context).getPlanDaysExercises(
planName: model.planName,
weekNum: weekNum+1,
dayNum: index + 1,
);
if(LifeStyleCubit.get(context).PlanDaysExList==[])
{Navigator.push(context, MaterialPageRoute(
builder: (context)=>restScreen()));}
else{Navigator.push(context, MaterialPageRoute(
builder: (context)=>getPlanExercisesScreen()));}
},
child: SizedBox(
height: 35,width: 100,
child: Container(
color: Colors.orange,
child: Center(child: Text('Day ${index+1}')),
),
),
);
void getPlanDaysExercises({
required int weekNum, required int dayNum,
required String planName,
})
{
FirebaseFirestore.instance
.collection('users')
.doc(uId)
.collection('plans')
.doc(planName)
.collection('week $weekNum')
.doc('week $weekNum')
.collection('days')
.get()
.then((value){
PlanDaysExList.clear();
value.docs.forEach((element)
{
if(element.data()['day'] == dayNum)
{
PlanDaysExList.add(PlanExercisesModel.fromJson(element.data()));
}
});
在最后一行代码中,这意味着如果docs.element.data[day]与dayNum不匹配,则PlanDaysExList必须为空,但它仍会将我导航到getPlanExercisesScreen()
,但是当我导航到那里时......它不会向我显示练习,因此意味着列表为空!我错过了什么?
2条答案
按热度按时间zaqlnxep1#
错误出现在检查列表是否为空的行中。
将其更改为:
用一个更简单的例子来尝试:
在这里,我用列表的
isEmpty
方法替换了if(list1 == []
(在您的示例中)。原因是,如果不检查ListEquality(从collection.dart导入),就无法像在Python中那样比较列表:
vmjh9lq92#
若要检查列表是否为空,可以改用列表的isEmpty属性,如下所示:LifeStyleCubit.get(context).PlanDaysExList.isEmpty。如果列表没有元素,则此属性返回true,否则返回false。
尝试将DaysDetails小部件中的比较更改为使用isEmpty,如下所示: