diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 60c4730..40c2721 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -19,7 +19,7 @@
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
CFBundleDisplayName
- Lbjconsole
+ LBJ Console
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -13,7 +13,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- lbjconsole
+ LBJ Console
CFBundlePackageType
APPL
CFBundleShortVersionString
diff --git a/lib/screens/history_screen.dart b/lib/screens/history_screen.dart
index 888da8e..db1d2c1 100644
--- a/lib/screens/history_screen.dart
+++ b/lib/screens/history_screen.dart
@@ -33,6 +33,7 @@ class HistoryScreenState extends State {
final ScrollController _scrollController = ScrollController();
bool _isAtTop = true;
MergeSettings _mergeSettings = MergeSettings();
+ double _itemHeightCache = 0.0;
final Map _mapOptimalZoom = {};
final Map _mapCalculating = {};
@@ -123,6 +124,9 @@ class HistoryScreenState extends State {
if (!isNewRecord) return;
if (mounted) {
+ final previousScrollOffset = _scrollController.hasClients ? _scrollController.offset : 0.0;
+ final previousItemCount = _displayItems.length;
+
final allRecords = await DatabaseService.instance.getAllRecords();
final items = MergeService.getMixedList(allRecords, _mergeSettings);
@@ -131,13 +135,30 @@ class HistoryScreenState extends State {
_displayItems.addAll(items);
});
- if (_isAtTop && _scrollController.hasClients) {
- _scrollController.jumpTo(0.0);
+ if (_scrollController.hasClients) {
+ if (_isAtTop) {
+ _scrollController.jumpTo(0.0);
+ } else {
+ final newItemCount = items.length;
+ final itemDifference = newItemCount - previousItemCount;
+
+ if (itemDifference > 0 && previousScrollOffset > 0) {
+ final itemHeight = _getEstimatedItemHeight();
+ final adjustedOffset = previousScrollOffset + (itemDifference * itemHeight);
+
+ _scrollController.jumpTo(adjustedOffset.clamp(0.0, _scrollController.position.maxScrollExtent));
+ }
+ }
}
}
- } catch (e) {
- print('添加新纪录失败: $e');
+ } catch (e) {}
+ }
+
+ double _getEstimatedItemHeight() {
+ if (_itemHeightCache > 0) {
+ return _itemHeightCache;
}
+ return 85.0;
}
bool _hasDataChanged(List