Skip to content

Commit

Permalink
Fix: Filter list delegate tile selection issue.
Browse files Browse the repository at this point in the history
  • Loading branch information
TheAlphamerc committed Oct 24, 2023
1 parent 6d5b239 commit 2eca29a
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 119 deletions.
2 changes: 1 addition & 1 deletion example/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ subprojects {
project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
5 changes: 2 additions & 3 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,12 @@ class _MyHomePageState extends State<MyHomePage> {
theme: FilterListDelegateThemeData(
listTileTheme: ListTileThemeData(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
borderRadius: BorderRadius.circular(5),
),
tileColor: Colors.white,
selectedColor: Colors.red,
selectedTileColor: const Color(0xFF649BEC).withOpacity(.5),
textColor: Colors.blue,
),
tileTextStyle: TextStyle(fontSize: 14),
),
// enableOnlySingleSelection: true,
onItemSearch: (user, query) {
Expand Down
58 changes: 29 additions & 29 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ packages:
dependency: transitive
description:
name: async
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
version: "2.10.0"
version: "2.11.0"
boolean_selector:
dependency: transitive
description:
Expand All @@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: characters
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
version: "1.3.0"
clock:
dependency: transitive
description:
Expand All @@ -37,18 +37,18 @@ packages:
dependency: transitive
description:
name: collection
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
url: "https://pub.dev"
source: hosted
version: "1.17.0"
version: "1.17.2"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
url: "https://pub.dev"
source: hosted
version: "1.0.5"
version: "1.0.6"
fake_async:
dependency: transitive
description:
Expand All @@ -74,46 +74,38 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
js:
dependency: transitive
description:
name: js
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
url: "https://pub.dev"
source: hosted
version: "0.6.5"
matcher:
dependency: transitive
description:
name: matcher
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev"
source: hosted
version: "0.12.13"
version: "0.12.16"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
version: "0.5.0"
meta:
dependency: transitive
description:
name: meta
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
url: "https://pub.dev"
source: hosted
version: "1.8.0"
version: "1.9.1"
path:
dependency: transitive
description:
name: path
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
url: "https://pub.dev"
source: hosted
version: "1.8.2"
version: "1.8.3"
sky_engine:
dependency: transitive
description: flutter
Expand All @@ -123,10 +115,10 @@ packages:
dependency: transitive
description:
name: source_span
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.10.0"
stack_trace:
dependency: transitive
description:
Expand Down Expand Up @@ -163,10 +155,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
url: "https://pub.dev"
source: hosted
version: "0.4.16"
version: "0.6.0"
vector_math:
dependency: transitive
description:
Expand All @@ -175,6 +167,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.4"
web:
dependency: transitive
description:
name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
url: "https://pub.dev"
source: hosted
version: "0.1.4-beta"
sdks:
dart: ">=2.18.0 <4.0.0"
dart: ">=3.1.0-185.0.dev <4.0.0"
flutter: ">=1.12.0"
105 changes: 57 additions & 48 deletions lib/src/filter_list_delegate.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import 'package:filter_list/src/filter_list_dialog.dart';
import 'package:filter_list/src/state/filter_state.dart';
import 'package:filter_list/src/state/provider.dart';
import 'package:filter_list/src/theme/filter_list_delegate_theme.dart';
import 'package:flutter/material.dart';

Expand Down Expand Up @@ -230,59 +232,66 @@ One of the tileLabel or suggestionBuilder is required
}

Widget _result(BuildContext ctx) {
return FilterListDelegateTheme(
theme: theme ?? FilterListDelegateThemeData(),
child: Builder(
builder: (BuildContext innerContext) {
return ListView.builder(
itemCount: tempList.length,
itemBuilder: (context, index) {
final theme = FilterListDelegateTheme.of(innerContext);
final item = tempList[index];
if (suggestionBuilder != null) {
return GestureDetector(
onTap: () => onItemSelect(context, item),
child: suggestionBuilder!(
context,
item,
isSelected(item),
),
);
} else {
return Container(
margin: theme.tileMargin,
decoration: BoxDecoration(
boxShadow: theme.tileShadow,
border: theme.tileBorder,
),
child: enableOnlySingleSelection
? ListTileTheme(
data: theme.listTileTheme,
child: ListTile(
onTap: () => onItemSelect(context, item),
selected: isSelected(item),
title: _title(context, item, theme.tileTextStyle),
),
)
: ListTileTheme(
data: theme.listTileTheme,
child: CheckboxListTile(
value: isSelected(item),
selected: isSelected(item),
onChanged: (value) => onItemSelect(context, item),
title: _title(context, item, theme.tileTextStyle),
return StateProvider<FilterState<T>>(
value: FilterState<T>(
allItems: listData,
selectedItems: selectedListData,
),
child: FilterListDelegateTheme(
theme: theme ?? FilterListDelegateThemeData(),
child: Builder(
builder: (BuildContext innerContext) {
final state = StateProvider.of<FilterState<T>>(innerContext);
return ListView.builder(
itemCount: state.items!.length,
itemBuilder: (context, index) {
final theme = FilterListDelegateTheme.of(innerContext);
final item = tempList[index];
if (suggestionBuilder != null) {
return GestureDetector(
onTap: () => onItemSelect(context, item),
child: suggestionBuilder!(
context,
item,
isSelected(item),
),
);
} else {
return Container(
margin: theme.tileMargin,
decoration: BoxDecoration(
boxShadow: theme.tileShadow,
border: theme.tileBorder,
),
child: enableOnlySingleSelection
? ListTileTheme(
data: theme.listTileTheme,
child: ListTile(
onTap: () => onItemSelect(context, item),
selected: isSelected(item),
title: _title(context, item, theme.tileTextStyle),
),
)
: ListTileTheme(
data: theme.listTileTheme,
child: CheckboxListTile(
value: isSelected(item),
selected: isSelected(item),
onChanged: (value) => onItemSelect(context, item),
title: _title(context, item, theme.tileTextStyle),
),
),
),
);
}
},
);
},
);
}
},
);
},
),
),
);
}

Widget _title(BuildContext context, T item, TextStyle style) {
Widget _title(BuildContext context, T item, TextStyle? style) {
return Text(
tileLabel!(item) ?? '',
style: style,
Expand Down
24 changes: 13 additions & 11 deletions lib/src/theme/filter_list_delegate_theme.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,23 +41,25 @@ class FilterListDelegateThemeData with Diagnosticable {
Color? tileColor,
TextStyle? tileTextStyle,
}) {
tileTextStyle = const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: Colors.black,
);
tileTextStyle = tileTextStyle ??
const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: Colors.black,
);

listTileTheme ??= const ListTileThemeData();

tileMargin ??= const EdgeInsets.symmetric(horizontal: 10, vertical: 8);

return FilterListDelegateThemeData.raw(
listTileTheme: listTileTheme,
tileBorder: tileBorder,
tileShadow: tileShadow,
tileMargin: tileMargin,
tileColor: tileColor,
tileTextStyle: tileTextStyle);
listTileTheme: listTileTheme,
tileBorder: tileBorder,
tileShadow: tileShadow,
tileMargin: tileMargin,
tileColor: tileColor,
tileTextStyle: tileTextStyle,
);
}

/// Raw [FilterListDelegateThemeData] initialization.
Expand Down

0 comments on commit 2eca29a

Please sign in to comment.