Skip to content

Commit 45a5d76

Browse files
committed
feat: add onLimitExceed callback to ImagePickerButton
1 parent 6b6f62f commit 45a5d76

File tree

5 files changed

+74
-43
lines changed

5 files changed

+74
-43
lines changed

.dart_tool/package_config.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,7 @@
572572
"languageVersion": "3.0"
573573
}
574574
],
575-
"generated": "2023-08-18T02:30:43.030650Z",
575+
"generated": "2023-08-18T03:56:22.058957Z",
576576
"generator": "pub",
577577
"generatorVersion": "3.1.0"
578578
}

.flutter-plugins-dependencies

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"file_picker","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_picker-5.3.3/","native_build":true,"dependencies":[]},{"name":"image_picker_ios","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.8/","native_build":true,"dependencies":[]}],"android":[{"name":"file_picker","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_picker-5.3.3/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]},{"name":"flutter_plugin_android_lifecycle","path":"/Users/kishor/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.15/","native_build":true,"dependencies":[]},{"name":"image_picker_android","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_android-0.8.7+4/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]}],"macos":[{"name":"file_selector_macos","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.3+1/","native_build":true,"dependencies":[]},{"name":"image_picker_macos","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1/","native_build":false,"dependencies":["file_selector_macos"]}],"linux":[{"name":"file_selector_linux","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.2/","native_build":true,"dependencies":[]},{"name":"image_picker_linux","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1/","native_build":false,"dependencies":["file_selector_linux"]}],"windows":[{"name":"file_selector_windows","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3/","native_build":true,"dependencies":[]},{"name":"image_picker_windows","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1/","native_build":false,"dependencies":["file_selector_windows"]}],"web":[{"name":"file_picker","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_picker-5.3.3/","dependencies":[]},{"name":"image_picker_for_web","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.0/","dependencies":[]}]},"dependencyGraph":[{"name":"file_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"file_selector_linux","dependencies":[]},{"name":"file_selector_macos","dependencies":[]},{"name":"file_selector_windows","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios","image_picker_linux","image_picker_macos","image_picker_windows"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]},{"name":"image_picker_linux","dependencies":["file_selector_linux"]},{"name":"image_picker_macos","dependencies":["file_selector_macos"]},{"name":"image_picker_windows","dependencies":["file_selector_windows"]}],"date_created":"2023-08-18 08:15:43.188871","version":"3.13.0"}
1+
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"file_picker","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_picker-5.3.3/","native_build":true,"dependencies":[]},{"name":"image_picker_ios","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.8/","native_build":true,"dependencies":[]}],"android":[{"name":"file_picker","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_picker-5.3.3/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]},{"name":"flutter_plugin_android_lifecycle","path":"/Users/kishor/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.15/","native_build":true,"dependencies":[]},{"name":"image_picker_android","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_android-0.8.7+4/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]}],"macos":[{"name":"file_selector_macos","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.3+1/","native_build":true,"dependencies":[]},{"name":"image_picker_macos","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1/","native_build":false,"dependencies":["file_selector_macos"]}],"linux":[{"name":"file_selector_linux","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.2/","native_build":true,"dependencies":[]},{"name":"image_picker_linux","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1/","native_build":false,"dependencies":["file_selector_linux"]}],"windows":[{"name":"file_selector_windows","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3/","native_build":true,"dependencies":[]},{"name":"image_picker_windows","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1/","native_build":false,"dependencies":["file_selector_windows"]}],"web":[{"name":"file_picker","path":"/Users/kishor/.pub-cache/hosted/pub.dev/file_picker-5.3.3/","dependencies":[]},{"name":"image_picker_for_web","path":"/Users/kishor/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.0/","dependencies":[]}]},"dependencyGraph":[{"name":"file_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"file_selector_linux","dependencies":[]},{"name":"file_selector_macos","dependencies":[]},{"name":"file_selector_windows","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"image_picker","dependencies":["image_picker_android","image_picker_for_web","image_picker_ios","image_picker_linux","image_picker_macos","image_picker_windows"]},{"name":"image_picker_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"image_picker_ios","dependencies":[]},{"name":"image_picker_linux","dependencies":["file_selector_linux"]},{"name":"image_picker_macos","dependencies":["file_selector_macos"]},{"name":"image_picker_windows","dependencies":["file_selector_windows"]}],"date_created":"2023-08-18 09:41:22.188550","version":"3.13.0"}

CHANGELOG.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
#1.2.2
1+
2+
# 1.2.3
3+
- added `onLimitExceed` to ImagePickerButton
4+
5+
# 1.2.2
26
- added `ImagePickerButton`
37

48
# 1.2.1

lib/src/widgets/image_picker_button.dart

+66-39
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ abstract class ImagePickerButton extends StatelessWidget {
2323
this.shape,
2424
this.isMultiple = false,
2525
this.onMultipleImagesPicked,
26+
this.onLimitExceed,
2627
});
2728

2829
///
@@ -38,6 +39,8 @@ abstract class ImagePickerButton extends StatelessWidget {
3839
Color? foregroundColor,
3940
TextStyle? textStyle,
4041
OutlinedBorder? shape,
42+
int? countLimit,
43+
VoidCallback? onLimitExceed,
4144
}) = _CameraPickerButton;
4245

