+add login save

This commit is contained in:
dmit.b
2026-07-05 09:51:18 +03:00
parent 2a3e6a642b
commit f011a121d7
3 changed files with 57 additions and 10 deletions
+41 -7
View File
@@ -1,9 +1,7 @@
import 'dart:convert';
import 'package:provider/provider.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:provider/provider.dart';
import '../config/api.dart';
import '../providers/auth_provider.dart';
import '../services/settings_service.dart';
@@ -23,6 +21,8 @@ class _LoginScreenState extends State<LoginScreen>
final TextEditingController _secretKeyController = TextEditingController();
final TextEditingController _serverUrlController = TextEditingController();
bool savedAuth = false;
@override
void initState() {
super.initState();
@@ -32,6 +32,11 @@ class _LoginScreenState extends State<LoginScreen>
});
final settings = context.read<SettingsService>();
_serverUrlController.text = settings.baseUrl;
_loginController.text = settings.login ?? "";
_passwordController.text = settings.pwd ?? "";
if (settings.login != null && settings.pwd != null) {
savedAuth = true;
}
}
@override
@@ -48,7 +53,15 @@ class _LoginScreenState extends State<LoginScreen>
Widget build(BuildContext context) {
final authProvider = context.watch<AuthProvider>();
final settings = context.read<SettingsService>();
if (savedAuth) {
login(
_loginController.text,
_passwordController.text,
context,
authProvider,
settings,
);
}
return Scaffold(
resizeToAvoidBottomInset: true,
body: SingleChildScrollView(
@@ -76,7 +89,7 @@ class _LoginScreenState extends State<LoginScreen>
TextField(
controller: _serverUrlController,
decoration: const InputDecoration(
labelText: 'Server URL',
labelText: 'Адрес сервера',
hintText: 'https://example.com/api',
border: OutlineInputBorder(),
prefixIcon: Icon(Icons.cloud_outlined),
@@ -175,11 +188,15 @@ class _LoginScreenState extends State<LoginScreen>
}
} else {
if (_loginController.text.length <= 4) {
authProvider.setError('Login must be more than 4 characters');
authProvider.setError(
'Login must be more than 4 characters',
);
return;
}
if (_passwordController.text.length <= 8) {
authProvider.setError('Password must be more than 8 characters');
authProvider.setError(
'Password must be more than 8 characters',
);
return;
}
try {
@@ -212,4 +229,21 @@ class _LoginScreenState extends State<LoginScreen>
),
);
}
Future<void> login(
String login,
String pwd,
BuildContext ctx,
AuthProvider authProvider,
SettingsService settings,
) async {
try {
await authProvider.login(login, pwd);
settings.saveAuth(login, pwd);
if (!ctx.mounted) return;
Navigator.of(ctx).pushReplacementNamed('/map');
} catch (e) {
// Error is handled by provider
}
}
}