Skip to content

Commit

Permalink
fixes nested sticky headers
Browse files Browse the repository at this point in the history
  • Loading branch information
letsar committed Jul 13, 2022
1 parent b030be3 commit 8d571f5
Show file tree
Hide file tree
Showing 14 changed files with 281 additions and 48 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,7 @@
## 0.6.4
### Fixed
* Not passing right overlap contraints to sliver child. Now we can create nested sticky headers!

## 0.6.3
### Fixed
* Hit Test on not sticky header
Expand Down
29 changes: 0 additions & 29 deletions example/analysis_options.yaml

This file was deleted.

2 changes: 1 addition & 1 deletion example/ios/Flutter/AppFrameworkInfo.plist
Expand Up @@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
<string>9.0</string>
</dict>
</plist>
10 changes: 5 additions & 5 deletions example/ios/Runner.xcodeproj/project.pbxproj
Expand Up @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objectVersion = 50;
objects = {

/* Begin PBXBuildFile section */
Expand Down Expand Up @@ -127,7 +127,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1020;
LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
Expand Down Expand Up @@ -272,7 +272,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
Expand Down Expand Up @@ -354,7 +354,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
Expand Down Expand Up @@ -403,7 +403,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
2 changes: 2 additions & 0 deletions example/ios/Runner/Info.plist
Expand Up @@ -41,5 +41,7 @@
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
</dict>
</plist>
124 changes: 124 additions & 0 deletions example/lib/examples/nested.dart
@@ -0,0 +1,124 @@
import 'package:example/common.dart';
import 'package:flutter/material.dart';
import 'package:flutter_sticky_header/flutter_sticky_header.dart';
import 'package:sliver_tools/sliver_tools.dart';

class NestedExample extends StatelessWidget {
const NestedExample({
super.key,
});

@override
Widget build(BuildContext context) {
return AppScaffold(
title: 'Nested Sticky Headers',
slivers: [
SliverStickyHeader(
header: Header(title: '1'),
sliver: MultiSliver(
children: [
SliverStickyHeader(
header: Header(title: '1.1'),
sliver: _SliverLeaf(),
),
SliverStickyHeader(
header: Header(title: '1.2'),
sliver: MultiSliver(
children: [
SliverStickyHeader(
header: Header(title: '1.2.1'),
sliver: _SliverLeaf(),
),
SliverStickyHeader(
header: Header(title: '1.2.2'),
sliver: _SliverLeaf(),
),
SliverStickyHeader(
header: Header(title: '1.2.3'),
sliver: _SliverLeaf(),
),
],
),
),
SliverStickyHeader(
header: Header(title: '1.3'),
sliver: _SliverLeaf(),
),
],
),
),
SliverStickyHeader(
header: Header(title: '2'),
sliver: MultiSliver(
children: [
SliverStickyHeader(
header: Header(title: '2.1'),
sliver: _SliverLeaf(),
),
SliverStickyHeader(
header: Header(title: '2.2'),
sliver: MultiSliver(
children: [
SliverStickyHeader(
header: Header(title: '2.2.1'),
sliver: _SliverLeaf(),
),
SliverStickyHeader(
header: Header(title: '2.2.2'),
sliver: _SliverLeaf(),
),
SliverStickyHeader(
header: Header(title: '2.2.3'),
sliver: _SliverLeaf(),
),
],
),
),
SliverStickyHeader(
header: Header(title: '2.3'),
sliver: _SliverLeaf(),
),
],
),
),
SliverStickyHeader(
header: Header(title: '3'),
sliver: _SliverLeaf(),
),
SliverStickyHeader(
header: Header(title: '4'),
sliver: MultiSliver(
children: [
SliverStickyHeader(
header: Header(title: '4.1'),
sliver: _SliverLeaf(),
),
SliverStickyHeader(
header: Header(title: '4.2'),
sliver: _SliverLeaf(),
),
SliverStickyHeader(
header: Header(title: '4.3'),
sliver: _SliverLeaf(),
),
],
),
),
],
);
}
}

class _SliverLeaf extends StatelessWidget {
const _SliverLeaf();

@override
Widget build(BuildContext context) {
return SliverToBoxAdapter(
child: Container(
height: 200,
color: Colors.amber,
),
);
}
}
6 changes: 5 additions & 1 deletion example/lib/main.dart
@@ -1,5 +1,5 @@
import 'package:example/examples/nested.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

import 'examples/animated_header.dart';
import 'examples/grid.dart';
Expand Down Expand Up @@ -69,6 +69,10 @@ class _Home extends StatelessWidget {
text: 'Mixing other slivers',
builder: (_) => const MixSliversExample(),
),
_Item(
text: 'Nested sticky headers',
builder: (_) => const NestedExample(),
),
],
),
);
Expand Down
3 changes: 2 additions & 1 deletion example/pubspec.yaml
Expand Up @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1

environment:
sdk: '>=2.12.0 <3.0.0'
sdk: '>=2.17.0 <3.0.0'

dependencies:
flutter:
Expand All @@ -30,6 +30,7 @@ dependencies:
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
sliver_tools: ^0.2.7

dev_dependencies:
flutter_test:
Expand Down
5 changes: 3 additions & 2 deletions lib/src/rendering/sliver_sticky_header.dart
@@ -1,6 +1,5 @@
import 'dart:math' as math;

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_sticky_header/flutter_sticky_header.dart';
Expand Down Expand Up @@ -178,7 +177,8 @@ class RenderSliverStickyHeader extends RenderSliver with RenderSliverHelpers {
constraints.copyWith(
scrollOffset: math.max(0.0, constraints.scrollOffset - headerExtent),
cacheOrigin: math.min(0.0, constraints.cacheOrigin + headerExtent),
overlap: 0.0,
overlap: math.min(headerExtent, constraints.scrollOffset) +
(sticky ? constraints.overlap : 0),
remainingPaintExtent:
constraints.remainingPaintExtent - headerPaintExtent,
remainingCacheExtent:
Expand All @@ -203,6 +203,7 @@ class RenderSliverStickyHeader extends RenderSliver with RenderSliverHelpers {

geometry = SliverGeometry(
scrollExtent: headerExtent + childLayoutGeometry.scrollExtent,
maxScrollObstructionExtent: sticky ? headerPaintExtent : 0,
paintExtent: paintExtent,
layoutExtent: math.min(
headerPaintExtent + childLayoutGeometry.layoutExtent, paintExtent),
Expand Down
3 changes: 2 additions & 1 deletion pubspec.yaml
@@ -1,6 +1,6 @@
name: flutter_sticky_header
description: Flutter implementation of sticky headers as a sliver. Use it in a CustomScrollView.
version: 0.6.3
version: 0.6.4
homepage: https://github.com/letsar/flutter_sticky_header

dependencies:
Expand All @@ -11,6 +11,7 @@ dependencies:
dev_dependencies:
flutter_test:
sdk: flutter
sliver_tools: ^0.2.7

environment:
sdk: '>=2.12.0 <3.0.0'
Expand Down
5 changes: 2 additions & 3 deletions test/controller_test.dart
@@ -1,11 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:flutter_sticky_header/flutter_sticky_header.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
setUp(() {
WidgetsBinding.instance!.renderView.configuration =
WidgetsBinding.instance.renderView.configuration =
TestViewConfiguration(size: Size(400, 800));
});

Expand Down

0 comments on commit 8d571f5

Please sign in to comment.