mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-07-08 01:30:28 +08:00
refactor: Enhance logs page with selectable text and improved scroll behavior
This commit is contained in:
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user