Riverpod + go_router с auth-guard, NavigationRail на широком экране и bottom bar на узком. Токены в flutter_secure_storage, на web access живёт в памяти. Интерцептор подставляет токен и делает ровно один refresh на 401. Деньги приходят строками и форматируются через Decimal: парсить их в double значило бы терять копейки ровно там, где бэкенд их бережёт.
12 lines
438 B
Dart
12 lines
438 B
Dart
import 'package:flutter/foundation.dart';
|
|
|
|
/// Backend origin. Override at build time:
|
|
/// `flutter run --dart-define=API_BASE_URL=https://fin.example.com`.
|
|
/// On web the default is the page's own origin (Caddy serves app and API together).
|
|
String apiBaseUrl() {
|
|
const fromEnv = String.fromEnvironment('API_BASE_URL');
|
|
if (fromEnv.isNotEmpty) return fromEnv;
|
|
if (kIsWeb) return Uri.base.origin;
|
|
return 'http://127.0.0.1:8000';
|
|
}
|