spotube/lib/components/adaptive/adaptive_list_tile.dart
2025-01-20 13:24:24 +06:00

64 lines
1.8 KiB
Dart

import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/components/ui/button_tile.dart';
import 'package:spotube/extensions/constrains.dart';
class AdaptiveListTile extends HookWidget {
final Widget Function(BuildContext, StateSetter?)? trailing;
final Widget? title;
final Widget? subtitle;
final Widget? leading;
final void Function()? onTap;
final bool? breakOn;
const AdaptiveListTile({
super.key,
this.trailing,
this.onTap,
this.title,
this.subtitle,
this.leading,
this.breakOn,
});
@override
Widget build(BuildContext context) {
final mediaQuery = MediaQuery.of(context);
return ButtonTile(
title: title,
subtitle: subtitle,
trailing: breakOn ?? mediaQuery.smAndDown
? null
: trailing?.call(context, null),
leading: leading,
enabled: breakOn ?? mediaQuery.smAndDown,
onPressed: () {
onTap?.call();
showDialog(
context: context,
barrierDismissible: true,
builder: (context) {
return StatefulBuilder(builder: (context, update) {
return AlertDialog(
title: title != null
? Row(
crossAxisAlignment: CrossAxisAlignment.center,
spacing: 5,
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (leading != null) leading!,
Flexible(child: title!),
],
)
: const SizedBox.shrink(),
content: Center(child: trailing?.call(context, update)),
);
});
},
);
},
);
}
}