feat: implement global error handling with reusable dialog and widget for improved user feedback

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Nils-Johan Gynther
2026-04-30 12:01:47 +02:00
parent df1da1da2b
commit 5231ca42a7
6 changed files with 149 additions and 21 deletions
@@ -0,0 +1,38 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
/// Visar en global dialogruta med ett felmeddelande och en kopieringsknapp.
void showGlobalErrorDialog(BuildContext context, String errorMessage) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Fel'),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SelectableText(errorMessage),
],
),
actions: <Widget>[
TextButton(
child: const Text('Stäng'),
onPressed: () {
Navigator.of(context).pop();
},
),
TextButton(
child: const Text('Kopiera'),
onPressed: () {
Clipboard.setData(ClipboardData(text: errorMessage));
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Felmeddelande kopierat!')),
);
},
),
],
);
},
);
}
@@ -0,0 +1,40 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
/// En återanvändbar widget för att visa felmeddelanden med en kopieringsknapp.
class ErrorMessageWidget extends StatelessWidget {
final String errorMessage;
const ErrorMessageWidget({Key? key, required this.errorMessage}) : super(key: key);
@override
Widget build(BuildContext context) {
return AlertDialog(
title: const Text('Fel'),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SelectableText(errorMessage),
],
),
actions: <Widget>[
TextButton(
child: const Text('Stäng'),
onPressed: () {
Navigator.of(context).pop();
},
),
TextButton(
child: const Text('Kopiera'),
onPressed: () {
Clipboard.setData(ClipboardData(text: errorMessage));
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Felmeddelande kopierat!')),
);
},
),
],
);
}
}