fix dimmed safearea and translate error messages

This commit is contained in:
Mikkel Troels Kongsted 2025-03-20 13:24:28 +01:00
parent 0b2b6f5a18
commit 57133e7a13
3 changed files with 117 additions and 54 deletions

View File

@ -19,6 +19,9 @@ import 'package:mobile/controllers/routing.dart';
void main() { void main() {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
ErrorMessages.init("danish");
final server = BackendServer(); final server = BackendServer();
final usersController = UsersController(server: server); final usersController = UsersController(server: server);
final sessionController = SessionController(server: server); final sessionController = SessionController(server: server);

View File

@ -3,6 +3,7 @@ import 'package:mobile/controllers/routing.dart';
import 'package:mobile/controllers/cart.dart'; import 'package:mobile/controllers/cart.dart';
import 'package:mobile/controllers/paying_state.dart'; import 'package:mobile/controllers/paying_state.dart';
import 'package:mobile/results.dart'; import 'package:mobile/results.dart';
import 'package:mobile/server/server.dart';
import 'package:mobile/utils/price.dart'; import 'package:mobile/utils/price.dart';
import 'package:mobile/widgets/primary_button.dart'; import 'package:mobile/widgets/primary_button.dart';
import 'package:mobile/widgets/receipt_item.dart'; import 'package:mobile/widgets/receipt_item.dart';
@ -20,10 +21,10 @@ class FinishShoppingPage extends StatelessWidget {
final cart = cartController.allCartItems(); final cart = cartController.allCartItems();
return Scaffold( return Scaffold(
body: SafeArea( body: Stack(
child: Stack(
children: [ children: [
Column( SafeArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
const BackButton(), const BackButton(),
@ -57,14 +58,13 @@ class FinishShoppingPage extends StatelessWidget {
payingStateRepo.next(); payingStateRepo.next();
await Future.delayed(const Duration(seconds: 1)); await Future.delayed(const Duration(seconds: 1));
if (await cartController.purchase() if (await cartController.purchase()
is Err<Null, String>) { case Err<Null, String>(value: final message)) {
if (context.mounted) { if (context.mounted) {
showDialog<String>( showDialog<String>(
context: context, context: context,
builder: (BuildContext context) => builder: (BuildContext context) =>
AlertDialog( AlertDialog(
content: const Text( content: Text(ErrorMessages.fancy(message)),
'Du har desværre ikke råd til at købe dette'),
actions: <Widget>[ actions: <Widget>[
TextButton( TextButton(
onPressed: () => onPressed: () =>
@ -93,6 +93,7 @@ class FinishShoppingPage extends StatelessWidget {
), ),
], ],
), ),
),
if (payingStateRepo.state != PayingState.unset) ...[ if (payingStateRepo.state != PayingState.unset) ...[
Container( Container(
color: Colors.black.withValues(alpha: 0.5), color: Colors.black.withValues(alpha: 0.5),
@ -142,7 +143,6 @@ class FinishShoppingPage extends StatelessWidget {
) )
], ],
), ),
),
); );
} }
} }

View File

@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mobile/models/cart_item.dart'; import 'package:mobile/models/cart_item.dart';
import 'package:mobile/models/product.dart'; import 'package:mobile/models/product.dart';
@ -32,3 +33,62 @@ abstract class Server {
Image productImage(int productId); Image productImage(int productId);
} }
class ErrorMessages {
final String language;
static ErrorMessages? _instance;
static init(String language) {
_instance = ErrorMessages(language: language);
}
static ErrorMessages get instance {
final instance = _instance;
if (instance == null) {
throw NotInitialized();
}
return instance;
}
ErrorMessages({required this.language});
static String fancy(String message) {
return instance._fancy(message);
}
String _fancy(String message) {
switch (language) {
case "danish":
return _fancyDanish(message);
default:
return "error: $message";
}
}
String _fancyDanish(String message) {
switch (message) {
case "insufficient funds":
return "Du har desværre ikke nok penge på kontoen.";
default:
if (kDebugMode) {
throw NotTranslated(message: message);
}
return "error: $message";
}
}
}
class NotInitialized implements Exception {}
class NotTranslated implements Exception {
final String message;
NotTranslated({required this.message});
@override
String toString() {
return "${super.toString()}: message \"$message\" is not translated";
}
}