mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-30 18:35:00 -04:00 
			
		
		
		
	* Bump to Flutter 3.13.0 * Updates permission status * Adds hidden to app livecycle state * Updates and switches to WakelockPlus * bump flutter version github action * mobile test version * fix format * video player * video uri * ios test * Update android target sdk requirement to PlayStore --------- Co-authored-by: Alex Tran <Alex.Tran@conductix.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
		
			
				
	
	
		
			191 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flutter/material.dart';
 | |
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:immich_mobile/shared/models/logger_message.model.dart';
 | |
| import 'package:flutter/services.dart';
 | |
| 
 | |
| class AppLogDetailPage extends HookConsumerWidget {
 | |
|   const AppLogDetailPage({super.key, required this.logMessage});
 | |
| 
 | |
|   final LoggerMessage logMessage;
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context, WidgetRef ref) {
 | |
|     var isDarkMode = Theme.of(context).brightness == Brightness.dark;
 | |
| 
 | |
|     buildStackMessage(String stackTrace) {
 | |
|       return Padding(
 | |
|         padding: const EdgeInsets.all(8.0),
 | |
|         child: Column(
 | |
|           crossAxisAlignment: CrossAxisAlignment.start,
 | |
|           children: [
 | |
|             Row(
 | |
|               mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|               crossAxisAlignment: CrossAxisAlignment.center,
 | |
|               children: [
 | |
|                 Padding(
 | |
|                   padding: const EdgeInsets.only(bottom: 8.0),
 | |
|                   child: Text(
 | |
|                     "STACK TRACES",
 | |
|                     style: TextStyle(
 | |
|                       fontSize: 12.0,
 | |
|                       color: Theme.of(context).primaryColor,
 | |
|                       fontWeight: FontWeight.bold,
 | |
|                     ),
 | |
|                   ),
 | |
|                 ),
 | |
|                 IconButton(
 | |
|                   onPressed: () {
 | |
|                     Clipboard.setData(ClipboardData(text: stackTrace))
 | |
|                         .then((_) {
 | |
|                       ScaffoldMessenger.of(context).showSnackBar(
 | |
|                         const SnackBar(content: Text("Copied to clipboard")),
 | |
|                       );
 | |
|                     });
 | |
|                   },
 | |
|                   icon: Icon(
 | |
|                     Icons.copy,
 | |
|                     size: 16.0,
 | |
|                     color: Theme.of(context).primaryColor,
 | |
|                   ),
 | |
|                 ),
 | |
|               ],
 | |
|             ),
 | |
|             Container(
 | |
|               decoration: BoxDecoration(
 | |
|                 color: isDarkMode ? Colors.grey[900] : Colors.grey[200],
 | |
|                 borderRadius: BorderRadius.circular(15.0),
 | |
|               ),
 | |
|               child: Padding(
 | |
|                 padding: const EdgeInsets.all(8.0),
 | |
|                 child: SelectableText(
 | |
|                   stackTrace,
 | |
|                   style: const TextStyle(
 | |
|                     fontSize: 12.0,
 | |
|                     fontWeight: FontWeight.bold,
 | |
|                     fontFamily: "Inconsolata",
 | |
|                   ),
 | |
|                 ),
 | |
|               ),
 | |
|             ),
 | |
|           ],
 | |
|         ),
 | |
|       );
 | |
|     }
 | |
| 
 | |
|     buildLogMessage(String message) {
 | |
|       return Padding(
 | |
|         padding: const EdgeInsets.all(8.0),
 | |
|         child: Column(
 | |
|           crossAxisAlignment: CrossAxisAlignment.start,
 | |
|           children: [
 | |
|             Row(
 | |
|               mainAxisAlignment: MainAxisAlignment.spaceBetween,
 | |
|               crossAxisAlignment: CrossAxisAlignment.center,
 | |
|               children: [
 | |
|                 Padding(
 | |
|                   padding: const EdgeInsets.only(bottom: 8.0),
 | |
|                   child: Text(
 | |
|                     "MESSAGE",
 | |
|                     style: TextStyle(
 | |
|                       fontSize: 12.0,
 | |
|                       color: Theme.of(context).primaryColor,
 | |
|                       fontWeight: FontWeight.bold,
 | |
|                     ),
 | |
|                   ),
 | |
|                 ),
 | |
|                 IconButton(
 | |
|                   onPressed: () {
 | |
|                     Clipboard.setData(ClipboardData(text: message)).then((_) {
 | |
|                       ScaffoldMessenger.of(context).showSnackBar(
 | |
|                         const SnackBar(content: Text("Copied to clipboard")),
 | |
|                       );
 | |
|                     });
 | |
|                   },
 | |
|                   icon: Icon(
 | |
|                     Icons.copy,
 | |
|                     size: 16.0,
 | |
|                     color: Theme.of(context).primaryColor,
 | |
|                   ),
 | |
|                 ),
 | |
|               ],
 | |
|             ),
 | |
|             Container(
 | |
|               decoration: BoxDecoration(
 | |
|                 color: isDarkMode ? Colors.grey[900] : Colors.grey[200],
 | |
|                 borderRadius: BorderRadius.circular(15.0),
 | |
|               ),
 | |
|               child: Padding(
 | |
|                 padding: const EdgeInsets.all(8.0),
 | |
|                 child: SelectableText(
 | |
|                   message,
 | |
|                   style: const TextStyle(
 | |
|                     fontSize: 12.0,
 | |
|                     fontWeight: FontWeight.bold,
 | |
|                     fontFamily: "Inconsolata",
 | |
|                   ),
 | |
|                 ),
 | |
|               ),
 | |
|             ),
 | |
|           ],
 | |
|         ),
 | |
|       );
 | |
|     }
 | |
| 
 | |
|     buildLogContext1(String context1) {
 | |
|       return Padding(
 | |
|         padding: const EdgeInsets.all(8.0),
 | |
|         child: Column(
 | |
|           crossAxisAlignment: CrossAxisAlignment.start,
 | |
|           children: [
 | |
|             Padding(
 | |
|               padding: const EdgeInsets.only(bottom: 8.0),
 | |
|               child: Text(
 | |
|                 "FROM",
 | |
|                 style: TextStyle(
 | |
|                   fontSize: 12.0,
 | |
|                   color: Theme.of(context).primaryColor,
 | |
|                   fontWeight: FontWeight.bold,
 | |
|                 ),
 | |
|               ),
 | |
|             ),
 | |
|             Container(
 | |
|               decoration: BoxDecoration(
 | |
|                 color: isDarkMode ? Colors.grey[900] : Colors.grey[200],
 | |
|                 borderRadius: BorderRadius.circular(15.0),
 | |
|               ),
 | |
|               child: Padding(
 | |
|                 padding: const EdgeInsets.all(8.0),
 | |
|                 child: SelectableText(
 | |
|                   context1.toString(),
 | |
|                   style: const TextStyle(
 | |
|                     fontSize: 12.0,
 | |
|                     fontWeight: FontWeight.bold,
 | |
|                     fontFamily: "Inconsolata",
 | |
|                   ),
 | |
|                 ),
 | |
|               ),
 | |
|             ),
 | |
|           ],
 | |
|         ),
 | |
|       );
 | |
|     }
 | |
| 
 | |
|     return Scaffold(
 | |
|       appBar: AppBar(
 | |
|         title: const Text("Log Detail"),
 | |
|       ),
 | |
|       body: SafeArea(
 | |
|         child: ListView(
 | |
|           children: [
 | |
|             buildLogMessage(logMessage.message),
 | |
|             if (logMessage.context1 != null)
 | |
|               buildLogContext1(logMessage.context1.toString()),
 | |
|             if (logMessage.context2 != null)
 | |
|               buildStackMessage(logMessage.context2.toString()),
 | |
|           ],
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |