【发布时间】:2020-12-11 03:00:27
【问题描述】:
我是 Flutter 的新手,我正在尝试构建一个类似日历的视图。
我正在使用一些逻辑来生成周列表,显示为行,它们本身就是天列表(基本小部件)。
我遇到了一个障碍,将一个简单的索引传递给单个 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 关键字。
除了没有索引之外,我不确定如何继续,如果有人能指出我解决问题的方法,我显然愿意自己研究它。谢谢。
【问题讨论】: