import 'package:finamp/models/jellyfin_models.dart'; import 'package:flutter/material.dart'; import 'package:finamp/l10n/app_localizations.dart'; import 'package:get_it/get_it.dart'; import '../../services/finamp_user_helper.dart'; import '../../services/jellyfin_api_helper.dart'; import '../error_snackbar.dart'; class NewPlaylistDialog extends StatefulWidget { const NewPlaylistDialog({ Key? key, required this.itemToAdd, }) : super(key: key); final String itemToAdd; @override State createState() => _NewPlaylistDialogState(); } class _NewPlaylistDialogState extends State { final _formKey = GlobalKey(); final _jellyfinApiHelper = GetIt.instance(); final _finampUserHelper = GetIt.instance(); bool _isSubmitting = false; String? _name; @override Widget build(BuildContext context) { return AlertDialog( title: Text(AppLocalizations.of(context)!.newPlaylist), content: Form( key: _formKey, child: TextFormField( decoration: InputDecoration(labelText: AppLocalizations.of(context)!.name), textInputAction: TextInputAction.done, validator: (value) { if (value == null || value.isEmpty) { return AppLocalizations.of(context)!.required; } return null; }, onFieldSubmitted: (_) async => await _submit(), onSaved: (newValue) => _name = newValue, ), ), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(false), child: Text(MaterialLocalizations.of(context).cancelButtonLabel), ), TextButton( onPressed: _isSubmitting ? null : () async => await _submit(), child: Text(AppLocalizations.of(context)!.createButtonLabel), ), ], ); } Future _submit() async { if (_formKey.currentState != null && _formKey.currentState!.validate()) { setState(() { _isSubmitting = true; }); _formKey.currentState!.save(); try { await _jellyfinApiHelper.createNewPlaylist(NewPlaylist( name: _name, ids: [widget.itemToAdd], userId: _finampUserHelper.currentUser!.id, )); if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(AppLocalizations.of(context)!.playlistCreated), )); Navigator.of(context).pop(true); } catch (e) { errorSnackbar(e, context); setState(() { _isSubmitting = false; }); return; } } } }