import 'package:PiliPlus/common/widgets/flutter/list_tile.dart'; import 'package:flutter/material.dart' hide ListTile; class NormalItem extends StatefulWidget { final String? title; final ValueGetter? getTitle; final String? subtitle; final ValueGetter? getSubtitle; final Widget? leading; final Widget Function(ThemeData theme)? getTrailing; final void Function(BuildContext context, VoidCallback setState)? onTap; final EdgeInsetsGeometry? contentPadding; final TextStyle? titleStyle; const NormalItem({ this.title, this.getTitle, this.subtitle, this.getSubtitle, this.leading, this.getTrailing, this.onTap, this.contentPadding, this.titleStyle, super.key, }) : assert(title != null || getTitle != null); @override State createState() => _NormalItemState(); } class _NormalItemState extends State { @override Widget build(BuildContext context) { late final theme = Theme.of(context); Widget? subtitle; if ((widget.subtitle ?? widget.getSubtitle?.call()) case final text?) { subtitle = Text( text, style: theme.textTheme.labelMedium!.copyWith( color: theme.colorScheme.outline, ), ); } return ListTile( contentPadding: widget.contentPadding, onTap: widget.onTap == null ? null : () => widget.onTap!(context, refresh), title: Text( widget.title ?? widget.getTitle!(), style: widget.titleStyle ?? theme.textTheme.titleMedium!, ), subtitle: subtitle, leading: widget.leading, trailing: widget.getTrailing?.call(theme), ); } void refresh() { if (mounted) { setState(() {}); } } }