import 'package:flutter/material.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:provider/provider.dart'; import 'package:refilc/api/providers/database_provider.dart'; import 'package:refilc/api/providers/user_provider.dart'; import 'package:refilc/models/settings.dart'; import 'package:refilc/ui/widgets/grade/grade_tile.dart'; import 'package:refilc_kreta_api/models/grade.dart'; class GradeRarityTextSetting extends StatefulWidget { const GradeRarityTextSetting({ super.key, required this.title, required this.cancel, required this.done, required this.defaultRarities, }); final String title; final String cancel; final String done; final List defaultRarities; @override GradeRarityTextSettingState createState() => GradeRarityTextSettingState(); } class GradeRarityTextSettingState extends State { late SettingsProvider settings; late DatabaseProvider db; late UserProvider user; final _rarityText = TextEditingController(); @override void initState() { super.initState(); settings = Provider.of(context, listen: false); db = Provider.of(context, listen: false); user = Provider.of(context, listen: false); } @override Widget build(BuildContext context) { return Column(children: [ Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: List.generate(5, (index) { return ClipOval( child: Material( type: MaterialType.transparency, child: InkWell( onTap: () async { showRenameDialog( title: widget.title, cancel: widget.cancel, done: widget.done, rarities: await db.userQuery.getGradeRarities(userId: user.id!), gradeIndex: (index + 1).toString(), defaultRarities: widget.defaultRarities, ); }, child: GradeValueWidget(GradeValue(index + 1, "", "", 0), fill: true, size: 36.0), ), ), ); }), ), ), ]); } void showRenameDialog( {required String title, required String cancel, required String done, required Map rarities, required String gradeIndex, required List defaultRarities, required}) { showDialog( context: context, builder: (context) => StatefulBuilder(builder: (context, setS) { String? rr = rarities[gradeIndex]; rr ??= ''; _rarityText.text = rr; return AlertDialog( title: Text(title), content: TextField( controller: _rarityText, autofocus: true, decoration: InputDecoration( border: const OutlineInputBorder(), label: Text(defaultRarities[int.parse(gradeIndex) - 1]), suffixIcon: IconButton( icon: const Icon(FeatherIcons.x), onPressed: () { setState(() { _rarityText.clear(); }); }, ), ), ), actions: [ TextButton( child: Text( cancel, style: const TextStyle(fontWeight: FontWeight.w500), ), onPressed: () { Navigator.of(context).maybePop(); }, ), TextButton( child: Text( done, style: const TextStyle(fontWeight: FontWeight.w500), ), onPressed: () { rarities[gradeIndex] = _rarityText.text; Provider.of(context, listen: false) .userStore .storeGradeRarities(rarities, userId: user.id!); Navigator.of(context).pop(true); }, ), ], ); }), ).then((val) { _rarityText.clear(); }); } }