2025-01-31 10:24:37 +01:00

110 lines
3.2 KiB
Dart

import 'package:refilc/theme/colors/colors.dart';
import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
class TickTile extends StatefulWidget {
const TickTile({
super.key,
this.onTap,
this.isTicked = false,
required this.title,
this.description,
this.padding,
});
final Function(bool)? onTap;
final bool isTicked;
final String title;
final String? description;
final EdgeInsetsGeometry? padding;
@override
TickTileState createState() => TickTileState();
}
class TickTileState extends State<TickTile> {
late bool isTicked;
@override
void initState() {
isTicked = widget.isTicked;
super.initState();
}
@override
Widget build(BuildContext context) {
return Material(
type: MaterialType.transparency,
child: Padding(
padding: widget.padding ?? const EdgeInsets.symmetric(horizontal: 8.0),
child: ListTile(
onTap: () {
widget.onTap!(!isTicked);
setState(() {
isTicked == true ? isTicked = false : isTicked = true;
});
},
visualDensity: VisualDensity.compact,
contentPadding: const EdgeInsets.only(left: 8.0, right: 4.0),
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(14.0)),
leading: !isTicked
? Padding(
padding: const EdgeInsets.only(top: 2.0, left: 0.8),
child: Container(
width: 20.5,
height: 20.5,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: Theme.of(context).colorScheme.secondary,
width: 2.0,
),
),
),
)
: Icon(
FeatherIcons.checkCircle,
size: 22.0,
color: Theme.of(context).colorScheme.secondary,
),
title: Row(
children: [
Expanded(
child: Text(
widget.title,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 15.5,
decoration: isTicked ? TextDecoration.lineThrough : null,
color: isTicked
? AppColors.of(context).text.withValues(alpha: 0.5)
: null,
),
),
),
],
),
subtitle: widget.description != null
? Text(
widget.description!,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 12.0,
color: isTicked
? AppColors.of(context).text.withValues(alpha: 0.5)
: null,
),
)
: null,
),
),
);
}
}