Repository navigation
Add SliverClipRect and SliverClipRRect - #179003
Conversation
ee0ecb6 to
bb892ee
Compare
a166658 to
e97348b
Compare
e97348b to
c9db9e0
Compare
|
The push (c9db9e0) is for migration from @manu-sncf to @zemanux |
c9db9e0 to
5e8ef2b
Compare
f259a25 to
a2ed28f
Compare
|
Last commit for rebase and synchronization of
I added a new example demonstrating the key capabilities of this new widget: sliver_clip_rect.mp4Code sampleimport 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: MyApp()));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) => Scaffold(
body: DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: <Color>[Colors.blue.shade200, Colors.blue.shade800],
),
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 32),
child: CustomScrollView(
physics: const BouncingScrollPhysics(),
reverse: false,
slivers: <Widget>[
SliverClipRRect(
borderRadius: BorderRadius.circular(12),
sliver: const SliverAppBar(
pinned: true,
stretch: true,
title: Text('Group Clipping'),
backgroundColor: Colors.transparent,
),
),
SliverClipRRect(
clipOverlap: false,
borderRadius: BorderRadius.circular(12),
sliver: const PinnedHeaderSliver(
child: Material(
color: Colors.amber,
child: ListTile(
title: Text('This is a PinnedHeaderSliver', style: TextStyle(color: Colors.white)),
),
),
),
),
...List.generate(
2,
(_) => SliverPadding(
padding: const EdgeInsets.all(16),
sliver: SliverClipRRect(
// clipOverlap: false,
borderRadius: BorderRadius.circular(12),
sliver: DecoratedSliver(
decoration: const BoxDecoration(color: Colors.purple),
sliver: SliverMainAxisGroup(
slivers: <Widget>[
const PinnedHeaderSliver(
child: ListTile(
title: Text('Pinned Header', style: TextStyle(color: Colors.white)),
),
),
SliverClipRect(
sliver: SliverList.builder(
itemCount: 20,
itemBuilder: (BuildContext context, int index) => Material(
type: MaterialType.transparency,
child: ListTile(
title: Text('Item $index', style: const TextStyle(color: Colors.white)),
onTap: () {},
),
),
),
),
],
),
),
),
),
),
],
),
),
),
);
}
// class _DecoratedSliver extends StatelessWidget {
// const _DecoratedSliver({this.isEnabled = true, required this.sliver});
// final bool isEnabled;
// final Widget sliver;
// @override
// Widget build(BuildContext context) => isEnabled
// ? DecoratedSliver(
// decoration: BoxDecoration(
// border: Border.all(),
// borderRadius: BorderRadius.circular(8),
// gradient: const LinearGradient(
// begin: Alignment.topCenter,
// end: Alignment.bottomCenter,
// colors: [Colors.blue, Colors.purple],
// ),
// ),
// sliver: sliver,
// )
// : sliver;
// } |
a2ed28f to
0683f26
Compare
24855d6 to
38ce420
Compare
38ce420 to
aa21e2c
Compare
…classes. Also make _markNeedsClip public/protected so extenders have a way to invalidate the cached clip for changes that do not require relayout, and mark clipContains as protected.
Done ! |
|
autosubmit label was removed for flutter/flutter/179003, because This PR has not met approval requirements for merging. The PR author is not a member of flutter-hackers and needs 2 more review(s) in order to merge this PR.
|
|
Hoooray!! So glad to see this finally merged! |
Fix #179002.
Pre-launch Checklist
///).