Calendar 如何在Flatter中处理日历旋转木马中单击按钮的颜色
我正在使用日历旋转木马小部件进行颤振。我试图点击日历上的一个随机日期,改变按钮的颜色并保持这种颜色,但现在我无法得到这种行为。这是我的代码:Calendar 如何在Flatter中处理日历旋转木马中单击按钮的颜色,calendar,flutter,widget,Calendar,Flutter,Widget,我正在使用日历旋转木马小部件进行颤振。我试图点击日历上的一个随机日期,改变按钮的颜色并保持这种颜色,但现在我无法得到这种行为。这是我的代码: import 'package:flutter/material.dart'; import 'package:father_home_flutter/model/constants.dart'; import 'package:flutter_calendar_carousel/classes/event.dart'; import 'package:f
import 'package:flutter/material.dart';
import 'package:father_home_flutter/model/constants.dart';
import 'package:flutter_calendar_carousel/classes/event.dart';
import 'package:flutter_calendar_carousel/classes/event_list.dart';
import 'package:flutter_calendar_carousel/flutter_calendar_carousel.dart'
show CalendarCarousel;
class ScreenCalendar extends StatefulWidget {
@override
_ScreenCalendarState createState() => new _ScreenCalendarState();
}
class _ScreenCalendarState extends State<ScreenCalendar> {
static String noEventText = "No event here";
String calendarText = noEventText;
@override
void initState() {
_markedDateMap.add(
new DateTime(2019, 1, 25),
new Event(
date: new DateTime(2019, 1, 25),
title: 'Event 5',
icon: _eventIcon,
));
_markedDateMap.add(
new DateTime(2019, 1, 10),
new Event(
date: new DateTime(2019, 1, 10),
title: 'Event 4',
icon: _eventIcon,
));
_markedDateMap.addAll(new DateTime(2019, 1, 11), [
new Event(
date: new DateTime(2019, 1, 11),
title: 'Event 1',
icon: _eventIcon,
),
new Event(
date: new DateTime(2019, 1, 11),
title: 'Event 2',
icon: _eventIcon,
),
new Event(
date: new DateTime(2019, 1, 11),
title: 'Event 3',
icon: _eventIcon,
),
]);
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Календар',
style: Constants.myTextStyleAppBar,
),
iconTheme: Constants.myIconThemeDataAppBar,
elevation: Constants.myElevationAppBar,
backgroundColor: Constants.myAppBarColor,
),
body: SingleChildScrollView(
child: Column(children: <Widget>[
Card(
child: CalendarCarousel(
weekendTextStyle: TextStyle(
color: Colors.red,
),
weekFormat: false,
selectedDayBorderColor: Colors.green,
markedDatesMap: _markedDateMap,
selectedDayButtonColor: Colors.green,
selectedDayTextStyle: TextStyle(color: Colors.green),
todayBorderColor: Colors.transparent,
weekdayTextStyle: TextStyle(color: Colors.black),
height: 420.0,
daysHaveCircularBorder: true,
todayButtonColor: Colors.indigo,
locale: 'RUS',
onDayPressed: (DateTime date, List<Event> events) {
this.setState(() => refresh(date));
},
)),
Card(
child: Container(
child: Padding(
padding: EdgeInsets.fromLTRB(16.0, 16.0, 16.0, 16.0),
child: Center(
child: Text(
calendarText,
style: Constants.textStyleCommonText,
)))))
])));
}
void refresh(DateTime date) {
print('selected date ' +
date.day.toString() +
date.month.toString() +
date.year.toString() +
' ' +
date.toString());
if(_markedDateMap.getEvents(new DateTime(date.year, date.month, date.day)).isNotEmpty){
calendarText = _markedDateMap
.getEvents(new DateTime(date.year, date.month, date.day))[0]
.title;
} else{
calendarText = noEventText;
}
}
}
EventList<Event> _markedDateMap = new EventList<Event>(events: {
new DateTime(2019, 1, 24): [
new Event(
date: new DateTime(2019, 1, 24),
title: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, '
'sed eiusmod tempor incidunt ut labore et dolore magna aliqua.'
' \n\nUt enim ad minim veniam,'
' quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat.'
' \n\nQuis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. '
'Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
icon: _eventIcon,
)
]
});
Widget _eventIcon = new Container(
decoration: new BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(1000)),
border: Border.all(color: Colors.blue, width: 2.0)),
child: new Icon(
Icons.person,
color: Colors.amber,
),
);
如果您试图更改启动颜色,可能需要从当前主题覆盖它,尝试将日历旋转木马小部件包装在
主题中,并覆盖主题数据,如下所示:
Theme(data: ThemeData(
splashColor: Colors.green,
)
child: YourCarouselWidget(),
);
另外,确保您正在使用onDayPressed
属性上的setState
更新所选日期 为了解决这个问题,我按照@miguelpruivo的建议做了,以这种方式解决了OnDay问题:
onDayPressed: (DateTime date, List<Event> events) {
this.setState(() => refresh(date));
},
void refresh(DateTime date) {
_currentDate = date;
下面是州政府声明:
DateTime _currentDate = DateTime.now();
是的,你是对的,我没有正确地使用这个工具。
selectedDateTime: _currentDate,
DateTime _currentDate = DateTime.now();