Files
Openlib/lib/ui/components/error_widget.dart
2024-08-23 23:35:09 +02:00

171 lines
5.1 KiB
Dart

// Flutter imports:
import 'package:flutter/material.dart';
// Package imports:
import 'package:flutter_svg/svg.dart';
// Project imports:
import 'package:openlib/ui/extensions.dart';
// ignore: must_be_immutable
class CustomErrorWidget extends StatelessWidget {
final Object error;
final StackTrace stackTrace;
VoidCallback? onRefresh;
CustomErrorWidget(
{super.key,
required this.error,
required this.stackTrace,
this.onRefresh});
@override
Widget build(BuildContext context) {
if (error.toString().contains("socketException")) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
SizedBox(
width: 200,
child: SvgPicture.asset(
'assets/no_internet.svg',
width: 200,
),
),
const SizedBox(
height: 30,
),
Text(
"Unable to access internet",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: "#4D4D4D".toColor(),
overflow: TextOverflow.ellipsis,
),
),
SizedBox(
height: 80,
child: FittedBox(
fit: BoxFit.none,
child: TextButton(
style: TextButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.secondary,
textStyle: const TextStyle(
fontSize: 13,
fontWeight: FontWeight.w900,
color: Colors.white,
)),
onPressed: onRefresh,
child: const Padding(
padding: EdgeInsets.fromLTRB(21, 9, 21, 9),
child: Text('Refresh'),
),
),
),
),
],
);
} else {
return SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const SizedBox(
height: 150,
),
SizedBox(
width: 200,
child: SvgPicture.asset(
'assets/error_fixing_bugs.svg',
width: 200,
),
),
const SizedBox(
height: 10,
),
const Text(
"Something Went Wrong!",
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Colors.black,
),
textAlign: TextAlign.center,
),
const SizedBox(
height: 30,
),
Padding(
padding: const EdgeInsets.fromLTRB(20, 20, 20, 5),
child: Text(
"Error",
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.secondary,
),
textAlign: TextAlign.start,
),
),
Padding(
padding: const EdgeInsets.fromLTRB(20, 5, 20, 20),
child: SizedBox(
width: double.infinity,
child: Padding(
padding: const EdgeInsets.all(7.0),
child: Text(
error.toString(),
textAlign: TextAlign.start,
style: const TextStyle(
fontSize: 13,
fontWeight: FontWeight.bold,
color: Colors.black,
),
),
),
),
),
Padding(
padding: const EdgeInsets.fromLTRB(20, 5, 20, 5),
child: Text(
"Stack Trace",
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.secondary,
),
textAlign: TextAlign.start,
),
),
Padding(
padding: const EdgeInsets.fromLTRB(20, 5, 20, 20),
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: const Color.fromARGB(255, 255, 186, 186),
borderRadius: BorderRadius.circular(5)),
child: Padding(
padding: const EdgeInsets.all(7.0),
child: Text(
stackTrace.toString(),
textAlign: TextAlign.start,
style: const TextStyle(
fontSize: 13,
fontWeight: FontWeight.bold,
color: Colors.black,
),
),
),
),
)
],
),
);
}
}
}