@@ -8,7 +8,7 @@ import 'package:mostro_mobile/core/app_theme.dart';
88import 'package:mostro_mobile/core/config.dart' ;
99import 'package:mostro_mobile/features/settings/settings_provider.dart' ;
1010import 'package:mostro_mobile/generated/l10n.dart' ;
11- import 'package:mostro_mobile/services/logger_service.dart' ;
11+ import 'package:mostro_mobile/services/logger_service.dart' as logger_service ;
1212import 'package:path_provider/path_provider.dart' ;
1313import 'package:share_plus/share_plus.dart' ;
1414
@@ -57,7 +57,7 @@ class _LogsScreenState extends ConsumerState<LogsScreen> {
5757 super .dispose ();
5858 }
5959
60- List <LogEntry > _filterLogs (List <LogEntry > logs) {
60+ List <logger_service. LogEntry > _filterLogs (List <logger_service. LogEntry > logs) {
6161 var filtered = logs;
6262
6363 if (_selectedLevel != null ) {
@@ -80,63 +80,68 @@ class _LogsScreenState extends ConsumerState<LogsScreen> {
8080
8181 @override
8282 Widget build (BuildContext context) {
83- final allLogs = MemoryLogOutput .instance.getAllLogs ();
84- final logs = _filterLogs (allLogs);
85-
86- return Stack (
87- children: [
88- Scaffold (
89- backgroundColor: AppTheme .backgroundDark,
90- appBar: AppBar (
91- backgroundColor: Colors .transparent,
92- elevation: 0 ,
93- title: Text (
94- S .of (context)! .logsReport,
95- style: const TextStyle (
96- color: AppTheme .textPrimary,
97- fontSize: 20 ,
98- fontWeight: FontWeight .w600,
99- ),
100- ),
101- iconTheme: const IconThemeData (color: AppTheme .textPrimary),
102- actions: [
103- IconButton (
104- icon: const Icon (Icons .delete_outline),
105- onPressed: logs.isEmpty ? null : _showClearConfirmation,
106- tooltip: S .of (context)! .clearLogs,
107- ),
108- ],
109- ),
110- body: Column (
111- children: [
112- _buildStatsHeader (allLogs.length, logs.length),
113- _buildSearchBar (),
114- _buildFilterChips (),
115- Expanded (
116- child: logs.isEmpty
117- ? _buildEmptyState ()
118- : _buildLogsList (logs),
83+ return StreamBuilder <List <logger_service.LogEntry >>(
84+ stream: logger_service.watchLogs (),
85+ builder: (context, snapshot) {
86+ final allLogs = snapshot.data ?? [];
87+ final logs = _filterLogs (allLogs);
88+
89+ return Stack (
90+ children: [
91+ Scaffold (
92+ backgroundColor: AppTheme .backgroundDark,
93+ appBar: AppBar (
94+ backgroundColor: Colors .transparent,
95+ elevation: 0 ,
96+ title: Text (
97+ S .of (context)! .logsReport,
98+ style: const TextStyle (
99+ color: AppTheme .textPrimary,
100+ fontSize: 20 ,
101+ fontWeight: FontWeight .w600,
102+ ),
103+ ),
104+ iconTheme: const IconThemeData (color: AppTheme .textPrimary),
105+ actions: [
106+ IconButton (
107+ icon: const Icon (Icons .delete_outline),
108+ onPressed: logs.isEmpty ? null : _showClearConfirmation,
109+ tooltip: S .of (context)! .clearLogs,
110+ ),
111+ ],
119112 ),
120- if (allLogs.isNotEmpty) _buildActionButtons (),
121- ],
122- ),
123- ),
124- if (_showScrollToTop)
125- Positioned (
126- right: 16 ,
127- bottom: 100 ,
128- child: FloatingActionButton (
129- mini: true ,
130- backgroundColor: AppTheme .activeColor,
131- onPressed: _scrollToTop,
132- child: const Icon (
133- Icons .arrow_upward,
134- color: Colors .white,
135- size: 20 ,
113+ body: Column (
114+ children: [
115+ _buildStatsHeader (allLogs.length, logs.length),
116+ _buildSearchBar (),
117+ _buildFilterChips (),
118+ Expanded (
119+ child: logs.isEmpty
120+ ? _buildEmptyState ()
121+ : _buildLogsList (logs),
122+ ),
123+ if (allLogs.isNotEmpty) _buildActionButtons (),
124+ ],
136125 ),
137126 ),
138- ),
139- ],
127+ if (_showScrollToTop)
128+ Positioned (
129+ right: 16 ,
130+ bottom: 100 ,
131+ child: FloatingActionButton (
132+ mini: true ,
133+ backgroundColor: AppTheme .activeColor,
134+ onPressed: _scrollToTop,
135+ child: const Icon (
136+ Icons .arrow_upward,
137+ color: Colors .white,
138+ size: 20 ,
139+ ),
140+ ),
141+ ),
142+ ],
143+ );
144+ },
140145 );
141146 }
142147
@@ -320,18 +325,18 @@ class _LogsScreenState extends ConsumerState<LogsScreen> {
320325 );
321326 }
322327
323- Widget _buildLogsList (List <LogEntry > logs) {
328+ Widget _buildLogsList (List <logger_service. LogEntry > logs) {
324329 return ListView .builder (
325330 controller: _scrollController,
326331 itemCount: logs.length,
327332 itemBuilder: (context, index) {
328- final log = logs[logs.length - 1 - index];
333+ final log = logs[index];
329334 return _buildLogItem (log);
330335 },
331336 );
332337 }
333338
334- Widget _buildLogItem (LogEntry log) {
339+ Widget _buildLogItem (logger_service. LogEntry log) {
335340 final color = _getLogLevelColor (log.level);
336341 final icon = _getLogLevelIcon (log.level);
337342 final levelStr = log.level.toString ().split ('.' ).last.toUpperCase ();
@@ -419,7 +424,7 @@ class _LogsScreenState extends ConsumerState<LogsScreen> {
419424 );
420425 }
421426
422- Future <void > _copyLogToClipboard (LogEntry log) async {
427+ Future <void > _copyLogToClipboard (logger_service. LogEntry log) async {
423428 await Clipboard .setData (ClipboardData (text: log.format ()));
424429 if (mounted) {
425430 ScaffoldMessenger .of (context).showSnackBar (
@@ -549,7 +554,7 @@ class _LogsScreenState extends ConsumerState<LogsScreen> {
549554 }
550555
551556 Future <File > _createLogFile () async {
552- final logs = MemoryLogOutput .instance .getAllLogs ();
557+ final logs = await logger_service .getAllLogs ();
553558 final buffer = StringBuffer ();
554559
555560 buffer.writeln ('Mostro Mobile - Logs Report' );
@@ -640,10 +645,11 @@ class _LogsScreenState extends ConsumerState<LogsScreen> {
640645 ),
641646 ),
642647 TextButton (
643- onPressed: () {
644- MemoryLogOutput .instance.clear ();
645- Navigator .of (context).pop ();
646- setState (() {});
648+ onPressed: () async {
649+ await logger_service.clearAllLogs ();
650+ if (context.mounted) {
651+ Navigator .of (context).pop ();
652+ }
647653 },
648654 child: Text (
649655 S .of (context)! .clear,
0 commit comments