Auto-Anmeldung: doppelten Login-Request beim App-Start verhindert (Race durch IndexedStack)
Betraf alle drei Nutzer (Dustin, Baka, Tinker), nicht nur einen: IndexedStack baut Download-Tab und YT-Suche beim App-Start gleichzeitig, beide loesen unabhaengig voneinander autoAnmelden() aus. Ohne In-Flight-Absicherung gingen zwei fast-gleichzeitige Login-Requests an denselben Server, von denen einer abgelehnt wurde - obwohl die Zugangsdaten korrekt waren. - BakaAuth.autoAnmelden() haengt einen ueberlappenden Aufruf jetzt an den bereits laufenden Login-Versuch an, statt einen zweiten Request zu senden. - Anmelde-Dialog im Download-Tab zeigt den tatsaechlich bekannten Navidrome-Benutzernamen statt immer "Baka" vorauszufuellen. - Navidrome-Dialog in den Einstellungen waehlt den zuletzt bekannten Benutzer vor statt immer "Baka".
This commit is contained in:
@@ -679,9 +679,10 @@ class _YouTubeBereichState extends State<_YouTubeBereich> {
|
||||
}
|
||||
|
||||
Future<void> _anmelden() async {
|
||||
final nav = context.read<DownloadService>().navidrome;
|
||||
await showDialog(
|
||||
context: context,
|
||||
builder: (_) => const _AnmeldeDialog(),
|
||||
builder: (_) => _AnmeldeDialog(benutzer: nav.benutzer),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -869,14 +870,18 @@ class _YouTubeBereichState extends State<_YouTubeBereich> {
|
||||
|
||||
/// Fragt Benutzername und Passwort ab und gibt beides zurück.
|
||||
class _AnmeldeDialog extends StatefulWidget {
|
||||
const _AnmeldeDialog();
|
||||
const _AnmeldeDialog({this.benutzer = ''});
|
||||
|
||||
/// Bereits bekannter Navidrome-Benutzername (leer, falls keiner bekannt) —
|
||||
/// vorausgefüllt statt immer "Baka" zu zeigen, egal wer die App nutzt.
|
||||
final String benutzer;
|
||||
|
||||
@override
|
||||
State<_AnmeldeDialog> createState() => _AnmeldeDialogState();
|
||||
}
|
||||
|
||||
class _AnmeldeDialogState extends State<_AnmeldeDialog> {
|
||||
final _benutzer = TextEditingController(text: 'Baka');
|
||||
late final _benutzer = TextEditingController(text: widget.benutzer);
|
||||
final _passwort = TextEditingController();
|
||||
bool _sichtbar = false;
|
||||
bool _verbindet = false;
|
||||
|
||||
Reference in New Issue
Block a user