I have a calendar, that works correct but shows only current day and future. How can i set previous days? I'd like to highliht a current day but also give an opportunity to scroll it to right and left. Maybe have your already faced to this problem. Help me please.
This is a whole class, you can try it
class _MyHomePageState extends State<MyHomePage> {
int currentDateSelectedIndex = 0; //For Horizontal Date
DateTime selectedDate = DateTime.now(); // TO tracking date
late var selectedDateNew;
ScrollController scrollController = ScrollController(); //Scroll Controller for ListView
List<String> listOfMonths = [
"January","February","March","April","May","June","July","August","September","October","November","December"
];
@override
void initState() {
selectedDate = DateTime.now().subtract(Duration(days: 30));
selectedDateNew = formatDate(selectedDate, [yyyy, '-', mm, '-', dd]);
super.initState();
}
@override
Widget build(BuildContext context) {
final FixedExtentScrollController itemController = FixedExtentScrollController();
return Scaffold(
body: Center(
child: calendar_carousel(),
)
);
}
Widget calendar_carousel() {
return Container(
height: 100,
child: ScrollSnapList(
padding: EdgeInsets.zero,
itemBuilder: _buildDaysList,
allowAnotherDirection: true,
itemSize: 196,
initialIndex: 0, //i tryed to put here another number, i didn't work
dynamicItemSize: true,
selectedItemAnchor: SelectedItemAnchor.MIDDLE,
onReachEnd: (){
print('Done!');
},
itemCount: 365,
onItemFocus: (int) {
setState(() {
scrollController.animateTo(0, duration: Duration(days: int), curve: Curves.bounceIn);
currentDateSelectedIndex = int;
selectedDate = DateTime.now().add(Duration(days: int));
selectedDateNew = formatDate(selectedDate, [yyyy, '-', mm, '-', dd]);
//fetch(selectedDateNew);
});
},
)
);
}
Widget _buildDaysList(BuildContext context, int index){
return Container(
child: Container(
color: Colors.blue,
width: 196,
height: 80,
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(DateTime.now().add(Duration(days: index)).day.toString()),
SizedBox(
width: 10,
),
Text(listOfMonths[DateTime.now().add(Duration(days: index)).month - 1].toString(),
),
],
),
),
),
);
}
}
i used dependensies
- scroll_snap_list: ^0.8.6
- date_format: ^2.0.6
CodePudding user response:
Have you tried using.
var lastMonth = new DateTime(date.year, date.month - 1, date.day);