Skip to content

Commit 16ee7e4

Browse files
committed
🚀 Expose filter options.
Related to #41 .
1 parent a7cf9ac commit 16ee7e4

File tree

6 files changed

+70
-49
lines changed

6 files changed

+70
-49
lines changed

example/lib/pages/multi_assets_page.dart

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class _MultiAssetsPageState extends State<MultiAssetsPage> {
3838
context,
3939
maxAssets: maxAssetsCount,
4040
selectedAssets: assets,
41-
themeColor: themeColor,
4241
requestType: RequestType.image,
4342
);
4443
},
@@ -55,7 +54,6 @@ class _MultiAssetsPageState extends State<MultiAssetsPage> {
5554
context,
5655
maxAssets: maxAssetsCount,
5756
selectedAssets: assets,
58-
themeColor: themeColor,
5957
requestType: RequestType.video,
6058
);
6159
},
@@ -72,7 +70,6 @@ class _MultiAssetsPageState extends State<MultiAssetsPage> {
7270
context,
7371
maxAssets: maxAssetsCount,
7472
selectedAssets: assets,
75-
themeColor: themeColor,
7673
requestType: RequestType.audio,
7774
);
7875
},
@@ -89,45 +86,51 @@ class _MultiAssetsPageState extends State<MultiAssetsPage> {
8986
context,
9087
maxAssets: maxAssetsCount,
9188
selectedAssets: assets,
92-
themeColor: themeColor,
9389
requestType: RequestType.common,
9490
);
9591
},
9692
),
9793
PickMethodModel(
98-
icon: '📱',
99-
name: 'All picker',
100-
description: 'Pick all type of assets.',
94+
icon: '🔲',
95+
name: '3 items grid',
96+
description:
97+
'Picker will served as 3 items on cross axis. (pageSize must be a multiple of gridCount)',
10198
method: (
10299
BuildContext context,
103100
List<AssetEntity> assets,
104101
) async {
105102
return await AssetPicker.pickAssets(
106103
context,
104+
gridCount: 3,
105+
pageSize: 120,
107106
maxAssets: maxAssetsCount,
108107
selectedAssets: assets,
109-
themeColor: themeColor,
110-
requestType: RequestType.all,
108+
requestType: RequestType.common,
111109
);
112110
},
113111
),
114112
PickMethodModel(
115-
icon: '🔲',
116-
name: '3 items grid',
117-
description:
118-
'Picker will served as 3 items on cross axis. (pageSize must be a multiple of gridCount)',
113+
icon: '⏳',
114+
name: 'Custom filter options',
115+
description: 'Add filter options for the picker.',
119116
method: (
120117
BuildContext context,
121118
List<AssetEntity> assets,
122119
) async {
123120
return await AssetPicker.pickAssets(
124121
context,
125-
gridCount: 3,
126-
pageSize: 120,
127122
maxAssets: maxAssetsCount,
128123
selectedAssets: assets,
129-
themeColor: themeColor,
130-
requestType: RequestType.common,
124+
requestType: RequestType.video,
125+
filterOptions: FilterOptionGroup()
126+
..setOption(
127+
AssetType.video,
128+
FilterOption(
129+
durationConstraint: DurationConstraint(
130+
max: 1.minutes,
131+
),
132+
),
133+
),
131134
);
132135
},
133136
),
@@ -143,7 +146,6 @@ class _MultiAssetsPageState extends State<MultiAssetsPage> {
143146
context,
144147
maxAssets: maxAssetsCount,
145148
selectedAssets: assets,
146-
themeColor: themeColor,
147149
requestType: RequestType.common,
148150
customItemPosition: CustomItemPosition.append,
149151
customItemBuilder: (BuildContext context) {

example/lib/pages/single_assets_page.dart

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class _SingleAssetPageState extends State<SingleAssetPage> {
3838
context,
3939
maxAssets: maxAssetsCount,
4040
selectedAssets: assets,
41-
themeColor: themeColor,
4241
requestType: RequestType.image,
4342
);
4443
},
@@ -55,7 +54,6 @@ class _SingleAssetPageState extends State<SingleAssetPage> {
5554
context,
5655
maxAssets: maxAssetsCount,
5756
selectedAssets: assets,
58-
themeColor: themeColor,
5957
requestType: RequestType.video,
6058
);
6159
},
@@ -72,7 +70,6 @@ class _SingleAssetPageState extends State<SingleAssetPage> {
7270
context,
7371
maxAssets: maxAssetsCount,
7472
selectedAssets: assets,
75-
themeColor: themeColor,
7673
requestType: RequestType.audio,
7774
);
7875
},
@@ -89,45 +86,51 @@ class _SingleAssetPageState extends State<SingleAssetPage> {
8986
context,
9087
maxAssets: maxAssetsCount,
9188
selectedAssets: assets,
92-
themeColor: themeColor,
9389
requestType: RequestType.common,
9490
);
9591
},
9692
),
9793
PickMethodModel(
98-
icon: '📱',
99-
name: 'All picker',
100-
description: 'Pick all type of assets.',
94+
icon: '🔲',
95+
name: '3 items grid',
96+
description:
97+
'Picker will served as 3 items on cross axis. (pageSize must be a multiple of gridCount)',
10198
method: (
10299
BuildContext context,
103100
List<AssetEntity> assets,
104101
) async {
105102
return await AssetPicker.pickAssets(
106103
context,
104+
gridCount: 3,
105+
pageSize: 120,
107106
maxAssets: maxAssetsCount,
108107
selectedAssets: assets,
109-
themeColor: themeColor,
110108
requestType: RequestType.all,
111109
);
112110
},
113111
),
114112
PickMethodModel(
115-
icon: '🔲',
116-
name: '3 items grid',
117-
description:
118-
'Picker will served as 3 items on cross axis. (pageSize must be a multiple of gridCount)',
113+
icon: '⏳',
114+
name: 'Custom filter options',
115+
description: 'Add filter options for the picker.',
119116
method: (
120117
BuildContext context,
121118
List<AssetEntity> assets,
122119
) async {
123120
return await AssetPicker.pickAssets(
124121
context,
125-
gridCount: 3,
126-
pageSize: 120,
127122
maxAssets: maxAssetsCount,
128123
selectedAssets: assets,
129-
themeColor: themeColor,
130-
requestType: RequestType.all,
124+
requestType: RequestType.video,
125+
filterOptions: FilterOptionGroup()
126+
..setOption(
127+
AssetType.video,
128+
FilterOption(
129+
durationConstraint: DurationConstraint(
130+
max: 1.minutes,
131+
),
132+
),
133+
),
131134
);
132135
},
133136
),
@@ -143,7 +146,6 @@ class _SingleAssetPageState extends State<SingleAssetPage> {
143146
context,
144147
maxAssets: maxAssetsCount,
145148
selectedAssets: assets,
146-
themeColor: themeColor,
147149
specialPickerType: SpecialPickerType.wechatMoment,
148150
);
149151
},

