+add login save
This commit is contained in:
+1
-2
@@ -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(),
|
||||
},
|
||||
),
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<void> 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<void> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user