import 'package:flutter/material.dart'; typedef StringGetter = String Function(); class NormalItem extends StatefulWidget { final String? title; final StringGetter? getTitle; final String? subtitle; final StringGetter? getSubtitle; final String? setKey; final bool? defaultVal; final ValueChanged? onChanged; final bool? needReboot; final Widget? leading; final Widget Function()? getTrailing; final Function? onTap; final EdgeInsetsGeometry? contentPadding; final TextStyle? titleStyle; const NormalItem({ this.title, this.getTitle, this.subtitle, this.getSubtitle, this.setKey, this.defaultVal, this.onChanged, this.needReboot, 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) { return ListTile( contentPadding: widget.contentPadding, onTap: () => widget.onTap?.call(() { setState(() {}); }), title: Text( widget.title ?? widget.getTitle!(), style: widget.titleStyle ?? Theme.of(context).textTheme.titleMedium!, ), subtitle: widget.subtitle != null || widget.getSubtitle != null ? Text( widget.subtitle ?? widget.getSubtitle!(), style: Theme.of(context).textTheme.labelMedium!.copyWith( color: Theme.of(context).colorScheme.outline, ), ) : null, leading: widget.leading, trailing: widget.getTrailing?.call(), ); } }