Skip to content

Commit b879058

Browse files
committed
profile header collapse/expand fixed
1 parent 5640214 commit b879058

File tree

3 files changed

+42
-25
lines changed

3 files changed

+42
-25
lines changed

lib/features/explore/presentation/waves/controller/waves_feed_controller.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class WavesFeedController extends ChangeNotifier
9898
errorMessage = null;
9999
isPageEnded = false;
100100
viewState = ViewState.loading;
101+
notifyListeners();
101102
init();
102103
}
103104

lib/features/explore/presentation/widgets/waves_list_view.dart

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,29 @@ import 'package:waves/features/threads/presentation/thread_feed/widgets/thread_f
1515
import 'package:waves/features/threads/presentation/thread_feed/widgets/thread_tile.dart';
1616

1717
class WavesListView extends StatefulWidget {
18-
const WavesListView({super.key});
18+
const WavesListView({super.key, this.scrollController});
19+
20+
final ScrollController? scrollController;
1921

2022
@override
2123
State<WavesListView> createState() => _WavesListViewState();
2224
}
2325

2426
class _WavesListViewState extends State<WavesListView> {
25-
final ScrollController _scrollController = ScrollController();
27+
late ScrollController _scrollController;
28+
late bool _ownsController;
2629
bool _showBackToTopButton = false;
2730
String? _lastErrorMessage;
2831

2932
@override
3033
void initState() {
3134
super.initState();
35+
_configureScrollController(widget.scrollController);
36+
}
37+
38+
void _configureScrollController(ScrollController? controller) {
39+
_ownsController = controller == null;
40+
_scrollController = controller ?? ScrollController();
3241
_scrollController.addListener(_scrollListener);
3342
}
3443

@@ -45,10 +54,24 @@ class _WavesListViewState extends State<WavesListView> {
4554
}
4655
}
4756

57+
@override
58+
void didUpdateWidget(covariant WavesListView oldWidget) {
59+
super.didUpdateWidget(oldWidget);
60+
if (oldWidget.scrollController != widget.scrollController) {
61+
_scrollController.removeListener(_scrollListener);
62+
if (_ownsController) {
63+
_scrollController.dispose();
64+
}
65+
_configureScrollController(widget.scrollController);
66+
}
67+
}
68+
4869
@override
4970
void dispose() {
5071
_scrollController.removeListener(_scrollListener);
51-
_scrollController.dispose();
72+
if (_ownsController) {
73+
_scrollController.dispose();
74+
}
5275
super.dispose();
5376
}
5477

lib/features/user/presentation/user_profile/widgets/user_profile_widget.dart

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -42,28 +42,21 @@ class _UserProfileViewWidgetState extends State<UserProfileViewWidget> {
4242
@override
4343
Widget build(BuildContext context) {
4444
final coverImage = widget.data.postingJsonMetadata?.profile?.coverImage;
45-
return Stack(
46-
children: [
47-
CustomScrollView(
48-
slivers: [
49-
SliverCrossAxisGroup(
50-
slivers: [
51-
SliverMainAxisGroup(
52-
slivers: [
53-
if (coverImage != null && coverImage.isNotEmpty)
54-
_coverImage(),
55-
UserProfileUserInfo(data: widget.data),
56-
SliverFillRemaining(
57-
hasScrollBody: true,
58-
child: const WavesListView(),
59-
),
60-
],
61-
),
62-
],
63-
),
64-
],
65-
),
66-
],
45+
return NestedScrollView(
46+
floatHeaderSlivers: true,
47+
headerSliverBuilder: (context, innerBoxIsScrolled) {
48+
return [
49+
if (coverImage != null && coverImage.isNotEmpty) _coverImage(),
50+
UserProfileUserInfo(data: widget.data),
51+
];
52+
},
53+
body: Builder(
54+
builder: (context) {
55+
return WavesListView(
56+
scrollController: PrimaryScrollController.of(context),
57+
);
58+
},
59+
),
6760
);
6861
}
6962

0 commit comments

Comments
 (0)