+add login save
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user