我是新手,我正在尝试构建类似于日历的视图。
我正在使用一些逻辑来生成以行显示的星期列表,它们本身就是天列表(基本窗口小部件)。
我遇到了一个障碍,该障碍将一个简单的索引传递给单个Day小部件,以便显示日期。
虽然我已经学会了如何通过它们的构造函数将它们本身传递给小部件:CalendarDay({this.monthDay});
,但Dart一直抱怨说,由于它们是通过逻辑生成的,因此索引值不是常数。
我用来生成CalendarDay小部件列表列表的逻辑:
for(int rows =1,daysAdded=1; rows<=7;rows++) {
for(int y=1;y<=7;y++){
if(rows > 1 || y >= firstOfMonthWeekday){
print("Adding day $daysAdded to week nr. $rows");
final String str = daysAdded.toString();
// This is where I try to pass the index to the CalendarDay Widget
weeklyRow.add(new CalendarDay(monthDay: str));
daysAdded++;
if(daysAdded>daysInThisMonth){
done = true;
break;
}
}
}
monthWeeksDays.add(weeklyRow);
weeklyRow = [];
print('Days in week $rows: ${monthWeeksDays[rows-1].length}');
if(done)
break;
}
CalendarDay小部件本身:
class CalendarDay extends StatelessWidget {
final String monthDay;
CalendarDay({this.monthDay});
@override
Widget build(BuildContext context) {
final double screenWidth = MediaQuery.of(context).size.width;
return SizedBox(
width: screenWidth/7,
height: screenWidth/7,
child: const DecoratedBox(
decoration: BoxDecoration( color: Colors.blue),
child: Center(
child: Text(monthDay),
),
),
);
}
}
我已经尝试过将CalendarDay转换为StatefulWidget,以查看是否可以让我使用一个非常量值,但是即使我从类声明中删除了final关键字,它仍要求该值保持常量。
除了没有索引之外,我不确定如何继续,如果有人可以指出我解决问题的方法,我显然愿意亲自研究。谢谢。
我是个白痴,我复制了一些代码以创建彩色框作为占位符,花了多个小时才注意到我将DecoratedBox声明为const
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句