refactor(empty-state): 空状态支持内容居中

This commit is contained in:
Zhou Weidong committed 2026-11-02 14:44:38 +08:00
1 parent 59fbd33059
commit 7463d3ee26
8 files changed
+131 -80

No files matched your search

+32 -27
View File
@@ -38,7 +38,6 @@ const double _synopsisFontSize = 12;
const double _synopsisLineHeight = 1.15;
const double _synopsisGap = 4;
const int _maxTags = 2;
const double _emptyListHeight = 360;
const double _loadMoreThreshold = 240;
final RegExp _tagSplitter = RegExp(r'[,/、·]');
@@ -124,37 +123,29 @@ class _FavoritesBody extends StatelessWidget {
);
}
if (favorites.error != null && favorites.cards.isEmpty) {
return _refreshable(
return _refreshableState(
favorites,
children: [
SizedBox(
height: _emptyListHeight,
child: EmptyState(
key: const Key('favorites-error'),
icon: Icons.cloud_off_rounded,
title: errorText(l10n, favorites.error, l10n.favoritesError),
actionLabel: l10n.retry,
actionKey: const Key('favorites-retry'),
onAction: () => unawaited(favorites.load()),
),
),
],
child: EmptyState(
key: const Key('favorites-error'),
icon: Icons.cloud_off_rounded,
title: errorText(l10n, favorites.error, l10n.favoritesError),
actionLabel: l10n.retry,
actionKey: const Key('favorites-retry'),
onAction: () => unawaited(favorites.load()),
stretchContent: true,
),
);
}
if (favorites.cards.isEmpty) {
return _refreshable(
return _refreshableState(
favorites,
children: [
SizedBox(
height: _emptyListHeight,
child: EmptyState(
key: const Key('favorites-empty'),
icon: Icons.star_border_rounded,
title: l10n.noFavorites,
subtitle: l10n.emptyHint,
),
),
],
child: EmptyState(
key: const Key('favorites-empty'),
icon: Icons.star_border_rounded,
title: l10n.noFavorites,
subtitle: l10n.emptyHint,
stretchContent: true,
),
);
}
return _refreshable(
@@ -205,6 +196,20 @@ class _FavoritesBody extends StatelessWidget {
);
}
Widget _refreshableState(
FavoriteController favorites, {
required Widget child,
}) {
return AppPullToRefresh(
onRefresh: favorites.load,
child: CustomScrollView(
key: const Key('favorites-empty-scroll'),
physics: AppPullToRefresh.physics,
slivers: [SliverFillRemaining(hasScrollBody: false, child: child)],
),
);
}
bool _onScroll(ScrollNotification notification) {
if (notification.depth != 0) return false;
final reachedBottom =