diff --git a/example/pubspec.lock b/example/pubspec.lock index d98b321..4ab4448 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,37 +5,58 @@ packages: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.10.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "1.0.5" - charcode: + version: "2.1.1" + characters: dependency: transitive description: - name: charcode - url: "https://pub.dartlang.org" + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.2.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.14.11" + version: "1.17.0" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: a937da4c006989739ceb4d10e3bd6cce64ca85d0fe287fc5b2b9f6ee757dcee6 + url: "https://pub.dev" + source: hosted + version: "0.1.3" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted - version: "0.1.2" + version: "1.3.1" flutter: dependency: "direct main" description: flutter @@ -47,47 +68,52 @@ packages: path: ".." relative: true source: path - version: "0.1.0" + version: "1.0.0" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" - matcher: + js: dependency: transitive description: - name: matcher - url: "https://pub.dartlang.org" + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.12.5" - meta: + version: "0.6.5" + matcher: dependency: transitive description: - name: meta - url: "https://pub.dartlang.org" + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "1.1.7" - path: + version: "0.12.13" + material_color_utilities: dependency: transitive description: - name: path - url: "https://pub.dartlang.org" + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "1.6.4" - pedantic: + version: "0.2.0" + meta: dependency: transitive description: - name: pedantic - url: "https://pub.dartlang.org" + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted - version: "1.8.0+1" - quiver: + version: "1.8.0" + path: dependency: transitive description: - name: quiver - url: "https://pub.dartlang.org" + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "1.8.2" sky_engine: dependency: transitive description: flutter @@ -97,57 +123,57 @@ packages: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.5.5" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.9.3" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.1.1" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.5" - typed_data: - dependency: transitive - description: - name: typed_data - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "1.1.6" + version: "0.4.16" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.0.8" + version: "2.1.4" sdks: - dart: ">=2.2.2 <3.0.0" + dart: ">=2.19.0 <3.0.0" diff --git a/lib/flutter_section_list_view.dart b/lib/flutter_section_list_view.dart index 9673f77..538f57d 100644 --- a/lib/flutter_section_list_view.dart +++ b/lib/flutter_section_list_view.dart @@ -12,12 +12,15 @@ typedef Future RefreshList(); // ignore: must_be_immutable class FlutterSectionListView extends StatefulWidget { FlutterSectionListView({ - this.numberOfSection, - @required this.numberOfRowsInSection, - this.sectionWidget, - @required this.rowWidget, - }) : assert(!(numberOfRowsInSection == null || rowWidget == null), - 'numberOfRowsInSection and rowWidget are mandatory'); + required this.numberOfSection, + required this.numberOfRowsInSection, + required this.sectionWidget, + this.physics = const BouncingScrollPhysics(), + required this.rowWidget, + this.shrinkWrap = false, + this.mainAxisSize = MainAxisSize.max, + Key? key, + }) : super(key: key ?? UniqueKey()); /// Defines the total number of sections final NumberOfSectionCallBack numberOfSection; @@ -31,14 +34,23 @@ class FlutterSectionListView extends StatefulWidget { /// Mandatory callback method to get the row widget final RowsWidgetCallBack rowWidget; + /// [ScrollPhysics] provided by that behavior will take precedence after[physics] + final ScrollPhysics physics; + + /// [MainAxisSize] to control the main axis of the ListView. + final MainAxisSize mainAxisSize; + + /// [bool] to control whether the ListView should be allowed to shrink. + final bool shrinkWrap; + /// A callback method used to load more data when listview reached to end. - LoadMoreData loadMoreData; + LoadMoreData? loadMoreData; /// Return false when there are no more pages to return bool isMoreAvailable = true; /// Handle this callback when need pull to refresh. - RefreshList refresh; + RefreshList? refresh; @override _FlutterSectionListViewState createState() => _FlutterSectionListViewState(); @@ -46,7 +58,7 @@ class FlutterSectionListView extends StatefulWidget { class _FlutterSectionListViewState extends State { /// List of total number of rows and section in each group - var itemList = new List(); + var itemList = []; bool isLoading = false; int itemCount = 0; int sectionCount = 0; @@ -61,7 +73,10 @@ class _FlutterSectionListViewState extends State { } Future refreshList() async { - await widget.refresh().whenComplete(() { + if (widget.refresh == null) { + return; + } + await widget.refresh!().whenComplete(() { setState(() { sectionCount = widget.numberOfSection(); itemCount = listItemCount(); @@ -80,54 +95,70 @@ class _FlutterSectionListViewState extends State { } Widget listView() { - return Column( - children: [ - Expanded( - child: NotificationListener( - onNotification: (ScrollNotification scrollInfo) { - if (!isLoading && - widget.isMoreAvailable && - scrollInfo.metrics.pixels == - scrollInfo.metrics.maxScrollExtent) { - if (widget.loadMoreData != null) { - setState(() { - isLoading = true; - }); - final Future loadMoreResult = widget.loadMoreData(); - loadMoreResult.whenComplete(() { - setState(() { - isLoading = false; - sectionCount = widget.numberOfSection(); - itemCount = listItemCount(); - }); - }); - } - } - return false; + return widget.loadMoreData == null + ? ListView.builder( + itemCount: itemCount, + itemBuilder: (context, index) { + return buildItemWidget(index); }, - child: ListView.builder( - itemCount: itemCount, - itemBuilder: (context, index) { - return buildItemWidget(index); - }, - key: widget.key, - ), - ), - ), - Container( - height: isLoading ? 50.0 : 0, - color: Colors.transparent, - child: Center( - child: new CircularProgressIndicator(), - ), - ), - ], - ); + key: widget.key, + physics: widget.physics, + shrinkWrap: widget.shrinkWrap, + ) + : Column( + mainAxisSize: widget.mainAxisSize, + children: [ + Expanded( + child: NotificationListener( + onNotification: (ScrollNotification scrollInfo) { + if (!isLoading && + widget.isMoreAvailable && + scrollInfo.metrics.pixels == + scrollInfo.metrics.maxScrollExtent) { + if (widget.loadMoreData != null) { + setState(() { + isLoading = true; + }); + if (widget.loadMoreData != null) { + final Future loadMoreResult = + widget.loadMoreData!(); + loadMoreResult.whenComplete(() { + setState(() { + isLoading = false; + sectionCount = widget.numberOfSection(); + itemCount = listItemCount(); + }); + }); + } + } + } + return false; + }, + child: ListView.builder( + itemCount: itemCount, + itemBuilder: (context, index) { + return buildItemWidget(index); + }, + key: widget.key, + physics: widget.physics, + shrinkWrap: widget.shrinkWrap, + ), + ), + ), + Container( + height: isLoading ? 50.0 : 0, + color: Colors.transparent, + child: Center( + child: new CircularProgressIndicator(), + ), + ), + ], + ); } /// Get the total count of items in list(including both row and sections) int listItemCount() { - itemList = new List(); + itemList = []; int rowCount = 0; for (int i = 0; i < sectionCount; i++) { @@ -175,8 +206,7 @@ class _FlutterSectionListViewState extends State { /// Helper class for indexPath of each item in list class IndexPath { - IndexPath({this.section, this.row}); - + IndexPath({required this.section, required this.row}); int section = 0; int row = 0; } diff --git a/pubspec.lock b/pubspec.lock index aebdafa..99b8ac5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,30 +5,50 @@ packages: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.10.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "1.0.5" - charcode: + version: "2.1.1" + characters: dependency: transitive description: - name: charcode - url: "https://pub.dartlang.org" + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.2.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted - version: "1.14.11" + version: "1.3.1" flutter: dependency: "direct main" description: flutter @@ -39,41 +59,46 @@ packages: description: flutter source: sdk version: "0.0.0" - matcher: + js: dependency: transitive description: - name: matcher - url: "https://pub.dartlang.org" + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.12.5" - meta: + version: "0.6.5" + matcher: dependency: transitive description: - name: meta - url: "https://pub.dartlang.org" + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "1.1.7" - path: + version: "0.12.13" + material_color_utilities: dependency: transitive description: - name: path - url: "https://pub.dartlang.org" + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "1.6.4" - pedantic: + version: "0.2.0" + meta: dependency: transitive description: - name: pedantic - url: "https://pub.dartlang.org" + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted - version: "1.8.0+1" - quiver: + version: "1.8.0" + path: dependency: transitive description: - name: quiver - url: "https://pub.dartlang.org" + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "1.8.2" sky_engine: dependency: transitive description: flutter @@ -83,57 +108,57 @@ packages: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.5.5" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.9.3" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.1.1" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" - source: hosted - version: "0.2.5" - typed_data: - dependency: transitive - description: - name: typed_data - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "1.1.6" + version: "0.4.16" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.0.8" + version: "2.1.4" sdks: - dart: ">=2.2.2 <3.0.0" + dart: ">=2.19.0 <3.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 50e091c..f9dd8b4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ author: Dharmendra Singh Yadav homepage: https://github.com/dharmendraiosdev/flutter_section_list_view environment: - sdk: ">=2.1.0 <3.0.0" + sdk: ">=2.19.0 <4.0.0" dependencies: flutter: diff --git a/test/flutter_section_list_view_test.dart b/test/flutter_section_list_view_test.dart index 950888b..d827568 100644 --- a/test/flutter_section_list_view_test.dart +++ b/test/flutter_section_list_view_test.dart @@ -1,7 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_section_list_view/flutter_section_list_view.dart'; - void main() { test('adds one to input values', () { final calculator = Calculator();