diff --git a/CHANGELOG.md b/CHANGELOG.md index a754e5a..1e888a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.19.2 - 23/07/2025 + +- **Bug Fix** + - Fix scroll controller dispose issue when widget is disposed [Issue#152](https://github.com/koukibadr/Searchable-Listview/issues/152) + ## 2.19.1 - 14/07/2025 - **Bug Fix** diff --git a/README.md b/README.md index 4799864..bcc3600 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ In order to add searchable listview package to your project add this line to you ```yaml dependencies: - searchable_listview: ^2.19.1 + searchable_listview: ^2.19.2 ``` ## Attributes diff --git a/lib/searchable_listview.dart b/lib/searchable_listview.dart index f33f315..f5321cf 100644 --- a/lib/searchable_listview.dart +++ b/lib/searchable_listview.dart @@ -484,25 +484,25 @@ class SearchableList extends StatefulWidget { class _SearchableListState extends State> { /// Create scroll controller instance /// attached to the listview widget - late ScrollController? scrollController = widget.scrollController; + late ScrollController scrollController = widget.scrollController ?? ScrollController(); List asyncListResult = []; late List filtredListResult = widget.initialList; List filtredAsyncListResult = []; String searchText = ''; bool dataDownloaded = false; - List expansionTileControllers = []; + List expansionTileControllers = []; @override void initState() { super.initState(); - scrollController?.addListener(() { + scrollController.addListener(() { if (widget.closeKeyboardWhenScrolling && widget.focusNode?.hasFocus == true) { FocusScope.of(context).requestFocus(FocusNode()); } if (widget.onPaginate != null && - scrollController?.position.pixels == - scrollController?.position.maxScrollExtent) { + scrollController.position.pixels == + scrollController.position.maxScrollExtent) { setState(() { widget.onPaginate?.call(); }); @@ -513,7 +513,9 @@ class _SearchableListState extends State> { @override void dispose() { - scrollController?.dispose(); + if (widget.scrollController == null) { + scrollController.dispose(); + } widget.searchTextController?.removeListener(_textControllerListener); super.dispose(); } @@ -656,7 +658,7 @@ class _SearchableListState extends State> { expansionTileControllers.addAll( List.generate( widget.expansionListData.length, - (e) => ExpansionTileController(), + (e) => ExpansibleController(), ), ); if (widget.hideEmptyExpansionItems) { diff --git a/pubspec.yaml b/pubspec.yaml index c9bfbca..cbe628a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: searchable_listview description: A new easy way to filter listview with simple implementation with possibilty to customize search field and empty widget -version: 2.19.1 +version: 2.19.2 homepage: 'https://github.com/koukibadr/Searchable-Listview' environment: sdk: '>=2.12.0 <4.0.0'