lib/src/provider/asset_picker_provider.dart

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class AssetPickerProvider extends ChangeNotifier {
2121
this.pathThumbSize = 80,
2222
this.requestType = RequestType.image,
2323
this.sortPathDelegate = SortPathDelegate.common,
24+
this.filterOptions,
2425
List<AssetEntity> selectedAssets,
2526
Duration routeDuration,
2627
}) {
@@ -56,6 +57,13 @@ class AssetPickerProvider extends ChangeNotifier {
5657
/// 资源路径排序的实现
5758
final SortPathDelegate sortPathDelegate;
5859

60+
/// Filter options for the picker.
61+
/// 选择器的筛选条件
62+
///
63+
/// Will be merged into the base configuration.
64+
/// 将会与基础条件进行合并。
65+
final FilterOptionGroup filterOptions;
66+
5967
/// Clear all fields when dispose.
6068
/// 销毁时重置所有内容
6169
@override
@@ -198,18 +206,26 @@ class AssetPickerProvider extends ChangeNotifier {
198206
/// Get assets path entities.
199207
/// 获取所有的资源路径
200208
Future<void> getAssetPathList() async {
209+
/// Initial base options.
210+
/// Enable need title for audios and image to get proper display.
211+
final FilterOptionGroup options = FilterOptionGroup()
212+
..setOption(
213+
AssetType.audio,
214+
const FilterOption(needTitle: true),
215+
)
216+
..setOption(
217+
AssetType.image,
218+
const FilterOption(needTitle: true),
219+
);
220+
221+
/// Merge user's filter option into base options if it's not null.
222+
if (filterOptions != null) {
223+
options.merge(filterOptions);
224+
}
225+
201226
final List<AssetPathEntity> _list = await PhotoManager.getAssetPathList(
202227
type: requestType,
203-
// Enable need title for audios and image to get proper display.
204-
filterOption: FilterOptionGroup()
205-
..setOption(
206-
AssetType.audio,
207-
const FilterOption(needTitle: true),
208-
)
209-
..setOption(
210-
AssetType.image,
211-
const FilterOption(needTitle: true),
212-
),
228+
filterOption: options,
213229
);
214230

215231
/// Sort path using sort path delegate.

lib/src/widget/asset_picker.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class AssetPicker extends StatelessWidget {
101101
ThemeData pickerTheme,
102102
SortPathDelegate sortPathDelegate,
103103
TextDelegate textDelegate,
104+
FilterOptionGroup filterOptions,
104105
WidgetBuilder customItemBuilder,
105106
CustomItemPosition customItemPosition = CustomItemPosition.none,
106107
Curve routeCurve = Curves.easeIn,
@@ -149,6 +150,7 @@ class AssetPicker extends StatelessWidget {
149150
selectedAssets: selectedAssets,
150151
requestType: requestType,
151152
sortPathDelegate: sortPathDelegate,
153+
filterOptions: filterOptions,
152154
routeDuration: routeDuration,
153155
);
154156
final Widget picker = AssetPicker(

lib/wechat_assets_picker.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
library wechat_assets_picker;
22

3-
export 'package:photo_manager/photo_manager.dart'
4-
show AssetEntity, AssetType, RequestType;
3+
export 'package:photo_manager/photo_manager.dart';
54

65
export 'src/constants/enums.dart';
76
export 'src/delegates/sort_path_delegate.dart';

pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ dependencies:
1414
assets_audio_player: ^2.0.7+9
1515
extended_image: ">=0.9.0 <2.0.0"
1616
flutter_common_exports: ^0.1.0
17-
photo_manager: ">=0.5.3+1 <2.0.0"
18-
provider: ^4.3.0
17+
photo_manager: ">=0.5.5 <2.0.0"
18+
provider: ^4.3.1
1919
video_player: ">=0.10.11+2 <2.0.0"

0 commit comments

Comments
 (0)