diff --git a/lib/main.dart b/lib/main.dart index 76271ae..6e35cb2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,7 +12,6 @@ import 'services/settings_service.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final settings = SettingsService(); - await settings.initialize(); ApiConfig.setBaseUrl(settings.baseUrl); final bgGeo = BackgroundGeoService(); await bgGeo.init(); @@ -47,7 +46,7 @@ class MyApp extends StatelessWidget { supportedLocales: const [Locale('en', '')], initialRoute: '/', routes: { - '/': (_) => const LoginScreen(), + '/': (_) => LoginScreen(), '/map': (_) => const MapScreen(), }, ), diff --git a/lib/screens/login_screen.dart b/lib/screens/login_screen.dart index 0fe7a56..a25f5fc 100644 --- a/lib/screens/login_screen.dart +++ b/lib/screens/login_screen.dart @@ -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 final TextEditingController _secretKeyController = TextEditingController(); final TextEditingController _serverUrlController = TextEditingController(); + bool savedAuth = false; + @override void initState() { super.initState(); @@ -32,6 +32,11 @@ class _LoginScreenState extends State }); final settings = context.read(); _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 Widget build(BuildContext context) { final authProvider = context.watch(); final settings = context.read(); - + if (savedAuth) { + login( + _loginController.text, + _passwordController.text, + context, + authProvider, + settings, + ); + } return Scaffold( resizeToAvoidBottomInset: true, body: SingleChildScrollView( @@ -76,7 +89,7 @@ class _LoginScreenState extends State 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 } } 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 ), ); } + + Future 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 + } + } } diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 490f625..bbc8401 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -1,19 +1,25 @@ import 'package:shared_preferences/shared_preferences.dart'; class SettingsService { + SettingsService(){initialize();} static const String _baseUrlKey = 'server_base_url'; static const String _defaultBaseUrl = 'https://family-safety.onrender.com/api'; + static const String _loginKey = "login"; + static const String _pwdKey = "pwd"; String _baseUrl = _defaultBaseUrl; bool _initialized = false; - String get baseUrl => _baseUrl; + String? login; + String? pwd; Future initialize() async { if (_initialized) return; final prefs = await SharedPreferences.getInstance(); _baseUrl = prefs.getString(_baseUrlKey) ?? _defaultBaseUrl; + login = prefs.getString(_loginKey); + pwd = prefs.getString(_pwdKey); _initialized = true; } @@ -23,6 +29,14 @@ class SettingsService { await prefs.setString(_baseUrlKey, url); } + Future saveAuth(String user, String pass) async { + login = user; + pwd = pass; + final prefs = await SharedPreferences.getInstance(); + await prefs.setString(_loginKey, user); + await prefs.setString(_loginKey, user); + } + void resetToDefault() { _baseUrl = _defaultBaseUrl; }