|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:flutter_custom_calendar/controller.dart';
|
|
|
import 'package:flutter_custom_calendar/model/date_model.dart';
|
|
|
|
|
|
/**
|
|
|
* 通过canvas自定义item,只需实现相关的方法就可以
|
|
|
*/
|
|
|
abstract class BaseCustomDayWidget extends StatelessWidget {
|
|
|
final DateModel dateModel;
|
|
|
|
|
|
const BaseCustomDayWidget(
|
|
|
this.dateModel,
|
|
|
);
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
return Container(
|
|
|
child: new CustomPaint(
|
|
|
painter:
|
|
|
//根据isSelected标志获取对应的item
|
|
|
dateModel.isSelected
|
|
|
? new CustomDayWidgetPainter(dateModel,
|
|
|
drawDayWidget: drawSelected)
|
|
|
: new CustomDayWidgetPainter(dateModel,
|
|
|
drawDayWidget: drawNormal),
|
|
|
),
|
|
|
);
|
|
|
}
|
|
|
|
|
|
void drawNormal(DateModel dateModel, Canvas canvas, Size size);
|
|
|
|
|
|
void drawSelected(DateModel dateModel, Canvas canvas, Size size);
|
|
|
}
|
|
|
|
|
|
class CustomDayWidgetPainter extends CustomPainter {
|
|
|
DateModel dateModel;
|
|
|
|
|
|
DrawDayWidget drawDayWidget; //普通样式是必须的
|
|
|
|
|
|
CustomDayWidgetPainter(this.dateModel, {this.drawDayWidget});
|
|
|
|
|
|
Paint textPaint;
|
|
|
|
|
|
@override
|
|
|
void paint(Canvas canvas, Size size) {
|
|
|
drawDayWidget(dateModel, canvas, size);
|
|
|
}
|
|
|
|
|
|
@override
|
|
|
bool shouldRepaint(CustomPainter oldDelegate) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 通过组合widget创建item,只需实现相关的方法就可以
|
|
|
*/
|
|
|
abstract class BaseCombineDayWidget extends StatelessWidget {
|
|
|
final DateModel dateModel;
|
|
|
|
|
|
BaseCombineDayWidget(this.dateModel);
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
return dateModel.isSelected
|
|
|
? getSelectedWidget(dateModel)
|
|
|
: getNormalWidget(dateModel);
|
|
|
}
|
|
|
|
|
|
Widget getNormalWidget(DateModel dateModel);
|
|
|
|
|
|
Widget getSelectedWidget(DateModel dateModel);
|
|
|
}
|