Skip to content

Commit 26addd9

Browse files
committed
💬 A -> Asset, P -> Path
1 parent 666e263 commit 26addd9

File tree

6 files changed

+82
-75
lines changed

6 files changed

+82
-75
lines changed

guides/migration_guide.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ you can stop reading._
6262
Before:
6363

6464
```dart
65-
void switchPath(P pathEntity);
65+
void switchPath(Path pathEntity);
6666
```
6767

6868
After:
@@ -93,4 +93,4 @@ For how to implement a custom picker, see the example's custom page for more imp
9393
`previewAssets`.
9494

9595
- If you have extended an `AssetPickerProvider` or `AssetPickerViewerProvider`, it now requires you
96-
to pass generic type `A` and `P`, and handle the entities on your own.
96+
to pass generic type `Asset` and `Path`, and handle the entities on your own.

lib/src/delegates/asset_picker_builder_delegate.dart

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ typedef IndicatorBuilder = Widget Function(
2424
///
2525
/// By extending the delegate, you can customize every components on you own.
2626
/// Delegate requires two generic types:
27-
/// * [A] "Asset": The type of your assets. Defaults to [AssetEntity].
28-
/// * [P] "Path": The type of your paths. Defaults to [AssetPathEntity].
29-
abstract class AssetPickerBuilderDelegate<A, P> {
27+
/// * [Asset] The type of your assets. Defaults to [AssetEntity].
28+
/// * [Path] The type of your paths. Defaults to [AssetPathEntity].
29+
abstract class AssetPickerBuilderDelegate<Asset, Path> {
3030
AssetPickerBuilderDelegate({
3131
required this.provider,
3232
required this.initialPermission,
@@ -49,7 +49,7 @@ abstract class AssetPickerBuilderDelegate<A, P> {
4949

5050
/// [ChangeNotifier] for asset picker.
5151
/// 资源选择器状态保持
52-
final AssetPickerProvider<A, P> provider;
52+
final AssetPickerProvider<Asset, Path> provider;
5353

5454
/// The [PermissionState] when the picker is called.
5555
/// 当选择器被拉起时的权限状态
@@ -179,7 +179,7 @@ abstract class AssetPickerBuilderDelegate<A, P> {
179179
/// 路径单独条目选择组件
180180
Widget pathEntityWidget({
181181
required BuildContext context,
182-
required Map<P, Uint8List?> list,
182+
required Map<Path, Uint8List?> list,
183183
required int index,
184184
bool isAudio = false,
185185
});
@@ -203,7 +203,7 @@ abstract class AssetPickerBuilderDelegate<A, P> {
203203

204204
/// GIF image type indicator.
205205
/// GIF类型图片指示
206-
Widget gifIndicator(BuildContext context, A asset) {
206+
Widget gifIndicator(BuildContext context, Asset asset) {
207207
return PositionedDirectional(
208208
start: 0,
209209
bottom: 0,
@@ -245,29 +245,29 @@ abstract class AssetPickerBuilderDelegate<A, P> {
245245

246246
/// Audio asset type indicator.
247247
/// 音频类型资源指示
248-
Widget audioIndicator(BuildContext context, A asset);
248+
Widget audioIndicator(BuildContext context, Asset asset);
249249

250250
/// Video asset type indicator.
251251
/// 视频类型资源指示
252-
Widget videoIndicator(BuildContext context, A asset);
252+
Widget videoIndicator(BuildContext context, Asset asset);
253253

254254
/// Animated backdrop widget for items.
255255
/// 部件选中时的动画遮罩部件
256256
Widget selectedBackdrop(
257257
BuildContext context,
258258
int index,
259-
A asset,
259+
Asset asset,
260260
);
261261

262262
/// Indicator for assets selected status.
263263
/// 资源是否已选的指示器
264-
Widget selectIndicator(BuildContext context, A asset);
264+
Widget selectIndicator(BuildContext context, Asset asset);
265265

266266
/// Indicator when the asset cannot be selected.
267267
/// 当资源无法被选中时的遮罩
268-
Widget itemBannedIndicator(BuildContext context, A asset) {
269-
return Consumer<AssetPickerProvider<A, P>>(
270-
builder: (_, AssetPickerProvider<A, P> p, __) {
268+
Widget itemBannedIndicator(BuildContext context, Asset asset) {
269+
return Consumer<AssetPickerProvider<Asset, Path>>(
270+
builder: (_, AssetPickerProvider<Asset, Path> p, __) {
271271
if (!p.selectedAssets.contains(asset) && p.selectedMaximumAssets) {
272272
return Container(
273273
color: theme.colorScheme.background.withOpacity(.85),
@@ -282,8 +282,8 @@ abstract class AssetPickerBuilderDelegate<A, P> {
282282
/// 加载指示器
283283
Widget loadingIndicator(BuildContext context) {
284284
return Center(
285-
child: Selector<AssetPickerProvider<A, P>, bool>(
286-
selector: (_, AssetPickerProvider<A, P> provider) =>
285+
child: Selector<AssetPickerProvider<Asset, Path>, bool>(
286+
selector: (_, AssetPickerProvider<Asset, Path> provider) =>
287287
provider.isAssetsEmpty,
288288
builder: (BuildContext c, bool isAssetsEmpty, Widget? w) {
289289
if (loadingIndicatorBuilder != null) {
@@ -338,7 +338,7 @@ abstract class AssetPickerBuilderDelegate<A, P> {
338338
/// 为 Grid 布局指示如何找到可复用的 [RenderObject]
339339
int? findChildIndexBuilder({
340340
required String id,
341-
required List<A> assets,
341+
required List<Asset> assets,
342342
int placeholderCount = 0,
343343
}) =>
344344
null;
@@ -347,7 +347,7 @@ abstract class AssetPickerBuilderDelegate<A, P> {
347347
/// 为资源列表提供内容数量计算的方法
348348
int assetsGridItemCount({
349349
required BuildContext context,
350-
required List<A> assets,
350+
required List<Asset> assets,
351351
int placeholderCount = 0,
352352
});
353353

@@ -356,23 +356,23 @@ abstract class AssetPickerBuilderDelegate<A, P> {
356356
Widget assetGridItemBuilder(
357357
BuildContext context,
358358
int index,
359-
List<A> currentAssets,
359+
List<Asset> currentAssets,
360360
);
361361

362362
/// The item builder for audio type of asset.
363363
/// 音频资源的部件构建
364364
Widget audioItemBuilder(
365365
BuildContext context,
366366
int index,
367-
A asset,
367+
Asset asset,
368368
);
369369

370370
/// The item builder for images and video type of asset.
371371
/// 图片和视频资源的部件构建
372372
Widget imageAndVideoItemBuilder(
373373
BuildContext context,
374374
int index,
375-
A asset,
375+
Asset asset,
376376
);
377377

378378
/// Preview button to preview selected assets.
@@ -563,7 +563,7 @@ abstract class AssetPickerBuilderDelegate<A, P> {
563563
value: overlayStyle,
564564
child: Theme(
565565
data: theme,
566-
child: ChangeNotifierProvider<AssetPickerProvider<A, P>>.value(
566+
child: ChangeNotifierProvider<AssetPickerProvider<Asset, Path>>.value(
567567
value: provider,
568568
builder: (BuildContext c, __) => Material(
569569
color: theme.canvasColor,

lib/src/delegates/asset_picker_viewer_builder_delegate.dart

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import '../constants/constants.dart';
1414
import '../widget/builder/value_listenable_builder_2.dart';
1515
import '../widget/custom_checkbox.dart';
1616

17-
abstract class AssetPickerViewerBuilderDelegate<A, P> {
17+
abstract class AssetPickerViewerBuilderDelegate<Asset, Path> {
1818
AssetPickerViewerBuilderDelegate({
1919
required this.previewAssets,
2020
required this.themeData,
@@ -27,23 +27,23 @@ abstract class AssetPickerViewerBuilderDelegate<A, P> {
2727

2828
/// [ChangeNotifier] for photo selector viewer.
2929
/// 资源预览器的状态保持
30-
final AssetPickerViewerProvider<A>? provider;
30+
final AssetPickerViewerProvider<Asset>? provider;
3131

3232
/// Assets provided to preview.
3333
/// 提供预览的资源
34-
final List<A> previewAssets;
34+
final List<Asset> previewAssets;
3535

3636
/// Theme for the viewer.
3737
/// 主题
3838
final ThemeData themeData;
3939

4040
/// Selected assets.
4141
/// 已选的资源
42-
final List<A>? selectedAssets;
42+
final List<Asset>? selectedAssets;
4343

4444
/// Provider for [AssetPicker].
4545
/// 资源选择器的状态保持
46-
final AssetPickerProvider<A, P>? selectorProvider;
46+
final AssetPickerProvider<Asset, Path>? selectorProvider;
4747

4848
/// [StreamController] for viewing page index update.
4949
/// 用于更新当前正在浏览的资源页码的流控制器
@@ -61,7 +61,7 @@ abstract class AssetPickerViewerBuilderDelegate<A, P> {
6161

6262
/// The [State] for a viewer.
6363
/// 预览器的状态实例
64-
late final AssetPickerViewerState<A, P> viewerState;
64+
late final AssetPickerViewerState<Asset, Path> viewerState;
6565

6666
/// The [TickerProvider] for animations.
6767
/// 用于动画的 [TickerProvider]
@@ -81,7 +81,7 @@ abstract class AssetPickerViewerBuilderDelegate<A, P> {
8181

8282
/// Getter for the current asset.
8383
/// 当前资源的Getter
84-
A get currentAsset => previewAssets.elementAt(currentIndex);
84+
Asset get currentAsset => previewAssets.elementAt(currentIndex);
8585

8686
/// Height for bottom preview widget.
8787
/// 底栏预览部件的高度
@@ -99,7 +99,10 @@ abstract class AssetPickerViewerBuilderDelegate<A, P> {
9999

100100
/// Call when viewer is calling [initState].
101101
/// 当预览器调用 [initState] 时注册 [State][TickerProvider]
102-
void initStateAndTicker(AssetPickerViewerState<A, P> s, TickerProvider v) {
102+
void initStateAndTicker(
103+
AssetPickerViewerState<Asset, Path> s,
104+
TickerProvider v,
105+
) {
103106
viewerState = s;
104107
vsync = v;
105108
}
@@ -127,7 +130,7 @@ abstract class AssetPickerViewerBuilderDelegate<A, P> {
127130
late final ValueNotifier<int> selectedNotifier =
128131
ValueNotifier<int>(selectedCount);
129132

130-
void unSelectAsset(A entity) {
133+
void unSelectAsset(Asset entity) {
131134
provider?.unSelectAssetEntity(entity);
132135
if (!isSelectedPreviewing) {
133136
selectedAssets?.remove(entity);
@@ -137,7 +140,7 @@ abstract class AssetPickerViewerBuilderDelegate<A, P> {
137140
}
138141
}
139142

140-
void selectAsset(A entity) {
143+
void selectAsset(Asset entity) {
141144
if (maxAssets != null && selectedCount >= maxAssets!) {
142145
return;
143146
}

lib/src/provider/asset_picker_provider.dart

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ import '../constants/constants.dart';
1414
/// The provider maintain all methods that control assets and paths.
1515
/// By extending it you can customize how you can get all assets or paths,
1616
/// how to fetch the next page of assets, how to get the thumb data of a path.
17-
abstract class AssetPickerProvider<A, P> extends ChangeNotifier {
17+
abstract class AssetPickerProvider<Asset, Path> extends ChangeNotifier {
1818
AssetPickerProvider({
1919
this.maxAssets = 9,
2020
this.pageSize = 320,
2121
this.pathThumbSize = 80,
22-
List<A>? selectedAssets,
22+
List<Asset>? selectedAssets,
2323
}) {
2424
if (selectedAssets?.isNotEmpty == true) {
25-
_selectedAssets = List<A>.from(selectedAssets!);
25+
_selectedAssets = List<Asset>.from(selectedAssets!);
2626
}
2727
}
2828

@@ -123,9 +123,9 @@ abstract class AssetPickerProvider<A, P> extends ChangeNotifier {
123123
///
124124
/// Using [Map] in order to save the thumb data for the first asset under the path.
125125
/// 使用[Map]来保存路径下第一个资源的缩略数据。
126-
final Map<P, Uint8List?> _pathEntityList = <P, Uint8List?>{};
126+
final Map<Path, Uint8List?> _pathEntityList = <Path, Uint8List?>{};
127127

128-
Map<P, Uint8List?> get pathEntityList => _pathEntityList;
128+
Map<Path, Uint8List?> get pathEntityList => _pathEntityList;
129129

130130
/// How many path has a valid thumb data.
131131
/// 当前有多少目录已经正常载入了缩略图
@@ -138,11 +138,11 @@ abstract class AssetPickerProvider<A, P> extends ChangeNotifier {
138138

139139
/// The path which is currently using.
140140
/// 正在查看的资源路径
141-
P? _currentPathEntity;
141+
Path? _currentPathEntity;
142142

143-
P? get currentPathEntity => _currentPathEntity;
143+
Path? get currentPathEntity => _currentPathEntity;
144144

145-
set currentPathEntity(P? value) {
145+
set currentPathEntity(Path? value) {
146146
if (value == null || value == _currentPathEntity) {
147147
return;
148148
}
@@ -152,29 +152,29 @@ abstract class AssetPickerProvider<A, P> extends ChangeNotifier {
152152

153153
/// Assets under current path entity.
154154
/// 正在查看的资源路径下的所有资源
155-
List<A> _currentAssets = <A>[];
155+
List<Asset> _currentAssets = <Asset>[];
156156

157-
List<A> get currentAssets => _currentAssets;
157+
List<Asset> get currentAssets => _currentAssets;
158158

159-
set currentAssets(List<A> value) {
159+
set currentAssets(List<Asset> value) {
160160
if (value == _currentAssets) {
161161
return;
162162
}
163-
_currentAssets = List<A>.from(value);
163+
_currentAssets = List<Asset>.from(value);
164164
notifyListeners();
165165
}
166166

167167
/// Selected assets.
168168
/// 已选中的资源
169-
List<A> _selectedAssets = <A>[];
169+
List<Asset> _selectedAssets = <Asset>[];
170170

171-
List<A> get selectedAssets => _selectedAssets;
171+
List<Asset> get selectedAssets => _selectedAssets;
172172

173-
set selectedAssets(List<A> value) {
173+
set selectedAssets(List<Asset> value) {
174174
if (value == _selectedAssets) {
175175
return;
176176
}
177-
_selectedAssets = List<A>.from(value);
177+
_selectedAssets = List<Asset>.from(value);
178178
notifyListeners();
179179
}
180180

@@ -186,7 +186,7 @@ abstract class AssetPickerProvider<A, P> extends ChangeNotifier {
186186
/// 它为预览部件的选中部分的 [Selector] 提供了是否重建的条件。
187187
String get selectedDescriptions => _selectedAssets.fold(
188188
<String>[],
189-
(List<String> list, A a) => list..add(a.toString()),
189+
(List<String> list, Asset a) => list..add(a.toString()),
190190
).join();
191191

192192
/// 选中资源是否为空
@@ -201,38 +201,38 @@ abstract class AssetPickerProvider<A, P> extends ChangeNotifier {
201201

202202
/// Get thumb data from the first asset under the specific path entity.
203203
/// 获取指定路径下的第一个资源的缩略数据
204-
Future<Uint8List?> getFirstThumbFromPathEntity(P pathEntity);
204+
Future<Uint8List?> getFirstThumbFromPathEntity(Path pathEntity);
205205

206206
/// Get assets under the specific path entity.
207207
/// 获取指定路径下的资源
208-
Future<void> getAssetsFromEntity(int page, P pathEntity);
208+
Future<void> getAssetsFromEntity(int page, Path pathEntity);
209209

210210
/// Load more assets.
211211
/// 加载更多资源
212212
Future<void> loadMoreAssets();
213213

214214
/// Select asset.
215215
/// 选中资源
216-
void selectAsset(A item) {
216+
void selectAsset(Asset item) {
217217
if (selectedAssets.length == maxAssets || selectedAssets.contains(item)) {
218218
return;
219219
}
220-
final List<A> _set = List<A>.from(selectedAssets);
220+
final List<Asset> _set = List<Asset>.from(selectedAssets);
221221
_set.add(item);
222222
selectedAssets = _set;
223223
}
224224

225225
/// Un-select asset.
226226
/// 取消选中资源
227-
void unSelectAsset(A item) {
228-
final List<A> _set = List<A>.from(selectedAssets);
227+
void unSelectAsset(Asset item) {
228+
final List<Asset> _set = List<Asset>.from(selectedAssets);
229229
_set.remove(item);
230230
selectedAssets = _set;
231231
}
232232

233233
/// Switch path entity.
234234
/// 切换路径
235-
Future<void> switchPath([P? pathEntity]);
235+
Future<void> switchPath([Path? pathEntity]);
236236
}
237237

238238
class DefaultAssetPickerProvider

0 commit comments

Comments
 (0)