Initial commit

This commit is contained in:
Yas Opisso
2025-12-12 14:31:36 -05:00
commit 83775bdc72
175 changed files with 17284 additions and 0 deletions

View File

@@ -0,0 +1,211 @@
import 'package:flutter/cupertino.dart';
import 'package:hum/core/constants/app_icons.dart';
import 'package:hum/core/constants/app_theme.dart';
import 'package:hum/widgets/widget_buttons.dart';
class BTNCategory extends StatelessWidget {
final String label;
final String icon;
const BTNCategory({required this.label, required this.icon, super.key});
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
border: Border.all(
color: CupertinoDynamicColor.resolve(
colorCategoryButtonBG,
context,
).withValues(alpha: 0.2),
width: 1.5,
),
borderRadius: BorderRadius.circular(8),
),
child: CupertinoButton(
minimumSize: Size(0, categoryHeight),
color: CupertinoDynamicColor.resolve(colorCategoryButtonBG, context).withValues(alpha: .3),
borderRadius: BorderRadius.circular(8),
padding: EdgeInsets.zero,
onPressed: () {},
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 9.0),
child: Row(
spacing: 4,
children: [
Icon(
size: 14,
color: CupertinoDynamicColor.resolve(colorCategoryButtonFG, context),
CupertinoIconHelper.fromString(icon),
),
Text(
label,
style: TextStyle(
fontSize: 14,
color: CupertinoDynamicColor.resolve(colorCategoryButtonFG, context),
),
),
],
),
),
),
);
}
}
class BTNViewSwitcher extends StatelessWidget {
final List<MenuAction> actions;
final String view;
// final double iconSize;
// final EdgeInsetsGeometry padding;
const BTNViewSwitcher({super.key, this.view = 'ai', required this.actions});
@override
Widget build(BuildContext context) {
return CupertinoButton(
key: UniqueKey(),
child: Icon(CupertinoIcons.ellipsis_vertical),
onPressed: () => _showMenu(context),
);
}
void _showMenu(BuildContext context) {
showCupertinoModalPopup<void>(
context: context,
builder: (ctx) => CupertinoActionSheet(
actions: actions.map((a) {
final row = Row(
spacing: 12,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: const EdgeInsets.only(left: 8.0),
child: Icon(a.icon, size: 20, color: colorBarButton),
),
Text(a.label, style: TextStyle(color: CupertinoColors.lightBackgroundGray)),
],
);
return CupertinoActionSheetAction(
isDestructiveAction: a.destructive,
onPressed: () {
Navigator.of(ctx).pop();
a.onPressed();
},
child: row,
);
}).toList(),
cancelButton: CupertinoActionSheetAction(
onPressed: () => Navigator.of(ctx).pop(),
isDefaultAction: true,
child: const Text('Cancel'),
),
),
);
}
}
// TOGGLE TO CHANGE VIEW MODE
class HomeToggleView extends StatefulWidget {
const HomeToggleView({super.key, this.mode = 'grid', required this.onChanged});
final String mode;
final ValueChanged<String> onChanged;
@override
State<HomeToggleView> createState() => _HomeToggleViewState();
}
class _HomeToggleViewState extends State<HomeToggleView> {
String mode = 'grid';
@override
void initState() {
mode = widget.mode;
super.initState();
}
@override
Widget build(BuildContext context) {
return SizedBox(
child: Container(
padding: EdgeInsets.all(3),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(14)),
color: CupertinoDynamicColor.resolve(colorBackground, context),
),
child: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end,
children: [
SizedBox(
width: 40,
height: 36,
child: CupertinoButton.filled(
color: mode == 'ai'
? CupertinoDynamicColor.resolve(colorBarButton, context)
: CupertinoDynamicColor.resolve(colorBackground, context),
padding: EdgeInsets.zero,
child: Text(
'AI',
style: TextStyle(fontWeight: mode == 'ai' ? FontWeight.bold : FontWeight.w300),
),
onPressed: () {
setState(() {
mode = 'ai';
});
widget.onChanged('ai');
},
),
),
SizedBox(
width: 40,
height: 36,
child: CupertinoButton.filled(
color: mode == 'grid'
? CupertinoDynamicColor.resolve(colorBarButton, context)
: CupertinoDynamicColor.resolve(colorBackground, context),
padding: EdgeInsets.zero,
child: Icon(
mode == 'grid'
? CupertinoIcons.square_grid_2x2_fill
: CupertinoIcons.square_grid_2x2,
),
onPressed: () {
setState(() {
mode = 'grid';
});
widget.onChanged('grid');
},
),
),
// SizedBox(
// width: 40,
// height: 36,
// child: CupertinoButton.filled(
// color: mode == 'map'
// ? CupertinoDynamicColor.resolve(colorBarButton, context)
// : CupertinoDynamicColor.resolve(colorBackground, context),
// padding: EdgeInsets.zero,
// child: Icon(mode == 'map' ? CupertinoIcons.map_fill : CupertinoIcons.map),
// onPressed: () {
// setState(() {
// mode = 'map';
// });
// widget.onChanged('map');
// },
// ),
// ),
],
),
),
);
}
}