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