Advertisement
amonnoris

connection_history_page.dart

Oct 5th, 2024
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 3.87 KB | Source Code | 0 0
  1. // lib/pages/connection_history_page.dart
  2.  
  3. import 'package:flutter/material.dart';
  4. import 'package:provider/provider.dart';
  5. import '../providers/app_state.dart';
  6. import '../models/connection_log.dart';
  7. import '../utils/format_utils.dart';
  8.  
  9. class ConnectionHistoryPage extends StatelessWidget {
  10.   const ConnectionHistoryPage({super.key});
  11.  
  12.   @override
  13.   Widget build(BuildContext context) {
  14.     final appState = Provider.of<AppState>(context);
  15.     final List<ConnectionLog> logs =
  16.         appState.connectionLogs.reversed.toList(); // Show latest first
  17.  
  18.     return Column(
  19.       children: [
  20.         // Clear History Button
  21.         Padding(
  22.           padding: const EdgeInsets.all(8.0),
  23.           child: ElevatedButton.icon(
  24.             onPressed: () {
  25.               _confirmClearHistory(context, appState);
  26.             },
  27.             icon: const Icon(Icons.delete_forever),
  28.             label: const Text('Clear History'),
  29.             style: ElevatedButton.styleFrom(
  30.               backgroundColor: Colors.red,
  31.             ),
  32.           ),
  33.         ),
  34.         Expanded(
  35.           child: logs.isNotEmpty
  36.               ? ListView.builder(
  37.                   itemCount: logs.length,
  38.                   itemBuilder: (context, index) {
  39.                     ConnectionLog log = logs[index];
  40.                     return Card(
  41.                       margin: const EdgeInsets.symmetric(
  42.                           horizontal: 10, vertical: 5),
  43.                       child: ListTile(
  44.                         leading: const Icon(Icons.history),
  45.                         title: Text(log.serverName),
  46.                         subtitle: Column(
  47.                           crossAxisAlignment: CrossAxisAlignment.start,
  48.                           children: [
  49.                             Text('Connected at: ${log.startTime.toLocal()}'),
  50.                             Text('Duration: ${formatDuration(log.duration)}'),
  51.                             Text(
  52.                                 'Data Uploaded: ${formatBytes(log.dataUploaded)}'),
  53.                             Text(
  54.                                 'Data Downloaded: ${formatBytes(log.dataDownloaded)}'),
  55.                           ],
  56.                         ),
  57.                       ),
  58.                     );
  59.                   },
  60.                 )
  61.               : const Center(
  62.                   child: Text(
  63.                     'No connection history available.',
  64.                     style: TextStyle(fontSize: 16),
  65.                   ),
  66.                 ),
  67.         ),
  68.       ],
  69.     );
  70.   }
  71.  
  72.   void _confirmClearHistory(BuildContext context, AppState appState) {
  73.     showDialog(
  74.       context: context,
  75.       builder: (BuildContext context) {
  76.         return AlertDialog(
  77.           title: const Text('Clear Connection History'),
  78.           content: const Text(
  79.               'Are you sure you want to clear all connection history?'),
  80.           actions: [
  81.             TextButton(
  82.               child: const Text('Cancel'),
  83.               onPressed: () {
  84.                 Navigator.of(context).pop(); // Dismiss the dialog
  85.               },
  86.             ),
  87.             TextButton(
  88.               child: const Text('Clear'),
  89.               onPressed: () {
  90.                 appState.clearConnectionLogs();
  91.                 Navigator.of(context).pop(); // Dismiss the dialog
  92.                 ScaffoldMessenger.of(context).showSnackBar(
  93.                   const SnackBar(content: Text('Connection history cleared.')),
  94.                 );
  95.               },
  96.             ),
  97.           ],
  98.         );
  99.       },
  100.     );
  101.   }
  102.  
  103.   String formatDuration(Duration duration) {
  104.     String twoDigits(int n) => n.toString().padLeft(2, '0');
  105.     String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
  106.     String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60));
  107.     return '${twoDigits(duration.inHours)}:$twoDigitMinutes:$twoDigitSeconds';
  108.   }
  109. }
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement