opt persist header

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-02-03 17:25:33 +08:00
parent 2596859778
commit 50561b8dc1
5 changed files with 118 additions and 75 deletions

View File

@@ -81,13 +81,14 @@ class _DynTopicPageState extends State<DynTopicPage> with DynMixin {
return SliverPersistentHeader(
pinned: true,
delegate: CustomSliverPersistentHeaderDelegate(
extent: 30,
extent: 36,
needRebuild: true,
bgColor: theme.colorScheme.surface,
child: Container(
height: 30,
height: 36,
padding: EdgeInsets.only(
left: 12 + padding.left,
top: 6,
bottom: 6,
),
child: Builder(
@@ -101,16 +102,14 @@ class _DynTopicPageState extends State<DynTopicPage> with DynMixin {
minHeight: 24,
),
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
borderRadius: const BorderRadius.all(
Radius.circular(25),
),
borderRadius: const .all(.circular(25)),
onPressed: (index) {
_controller.onSort(allSortBy[index].sortBy!);
(context as Element).markNeedsBuild();
},
isSelected: allSortBy.map((e) {
return e.sortBy == _controller.sortBy;
}).toList(),
isSelected: allSortBy
.map((e) => e.sortBy == _controller.sortBy)
.toList(),
children: allSortBy.map((e) {
return Text(
e.sortName!,

View File

@@ -107,7 +107,6 @@ class _LiveDmBlockPageState extends State<LiveDmBlockPage> {
delegate: CustomSliverPersistentHeaderDelegate(
extent: 48,
child: tabBar,
bgColor: null,
),
),
),

View File

@@ -160,7 +160,6 @@ class _MemberFavoriteState extends State<MemberFavorite>
},
),
),
bgColor: null,
),
),
Obx(() {

View File

@@ -6,7 +6,6 @@ import 'dart:math';
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/button/icon_button.dart';
import 'package:PiliPlus/common/widgets/custom_icon.dart';
import 'package:PiliPlus/common/widgets/custom_sliver_persistent_header_delegate.dart';
import 'package:PiliPlus/common/widgets/dialog/report.dart';
import 'package:PiliPlus/common/widgets/marquee.dart';
import 'package:PiliPlus/http/danmaku.dart';
@@ -1580,49 +1579,55 @@ class HeaderControlState extends State<HeaderControl>
if (ctr == null) return;
showBottomSheet((context, setState) {
final theme = Theme.of(context);
return Padding(
padding: const EdgeInsets.all(12),
child: Material(
clipBehavior: Clip.hardEdge,
return Container(
margin: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: theme.colorScheme.surface,
borderRadius: const BorderRadius.all(Radius.circular(12)),
child: CustomScrollView(
slivers: [
SliverPersistentHeader(
pinned: true,
delegate: CustomSliverPersistentHeaderDelegate(
child: Container(
height: 45,
padding: const EdgeInsets.symmetric(horizontal: 14),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: theme.colorScheme.outline.withValues(
alpha: 0.1,
),
),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text('弹幕列表'),
iconButton(
onPressed: () => setState(() {}),
icon: const Icon(Icons.refresh),
),
],
),
),
child: Column(
children: [
Container(
height: 45,
padding: const EdgeInsets.symmetric(horizontal: 14),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: theme.colorScheme.outline.withValues(alpha: 0.1),
),
bgColor: theme.colorScheme.surface,
),
),
?_buildDanmakuList(ctr.staticDanmaku.nonNulls.toList()),
?_buildDanmakuList(ctr.scrollDanmaku.expand((e) => e).toList()),
?_buildDanmakuList(ctr.specialDanmaku.toList()),
const SliverToBoxAdapter(child: SizedBox(height: 12)),
],
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text('弹幕列表'),
iconButton(
onPressed: () => setState(() {}),
icon: const Icon(Icons.refresh),
),
],
),
),
Expanded(
child: Material(
type: .transparency,
clipBehavior: .hardEdge,
borderRadius: const BorderRadius.vertical(
bottom: Radius.circular(12),
),
child: CustomScrollView(
slivers: [
?_buildDanmakuList(ctr.staticDanmaku.nonNulls.toList()),
?_buildDanmakuList(
ctr.scrollDanmaku.expand((e) => e).toList(),
),
?_buildDanmakuList(ctr.specialDanmaku.toList()),
const SliverToBoxAdapter(child: SizedBox(height: 12)),
],
),
),
),
],
),
);
});