All checks were successful
continuous-integration/drone/push Build is passing
57 lines
1.6 KiB
Dart
57 lines
1.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:monitor2/log/class_sitelog.dart';
|
|
|
|
class LogsPage extends StatefulWidget {
|
|
final List<SiteLog> logs;
|
|
|
|
const LogsPage({super.key, required this.logs});
|
|
|
|
@override
|
|
State<LogsPage> createState() => _LogsPageState();
|
|
}
|
|
|
|
class _LogsPageState extends State<LogsPage> {
|
|
String sortBy = 'date';
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final logs = List.of(widget.logs);
|
|
if (sortBy == 'date') {
|
|
logs.sort((a, b) => b.date.compareTo(a.date));
|
|
} else {
|
|
logs.sort((a, b) => a.statusCode.compareTo(b.statusCode));
|
|
}
|
|
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: Text('📝 Logs'),
|
|
actions: [
|
|
PopupMenuButton<String>(
|
|
onSelected: (value) => setState(() => sortBy = value),
|
|
itemBuilder: (context) => [
|
|
PopupMenuItem(value: 'date', child: Text('Trier par date')),
|
|
PopupMenuItem(value: 'status', child: Text('Trier par statut')),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
body: ListView.builder(
|
|
itemCount: logs.length,
|
|
itemBuilder: (context, index) {
|
|
final log = logs[index];
|
|
final isOk = log.statusCode == 200;
|
|
return ListTile(
|
|
leading: Text(isOk ? '🟢' : '🔴', style: TextStyle(fontSize: 20)),
|
|
title: Text(log.url),
|
|
subtitle: Text(
|
|
'${log.date.toLocal()} - '
|
|
'${isOk ? 'OK' : 'Erreur: ${log.statusCode == -1 ? 'Timeout/Network' : log.statusCode}'}',
|
|
),
|
|
tileColor: isOk ? null : Colors.red.withAlpha(10),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|