import 'package:diameter/components/dialogs.dart'; import 'package:diameter/models/meal_source.dart'; import 'package:diameter/models/settings.dart'; import 'package:diameter/navigation.dart'; import 'package:diameter/screens/meal/meal_source_detail.dart'; import 'package:flutter/material.dart'; class MealSourceListScreen extends StatefulWidget { static const String routeName = '/meal-sources'; const MealSourceListScreen({Key? key}) : super(key: key); @override _MealSourceListScreenState createState() => _MealSourceListScreenState(); } class _MealSourceListScreenState extends State { List _mealSources = []; @override void initState() { super.initState(); reload(); } void reload({String? message}) { setState(() { _mealSources = MealSource.getAll(); }); setState(() { if (message != null) { var snackBar = SnackBar( content: Text(message), duration: const Duration(seconds: 2), ); ScaffoldMessenger.of(context) ..removeCurrentSnackBar() ..showSnackBar(snackBar); } }); } void onDelete(MealSource mealSource) { MealSource.remove(mealSource.id); reload(message: 'Meal Source deleted'); } void handleDeleteAction(MealSource mealSource) async { if (Settings.get().showConfirmationDialogOnDelete) { Dialogs.showConfirmationDialog( context: context, onConfirm: () => onDelete(mealSource), message: 'Are you sure you want to delete this Meal Source?', ); } else { onDelete(mealSource); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Meal Sources'), actions: [ IconButton(onPressed: reload, icon: const Icon(Icons.refresh)) ], ), drawer: const Navigation(currentLocation: MealSourceListScreen.routeName), body: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( child: _mealSources.isNotEmpty ? ListView.builder( padding: const EdgeInsets.only(top: 10.0), itemCount: _mealSources.length, itemBuilder: (context, index) { final mealSource = _mealSources[index]; return ListTile( onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => MealSourceDetailScreen( id: mealSource.id, ), ), ).then((message) => reload(message: message)); }, title: Text(mealSource.value), subtitle: Text(mealSource.notes ?? ''), trailing: Row( mainAxisSize: MainAxisSize.min, children: [ IconButton( icon: const Icon( Icons.delete, color: Colors.blue, ), onPressed: () async { handleDeleteAction(mealSource); }, ), ], ), ); } ) : const Center( child: Text('You have not created any Meal Sources yet!'), ), ), ], ), floatingActionButton: FloatingActionButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const MealSourceDetailScreen(), ), ).then((message) => reload(message: message)); }, child: const Icon(Icons.add), ), ); } }