import 'package:flutter/material.dart'; import '../hooks/delayed_loading.dart'; /// [IconButton], usually at the bottom of some tile, that performs an async /// action that uses [DelayedLoading], has reduced size to be more compact, /// and has built in spinner class TileAction extends StatelessWidget { final IconData icon; final VoidCallback onPressed; final String tooltip; final DelayedLoading? delayedLoading; final bool loading; final Color? iconColor; const TileAction({ super.key, this.delayedLoading, this.iconColor, required this.icon, required this.onPressed, required this.tooltip, this.loading = false, }); @override Widget build(BuildContext context) => IconButton( constraints: BoxConstraints.tight(const Size(36, 30)), padding: EdgeInsets.zero, splashRadius: 25, iconSize: 25, tooltip: tooltip, onPressed: delayedLoading?.pending ?? loading ? () {} : onPressed, icon: delayedLoading?.loading ?? loading ? SizedBox.fromSize( size: const Size.square(22), child: const CircularProgressIndicator.adaptive(), ) : Icon( icon, color: iconColor ?? Theme.of(context).iconTheme.color?.withAlpha(190), ), ); }