4346
///
@@ -57,6 +60,7 @@ abstract class ImagePickerButton extends StatelessWidget {
5760
TextStyle? textStyle,
5861
OutlinedBorder? shape,
5962
bool? isMultiple,
63+
VoidCallback? onLimitExceed,
6064
}) = _GalleryPickerButton;
6165

6266
///
@@ -77,6 +81,7 @@ abstract class ImagePickerButton extends StatelessWidget {
7781
TextStyle? textStyle,
7882
OutlinedBorder? shape,
7983
bool? isMultiple,
84+
VoidCallback? onLimitExceed,
8085
}) = _ChoosePickerButton;
8186

8287
final bool isMultiple;
@@ -102,6 +107,8 @@ abstract class ImagePickerButton extends StatelessWidget {
102107
final TextStyle? textStyle;
103108

104109
final OutlinedBorder? shape;
110+
111+
final VoidCallback? onLimitExceed;
105112
}
106113

107114
class _CameraPickerButton extends ImagePickerButton {
@@ -115,9 +122,12 @@ class _CameraPickerButton extends ImagePickerButton {
115122
super.foregroundColor,
116123
super.textStyle,
117124
super.shape,
125+
super.onLimitExceed,
126+
int? countLimit,
118127
}) : super._(
119128
sizeInMb: sizeInMb ?? -1,
120129
dialogBuilder: null,
130+
count: countLimit ?? 1,
121131
);
122132

123133
@override
@@ -130,8 +140,13 @@ class _CameraPickerButton extends ImagePickerButton {
130140
);
131141

132142
void onPressed() async {
133-
final image = await ImagePickerHelper.pickImageFromCamera(sizeInMb);
134-
onImagePicked?.call(image);
143+
if (count == 0) {
144+
onLimitExceed?.call();
145+
return;
146+
} else {
147+
final image = await ImagePickerHelper.pickImageFromCamera(sizeInMb);
148+
onImagePicked?.call(image);
149+
}
135150
}
136151

