11import 'package:flutter/material.dart' ;
2+ import 'package:flutter/foundation.dart' ;
23import 'package:provider/provider.dart' ;
34import '../providers/app_provider.dart' ;
45import '../../core/constants/app_constants.dart' ;
56import '../../core/constants/api_constants.dart' ;
7+ import '../../core/di/injection_container.dart' ;
8+ import '../../data/datasources/app_local_datasource.dart' ;
69
710/// Server settings page
811class ServerSettingsPage extends StatefulWidget {
@@ -23,6 +26,19 @@ class _ServerSettingsPageState extends State<ServerSettingsPage> {
2326 final appProvider = context.read <AppProvider >();
2427 _hostController.text = appProvider.serverHost;
2528 _portController.text = appProvider.serverPort.toString ();
29+
30+ // Load saved server config from local storage and sync to UI/provider
31+ Future .microtask (() async {
32+ final local = sl <AppLocalDataSource >();
33+ final savedHost = await local.getServerHost ();
34+ final savedPort = await local.getServerPort ();
35+ if (savedHost != null && savedPort != null && mounted) {
36+ _hostController.text = savedHost;
37+ _portController.text = savedPort.toString ();
38+ // Keep provider state consistent so other parts reflect the same values
39+ appProvider.setServerConfig (savedHost, savedPort);
40+ }
41+ });
2642 }
2743
2844 @override
@@ -228,13 +244,27 @@ class _ServerSettingsPageState extends State<ServerSettingsPage> {
228244 final host = _hostController.text.trim ();
229245 final port = int .parse (_portController.text.trim ());
230246
247+ // On Android emulator, localhost/127.0.0.1 should point to 10.0.2.2
248+ // This mapping avoids accidental calls to the host machine's loopback.
249+ var mappedHost = host;
250+ final isAndroid = ! kIsWeb && defaultTargetPlatform == TargetPlatform .android;
251+ if (isAndroid && (host == '127.0.0.1' || host.toLowerCase () == 'localhost' )) {
252+ mappedHost = '10.0.2.2' ;
253+ }
254+
231255 final appProvider = context.read <AppProvider >();
232- final success = await appProvider.updateServerConfig (host , port);
256+ final success = await appProvider.updateServerConfig (mappedHost , port);
233257
234258 if (success && mounted) {
235- ScaffoldMessenger .of (
236- context,
237- ).showSnackBar (const SnackBar (content: Text ('Settings saved' )));
259+ final info = 'Settings saved: http://$mappedHost :$port ' ;
260+ ScaffoldMessenger .of (context).showSnackBar (SnackBar (content: Text (info)));
261+ if (mappedHost != host && mounted) {
262+ ScaffoldMessenger .of (context).showSnackBar (
263+ const SnackBar (
264+ content: Text ('Android emulator detected: mapped localhost to 10.0.2.2' ),
265+ ),
266+ );
267+ }
238268 } else if (mounted) {
239269 ScaffoldMessenger .of (context).showSnackBar (
240270 SnackBar (
0 commit comments