Add Android support with configurable server URL and location permissions

- Add shared_preferences for persisting server URL
- Add SettingsService and PlatformService
- Add server URL input field on non-web platforms
- Make ApiConfig baseUrl configurable at runtime
- Add Android location permissions (ACCESS_FINE/COURSE_LOCATION, INTERNET)
- Request location permission on login and map init
- Fix geo_id type: use String instead of int (UUID format)
- Align share_service with API spec: remove unique_id, use share_id only
- Fix watch endpoint response: last_update instead of created_at
- Add error handling with SnackBars for geo operations
- Wrap login screen in SingleChildScrollView for keyboard handling
- Update map tile layer with userAgentPackageName for OSM
This commit is contained in:
dmit.b
2026-05-15 17:38:56 +03:00
parent ca90c6c3fc
commit f1e88b1ac3
26 changed files with 1255 additions and 297 deletions
+7 -7
View File
@@ -5,7 +5,7 @@ class ShareProvider with ChangeNotifier {
final ShareService _shareService;
String _shareId = '';
int _geoId = 0;
String _geoId = '';
bool _isLoading = false;
String _error = '';
@@ -19,7 +19,7 @@ class ShareProvider with ChangeNotifier {
: _shareService = shareService ?? ShareService();
String get shareId => _shareId;
int get geoId => _geoId;
String get geoId => _geoId;
bool get isLoading => _isLoading;
String get error => _error;
Map<String, dynamic>? get position => _position;
@@ -34,8 +34,8 @@ class ShareProvider with ChangeNotifier {
try {
final result = await _shareService.createShare(token, x, y);
_geoId = result['geo_id'];
_shareId = result['share_id'];
_geoId = result['geo_id']?.toString() ?? '';
_shareId = result['share_id']?.toString() ?? '';
notifyListeners();
} catch (e) {
_error = e.toString();
@@ -47,13 +47,13 @@ class ShareProvider with ChangeNotifier {
}
}
Future<void> getPosition(String token, String shareID) async {
Future<void> getPosition(String token, String shareId) async {
_isLoading = true;
_error = '';
notifyListeners();
try {
_position = await _shareService.getPosition(token, shareID);
_position = await _shareService.getPositionByShareId(token, shareId);
notifyListeners();
} catch (e) {
_error = e.toString();
@@ -67,7 +67,7 @@ class ShareProvider with ChangeNotifier {
void clearShare() {
_shareId = '';
_geoId = 0;
_geoId = '';
_position = null;
notifyListeners();
}