refactor: Enhance logs page with selectable text and improved scroll behavior

This commit is contained in:
2025-01-08 22:59:21 +08:00
parent ff2d7dbb52
commit 353227ac15

View File

@@ -1,3 +1,5 @@
import 'dart:math';
import 'dart:ui';
import 'package:advanced_datatable/advanced_datatable_source.dart'; import 'package:advanced_datatable/advanced_datatable_source.dart';
import 'package:advanced_datatable/datatable.dart'; import 'package:advanced_datatable/datatable.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -100,12 +102,14 @@ class _LogDataSource extends AdvancedDataTableSource<LogEntry> {
DataRow? getDataRow(LogEntry? log) { DataRow? getDataRow(LogEntry? log) {
if (log == null) return null; if (log == null) return null;
var messages = log.message.split("\n");
var message = messages.getRange(0, min(messages.length, 2)).join("\n");
return DataRow(cells: [ return DataRow(cells: [
DataCell( DataCell(SelectableText(
Text(DateFormat.yMd(locale).add_jms().format(log.time.toLocal()))), DateFormat.yMd(locale).add_jms().format(log.time.toLocal()))),
DataCell(Text(log.message, maxLines: 2)), DataCell(SelectableText(message, minLines: 1, maxLines: 2)),
DataCell(Text(log.level.name)), DataCell(SelectableText(log.level.name)),
DataCell(Text(log.type)), DataCell(SelectableText(log.type)),
]); ]);
} }
@@ -191,29 +195,38 @@ class _LogsPage extends State<LogsPage> with ThemeModeWidget, IsTopWidget2 {
body: _pageMode body: _pageMode
? _dataSource != null ? _dataSource != null
? SingleChildScrollView( ? SingleChildScrollView(
child: AdvancedPaginatedDataTable( child: ScrollConfiguration(
columns: <DataColumn>[ behavior: ScrollConfiguration.of(context).copyWith(
DataColumn(label: Text(i18n.time)), dragDevices: {
DataColumn(label: Text(i18n.message)), PointerDeviceKind.touch,
DataColumn(label: Text(i18n.level)), PointerDeviceKind.mouse,
DataColumn(label: Text(i18n.type)), PointerDeviceKind.trackpad,
], },
source: _dataSource!, ),
rowsPerPage: _size, child: (AdvancedPaginatedDataTable(
onPageChanged: (page) { columns: <DataColumn>[
_page = page ~/ _size + 1; DataColumn(label: Text(i18n.time)),
updateRoute(context); DataColumn(label: Text(i18n.message)),
}, DataColumn(label: Text(i18n.level)),
showHorizontalScrollbarAlways: true, DataColumn(label: Text(i18n.type)),
showFirstLastButtons: true, ],
initialFirstRowIndex: _offset, source: _dataSource!,
onRowsPerPageChanged: (size) { rowsPerPage: _size,
setState(() { onPageChanged: (page) {
_size = size ?? 10; _page = page ~/ _size + 1;
_page = _offset ~/ _size + 1; updateRoute(context);
updateRoute(context); },
}); showHorizontalScrollbarAlways: true,
})) showFirstLastButtons: true,
initialFirstRowIndex: _offset,
onRowsPerPageChanged: (size) {
setState(() {
_size = size ?? 10;
_page = _offset ~/ _size + 1;
updateRoute(context);
});
},
addEmptyRows: false))))
: const Center(child: CircularProgressIndicator()) : const Center(child: CircularProgressIndicator())
: Container()); : Container());
} }