From d71fa9b5f8c1a6594740a854df664d613f184c1f Mon Sep 17 00:00:00 2001 From: "Alexander \"PapaTutuWawa" Date: Sun, 10 May 2026 22:46:26 +0200 Subject: [PATCH] feat: Handle the dropdown via a bottom sheet --- assets/i18n/strings_es.i18n.json | 2 +- lib/src/ui/widgets/dropdown.dart | 79 +++++++++++++++----------------- 2 files changed, 37 insertions(+), 44 deletions(-) diff --git a/assets/i18n/strings_es.i18n.json b/assets/i18n/strings_es.i18n.json index b9cfa44..ba3eb38 100644 --- a/assets/i18n/strings_es.i18n.json +++ b/assets/i18n/strings_es.i18n.json @@ -40,7 +40,7 @@ }, "details": { "title": "Detalles", - "removeTitle": "¿Eliminar el $título?", + "removeTitle": "¿Eliminar el $title?", "removeBody": "¿Estás seguro de querer eliminar \"$title\" de la lista?", "removeButton": "Eliminar", "cancelButton": "Cancelar", diff --git a/lib/src/ui/widgets/dropdown.dart b/lib/src/ui/widgets/dropdown.dart index bec160b..ce17a12 100644 --- a/lib/src/ui/widgets/dropdown.dart +++ b/lib/src/ui/widgets/dropdown.dart @@ -1,3 +1,4 @@ +import 'package:anitrack/src/ui/widgets/list_item.dart'; import 'package:flutter/material.dart'; class SelectorItem { @@ -31,44 +32,6 @@ class DropdownSelector extends StatefulWidget { DropdownSelectorState createState() => DropdownSelectorState(); } -class DropdownSelectorDialog extends StatelessWidget { - const DropdownSelectorDialog({ - required this.values, - super.key, - }); - - final List> values; - - @override - Widget build(BuildContext context) { - return SafeArea( - child: Material( - color: Theme.of(context).scaffoldBackgroundColor, - child: ListView.builder( - itemCount: values.length, - itemBuilder: (context, index) => InkWell( - onTap: () { - Navigator.of(context).pop(values[index].value); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.all(16), - child: Text( - values[index].text, - style: Theme.of(context).textTheme.titleLarge, - ), - ), - ], - ), - ), - ), - ), - ); - } -} - class DropdownSelectorState extends State> { late int index; @@ -89,11 +52,41 @@ class DropdownSelectorState extends State> { clipBehavior: Clip.hardEdge, child: InkWell( onTap: () async { - final result = await showDialog( - context: context, - builder: (context) => DropdownSelectorDialog( - values: widget.values.cast>(), - ), + final result = await showModalBottomSheet( + context: context, + clipBehavior: Clip.antiAlias, + builder: (context) => DraggableScrollableSheet( + initialChildSize: 1, + builder: (context, controller) => ListView.builder( + shrinkWrap: true, + controller: controller, + itemCount: widget.values.length, + itemBuilder: (context, index) => InkWell( + onTap: () { + Navigator.of(context).pop(widget.values[index].value); + }, + child: Padding( + padding: const EdgeInsetsGeometry.symmetric( + horizontal: 16, + vertical: 12, + ), + child: Row( + children: [ + Text( + widget.values[index].text, + style: Theme.of(context).textTheme.titleLarge, + ), + if (this.index == index) + const Padding( + padding: EdgeInsets.only(left: 12), + child: Icon(Icons.check), + ), + ], + ), + ), + ), + ), + ), ); if (result == null) return;