137152
if (icon != null) {
@@ -152,19 +167,20 @@ class _CameraPickerButton extends ImagePickerButton {
152167
}
153168

154169
class _GalleryPickerButton extends ImagePickerButton {
155-
const _GalleryPickerButton({
156-
super.key,
157-
super.label = 'Gallery',
158-
super.icon,
159-
ValueChanged<List<XFile>?>? onImagePicked,
160-
int? sizeInMb,
161-
int? countLimit,
162-
super.backgroundColor,
163-
super.foregroundColor,
164-
super.textStyle,
165-
super.shape,
166-
bool? isMultiple,
167-
}) : super._(
170+
const _GalleryPickerButton(
171+
{super.key,
172+
super.label = 'Gallery',
173+
super.icon,
174+
ValueChanged<List<XFile>?>? onImagePicked,
175+
int? sizeInMb,
176+
int? countLimit,
177+
super.backgroundColor,
178+
super.foregroundColor,
179+
super.textStyle,
180+
super.shape,
181+
bool? isMultiple,
182+
super.onLimitExceed})
183+
: super._(
168184
onMultipleImagesPicked: onImagePicked,
169185
sizeInMb: sizeInMb ?? -1,
170186
count: countLimit ?? 1,
@@ -182,18 +198,23 @@ class _GalleryPickerButton extends ImagePickerButton {
182198
);
183199

184200
void onPressed() async {
185-
final List<XFile> files = [];
186-
if (isMultiple) {
187-
final images = await ImagePickerHelper.pickMultiImage(
188-
sizeInMb: sizeInMb,
189-
count: count,
190-
);
191-
files.addAll(images?.whereType<XFile>().toList() ?? []);
201+
if (count == 0) {
202+
onLimitExceed?.call();
203+
return;
192204
} else {
193-
final image = await ImagePickerHelper.pickImageFromGallery(sizeInMb);
194-
if (image != null) files.add(image);
205+
final List<XFile> files = [];
206+
if (isMultiple) {
207+
final images = await ImagePickerHelper.pickMultiImage(
208+
sizeInMb: sizeInMb,
209+
count: count,
210+
);
211+
files.addAll(images?.whereType<XFile>().toList() ?? []);
212+
} else {
213+
final image = await ImagePickerHelper.pickImageFromGallery(sizeInMb);
214+
if (image != null) files.add(image);
215+
}
216+
onMultipleImagesPicked?.call(files);
195217
}
196-
onMultipleImagesPicked?.call(files);
197218
}
198219

199220
if (icon != null) {
@@ -227,6 +248,7 @@ class _ChoosePickerButton extends ImagePickerButton {
227248
super.textStyle,
228249
super.shape,
229250
bool? isMultiple,
251+
super.onLimitExceed,
230252
}) : super._(
231253
onMultipleImagesPicked: onImagePicked,
232254
sizeInMb: sizeInMb ?? -1,
@@ -244,21 +266,26 @@ class _ChoosePickerButton extends ImagePickerButton {
244266
);
245267

246268
void onPressed() async {
247-
if (isMultiple) {
248-
final files = await ImagePickerHelper.selectAndPickImageMultiple(
249-
context,
250-
builder: dialogBuilder,
251-
sizeInMb: sizeInMb,
252-
count: count,
253-
);
254-
onMultipleImagesPicked?.call(files);
269+
if (count == 0) {
270+
onLimitExceed?.call();
271+
return;
255272
} else {
256-
final file = await ImagePickerHelper.selectAndPickImage(
257-
context,
258-
builder: dialogBuilder,
259-
sizeInMb: sizeInMb,
260-
);
261-
if (file != null) onMultipleImagesPicked?.call([file]);
273+
if (isMultiple) {
274+
final files = await ImagePickerHelper.selectAndPickImageMultiple(
275+
context,
276+
builder: dialogBuilder,
277+
sizeInMb: sizeInMb,
278+
count: count,
279+
);
280+
onMultipleImagesPicked?.call(files);
281+
} else {
282+
final file = await ImagePickerHelper.selectAndPickImage(
283+
context,
284+
builder: dialogBuilder,
285+
sizeInMb: sizeInMb,
286+
);
287+
if (file != null) onMultipleImagesPicked?.call([file]);
288+
}
262289
}
263290
}
264291

pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: fp_util
22
description: Utilities and Extensions for num,BuildContext,EdgeInsets,File,String. constants for horizontal and vertical spacing.
3-
version: 1.2.2
3+
version: 1.2.3
44

55
homepage: https://mkcli.kishormainali.com/
66
repository: https://github.com/kishormainali/fp_util

0 commit comments

Comments
 (0)