Showing
4 changed files
with
23 additions
and
6 deletions
@@ -139,6 +139,16 @@ class _MyHomePageState extends State<MyHomePage> { | @@ -139,6 +139,16 @@ class _MyHomePageState extends State<MyHomePage> { | ||
139 | scrollController: scrollController), | 139 | scrollController: scrollController), |
140 | )), | 140 | )), |
141 | ListTile( | 141 | ListTile( |
142 | + title: Text('Bar Modal reverse list'), | ||
143 | + onTap: () => showBarModalBottomSheet( | ||
144 | + expand: true, | ||
145 | + context: context, | ||
146 | + backgroundColor: Colors.transparent, | ||
147 | + builder: (context, scrollController) => | ||
148 | + ModalInsideModal( | ||
149 | + scrollController: scrollController, reverse: true), | ||
150 | + )), | ||
151 | + ListTile( | ||
142 | title: Text('Avatar Modal'), | 152 | title: Text('Avatar Modal'), |
143 | onTap: () => showAvatarModalBottomSheet( | 153 | onTap: () => showAvatarModalBottomSheet( |
144 | expand: true, | 154 | expand: true, |
@@ -4,8 +4,10 @@ import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; | @@ -4,8 +4,10 @@ import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; | ||
4 | 4 | ||
5 | class ModalInsideModal extends StatelessWidget { | 5 | class ModalInsideModal extends StatelessWidget { |
6 | final ScrollController scrollController; | 6 | final ScrollController scrollController; |
7 | + final bool reverse; | ||
7 | 8 | ||
8 | - const ModalInsideModal({Key key, this.scrollController}) : super(key: key); | 9 | + const ModalInsideModal({Key key, this.scrollController, this.reverse = false}) |
10 | + : super(key: key); | ||
9 | 11 | ||
10 | @override | 12 | @override |
11 | Widget build(BuildContext context) { | 13 | Widget build(BuildContext context) { |
@@ -16,6 +18,7 @@ class ModalInsideModal extends StatelessWidget { | @@ -16,6 +18,7 @@ class ModalInsideModal extends StatelessWidget { | ||
16 | child: SafeArea( | 18 | child: SafeArea( |
17 | bottom: false, | 19 | bottom: false, |
18 | child: ListView( | 20 | child: ListView( |
21 | + reverse: reverse, | ||
19 | shrinkWrap: true, | 22 | shrinkWrap: true, |
20 | controller: scrollController, | 23 | controller: scrollController, |
21 | physics: BouncingScrollPhysics(), | 24 | physics: BouncingScrollPhysics(), |
@@ -24,7 +27,7 @@ class ModalInsideModal extends StatelessWidget { | @@ -24,7 +27,7 @@ class ModalInsideModal extends StatelessWidget { | ||
24 | tiles: List.generate( | 27 | tiles: List.generate( |
25 | 100, | 28 | 100, |
26 | (index) => ListTile( | 29 | (index) => ListTile( |
27 | - title: Text('Item'), | 30 | + title: Text('Item $index'), |
28 | onTap: () => showCupertinoModalBottomSheet( | 31 | onTap: () => showCupertinoModalBottomSheet( |
29 | expand: true, | 32 | expand: true, |
30 | isDismissible: false, | 33 | isDismissible: false, |
@@ -32,7 +35,7 @@ class ModalInsideModal extends StatelessWidget { | @@ -32,7 +35,7 @@ class ModalInsideModal extends StatelessWidget { | ||
32 | backgroundColor: Colors.transparent, | 35 | backgroundColor: Colors.transparent, |
33 | builder: (context, scrollController) => | 36 | builder: (context, scrollController) => |
34 | ModalInsideModal( | 37 | ModalInsideModal( |
35 | - scrollController: scrollController), | 38 | + scrollController: scrollController, reverse: reverse), |
36 | )), | 39 | )), |
37 | )).toList(), | 40 | )).toList(), |
38 | ), | 41 | ), |
@@ -106,7 +106,7 @@ packages: | @@ -106,7 +106,7 @@ packages: | ||
106 | path: ".." | 106 | path: ".." |
107 | relative: true | 107 | relative: true |
108 | source: path | 108 | source: path |
109 | - version: "0.1.5" | 109 | + version: "0.1.6" |
110 | path: | 110 | path: |
111 | dependency: transitive | 111 | dependency: transitive |
112 | description: | 112 | description: |
@@ -242,7 +242,11 @@ class _ModalBottomSheetState extends State<ModalBottomSheet> | @@ -242,7 +242,11 @@ class _ModalBottomSheetState extends State<ModalBottomSheet> | ||
242 | DateTime _startTime; | 242 | DateTime _startTime; |
243 | 243 | ||
244 | void _handleScrollUpdate(ScrollNotification notification) { | 244 | void _handleScrollUpdate(ScrollNotification notification) { |
245 | - if (notification.metrics.pixels <= notification.metrics.minScrollExtent) { | 245 | + double diff = _scrollController.position.axisDirection == AxisDirection.down |
246 | + ? _scrollController.position.pixels | ||
247 | + : _scrollController.position.maxScrollExtent - | ||
248 | + _scrollController.position.pixels; | ||
249 | + if (diff <= 0) { | ||
246 | //Check if listener is same from scrollController | 250 | //Check if listener is same from scrollController |
247 | if (!_scrollController.hasClients) return; | 251 | if (!_scrollController.hasClients) return; |
248 | 252 | ||
@@ -262,7 +266,7 @@ class _ModalBottomSheetState extends State<ModalBottomSheet> | @@ -262,7 +266,7 @@ class _ModalBottomSheetState extends State<ModalBottomSheet> | ||
262 | } | 266 | } |
263 | if (dragDetails != null) { | 267 | if (dragDetails != null) { |
264 | final duration = _startTime.difference(DateTime.now()); | 268 | final duration = _startTime.difference(DateTime.now()); |
265 | - final offset = Offset(0, _scrollController.offset); | 269 | + final offset = Offset(0, diff); |
266 | _velocityTracker.addPosition(duration, offset); | 270 | _velocityTracker.addPosition(duration, offset); |
267 | _handleDragUpdate(dragDetails.primaryDelta); | 271 | _handleDragUpdate(dragDetails.primaryDelta); |
268 | } else if (isDragging) { | 272 | } else if (isDragging) { |
-
Please register or login to post a comment