79 lines
2.5 KiB
Dart
79 lines
2.5 KiB
Dart
import 'package:flutter/foundation.dart';
|
|
|
|
class AppConfig {
|
|
// ============================================================================
|
|
// BASE URL CONFIGURATION
|
|
// ============================================================================
|
|
|
|
/// Host server untuk production (override via --dart-define=PROD_SERVER_URL=...).
|
|
static const String _productionServer = String.fromEnvironment(
|
|
'PROD_SERVER_URL',
|
|
// defaultValue: 'http://10.133.61.99:8000',
|
|
defaultValue: 'https://spk-kontrakan.taskbuddy.web.id',
|
|
);
|
|
|
|
/// Host server untuk development (override via --dart-define=DEV_SERVER_URL=...).
|
|
static const String _developmentServer = String.fromEnvironment(
|
|
'DEV_SERVER_URL',
|
|
// defaultValue: 'http://10.133.61.99:8000',
|
|
defaultValue: 'https://spk-kontrakan.taskbuddy.web.id',
|
|
);
|
|
|
|
static String _serverUrl = _normalizeServerUrl(
|
|
kReleaseMode ? _productionServer : _developmentServer,
|
|
);
|
|
|
|
static String get serverUrl => _serverUrl;
|
|
|
|
/// API Laravel
|
|
static String get baseUrl => '$_serverUrl/api';
|
|
|
|
/// URL gambar/file public
|
|
static String get storageUrl => _serverUrl;
|
|
|
|
/// Override server URL jika perlu
|
|
static void setServerUrl(String url) {
|
|
_serverUrl = _normalizeServerUrl(url);
|
|
}
|
|
|
|
/// Normalisasi URL agar selalu konsisten untuk request API.
|
|
static String _normalizeServerUrl(String url) {
|
|
final raw = url.trim();
|
|
if (raw.isEmpty) return _developmentServer;
|
|
|
|
var normalized = raw;
|
|
|
|
// Default ke HTTP jika skema tidak dicantumkan.
|
|
if (!normalized.startsWith('http://') &&
|
|
!normalized.startsWith('https://')) {
|
|
normalized = 'http://$normalized';
|
|
}
|
|
|
|
// Hilangkan trailing slash agar baseUrl tidak menjadi //api.
|
|
while (normalized.endsWith('/')) {
|
|
normalized = normalized.substring(0, normalized.length - 1);
|
|
}
|
|
|
|
final uri = Uri.tryParse(normalized);
|
|
if (uri == null) return _developmentServer;
|
|
|
|
// Untuk host lokal/IP tanpa port, default ke 8000.
|
|
if (!uri.hasPort &&
|
|
(uri.host == 'localhost' ||
|
|
RegExp(r'^\d+\.\d+\.\d+\.\d+$').hasMatch(uri.host))) {
|
|
normalized = '${uri.scheme}://${uri.host}:8000';
|
|
}
|
|
|
|
return normalized;
|
|
}
|
|
|
|
// Timeouts
|
|
static const Duration connectionTimeout = Duration(seconds: 30);
|
|
static const Duration receiveTimeout = Duration(seconds: 30);
|
|
|
|
// Local Storage Keys
|
|
static const String tokenKey = 'auth_token';
|
|
static const String userKey = 'user_data';
|
|
static const String deviceTokenKey = 'device_token';
|
|
}
|