Skip to content

Commit 46f02b9

Browse files
committed
Update dependencies and enhance AiBarcodeScanner functionality
- Bump version to 7.1.0 and update dependencies: mobile_scanner to ^7.1.2 and image_picker to ^1.2.0. - Modify .flutter-plugins-dependencies to reflect updated plugin paths and versions. - Introduce a new GalleryButtonType.none option for the gallery button. - Add support for custom image picker functionality in AiBarcodeScanner and GalleryButton. - Update iOS deployment target from 12.0 to 13.0 across multiple files. - Update Podfile.lock and pubspec.lock to reflect new dependency versions and checksums.
1 parent 08591ed commit 46f02b9

File tree

10 files changed

+144
-68
lines changed

10 files changed

+144
-68
lines changed

.flutter-plugins-dependencies

Lines changed: 1 addition & 1 deletion
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":"image_picker_ios","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"flutter_plugin_android_lifecycle","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.28/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_android","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/image_picker_android-0.8.12+23/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"file_selector_macos","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.4+3/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_macos","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+2/","native_build":false,"dependencies":["file_selector_macos"],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"file_selector_linux","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.3+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_linux","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+2/","native_build":false,"dependencies":["file_selector_linux"],"dev_dependency":false}],"windows":[{"name":"file_selector_windows","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_windows","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/","native_build":false,"dependencies":["file_selector_windows"],"dev_dependency":false}],"web":[{"name":"image_picker_for_web","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/","dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/redgebarkley/.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"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"]},{"name":"mobile_scanner","dependencies":[]}],"date_created":"2025-07-10 09:20:42.012407","version":"3.32.5","swift_package_manager_enabled":{"ios":false,"macos":false}}
1+
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"image_picker_ios","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/image_picker_ios-0.8.13/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/mobile_scanner-7.1.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"flutter_plugin_android_lifecycle","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.30/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_android","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/image_picker_android-0.8.13+3/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/mobile_scanner-7.1.2/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"file_selector_macos","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/file_selector_macos-0.9.4+4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_macos","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/image_picker_macos-0.2.2/","native_build":false,"dependencies":["file_selector_macos"],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/mobile_scanner-7.1.2/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"file_selector_linux","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/file_selector_linux-0.9.3+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_linux","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/image_picker_linux-0.2.2/","native_build":false,"dependencies":["file_selector_linux"],"dev_dependency":false}],"windows":[{"name":"file_selector_windows","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/file_selector_windows-0.9.3+4/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"image_picker_windows","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/image_picker_windows-0.2.2/","native_build":false,"dependencies":["file_selector_windows"],"dev_dependency":false}],"web":[{"name":"image_picker_for_web","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/image_picker_for_web-3.1.0/","dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/arvindsangwan/.puro/shared/pub_cache/hosted/pub.dev/mobile_scanner-7.1.2/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"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"]},{"name":"mobile_scanner","dependencies":[]}],"date_created":"2025-09-27 13:16:19.688170","version":"3.35.1","swift_package_manager_enabled":{"ios":false,"macos":false}}

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
## 7.1.0
2+
3+
- Added child parameter to AiBarcodeScanner
4+
- Bump version to 7.1.0 and update dependencies: mobile_scanner to ^7.1.2 and image_picker to ^1.2.0.
5+
- Introduce a new GalleryButtonType.none option for the gallery button.
6+
- Add support for custom image picker functionality in AiBarcodeScanner and GalleryButton.
7+
- Update your iOS deployment target from 12.0 to 13.0 across multiple files.
8+
19
## 7.0.0
210

311
**Improvements:**

example/ios/Flutter/AppFrameworkInfo.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@
2121
<key>CFBundleVersion</key>
2222
<string>1.0</string>
2323
<key>MinimumOSVersion</key>
24-
<string>12.0</string>
24+
<string>13.0</string>
2525
</dict>
2626
</plist>

example/ios/Podfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ EXTERNAL SOURCES:
8787
:path: ".symlinks/plugins/mobile_scanner/darwin"
8888

8989
SPEC CHECKSUMS:
90-
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
90+
Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467
9191
GoogleDataTransport: ea169759df570f4e37bdee1623ec32a7e64e67c4
9292
GoogleToolboxForMac: 8bef7c7c5cf7291c687cf5354f39f9db6399ad34
9393
GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f

example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@
342342
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
343343
GCC_WARN_UNUSED_FUNCTION = YES;
344344
GCC_WARN_UNUSED_VARIABLE = YES;
345-
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
345+
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
346346
MTL_ENABLE_DEBUG_INFO = NO;
347347
SDKROOT = iphoneos;
348348
SUPPORTED_PLATFORMS = iphoneos;
@@ -361,7 +361,7 @@
361361
DEVELOPMENT_TEAM = J6AMH49GZC;
362362
ENABLE_BITCODE = NO;
363363
INFOPLIST_FILE = Runner/Info.plist;
364-
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
364+
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
365365
LD_RUNPATH_SEARCH_PATHS = (
366366
"$(inherited)",
367367
"@executable_path/Frameworks",
@@ -421,7 +421,7 @@
421421
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
422422
GCC_WARN_UNUSED_FUNCTION = YES;
423423
GCC_WARN_UNUSED_VARIABLE = YES;
424-
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
424+
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
425425
MTL_ENABLE_DEBUG_INFO = YES;
426426
ONLY_ACTIVE_ARCH = YES;
427427
SDKROOT = iphoneos;
@@ -470,7 +470,7 @@
470470
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
471471
GCC_WARN_UNUSED_FUNCTION = YES;
472472
GCC_WARN_UNUSED_VARIABLE = YES;
473-
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
473+
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
474474
MTL_ENABLE_DEBUG_INFO = NO;
475475
SDKROOT = iphoneos;
476476
SUPPORTED_PLATFORMS = iphoneos;
@@ -491,7 +491,7 @@
491491
DEVELOPMENT_TEAM = J6AMH49GZC;
492492
ENABLE_BITCODE = NO;
493493
INFOPLIST_FILE = Runner/Info.plist;
494-
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
494+
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
495495
LD_RUNPATH_SEARCH_PATHS = (
496496
"$(inherited)",
497497
"@executable_path/Frameworks",
@@ -515,7 +515,7 @@
515515
DEVELOPMENT_TEAM = J6AMH49GZC;
516516
ENABLE_BITCODE = NO;
517517
INFOPLIST_FILE = Runner/Info.plist;
518-
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
518+
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
519519
LD_RUNPATH_SEARCH_PATHS = (
520520
"$(inherited)",
521521
"@executable_path/Frameworks",

example/lib/main.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,30 @@ class _HomePageState extends State<HomePage> {
160160
},
161161
),
162162
),
163+
_buildDemoButton(
164+
title: "None Gallery Button",
165+
subtitle: "Shows no gallery button.",
166+
scanner: AiBarcodeScanner(
167+
galleryButtonType: GalleryButtonType.none,
168+
child: Align(
169+
alignment: Alignment.lerp(
170+
Alignment.bottomCenter,
171+
Alignment.center,
172+
0.42,
173+
)!,
174+
child: const Text(
175+
"No gallery button",
176+
style: TextStyle(
177+
fontSize: 18,
178+
fontWeight: FontWeight.bold,
179+
color: Colors.white),
180+
),
181+
),
182+
onDetect: (BarcodeCapture capture) {
183+
/// Do something with the barcode
184+
},
185+
),
186+
),
163187
],
164188
),
165189
),

example/pubspec.lock

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -219,26 +219,26 @@ packages:
219219
dependency: transitive
220220
description:
221221
name: leak_tracker
222-
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
222+
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
223223
url: "https://pub.dev"
224224
source: hosted
225-
version: "10.0.9"
225+
version: "11.0.2"
226226
leak_tracker_flutter_testing:
227227
dependency: transitive
228228
description:
229229
name: leak_tracker_flutter_testing
230-
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
230+
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
231231
url: "https://pub.dev"
232232
source: hosted
233-
version: "3.0.9"
233+
version: "3.0.10"
234234
leak_tracker_testing:
235235
dependency: transitive
236236
description:
237237
name: leak_tracker_testing
238-
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
238+
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
239239
url: "https://pub.dev"
240240
source: hosted
241-
version: "3.0.1"
241+
version: "3.0.2"
242242
lints:
243243
dependency: transitive
244244
description:
@@ -352,10 +352,10 @@ packages:
352352
dependency: transitive
353353
description:
354354
name: test_api
355-
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
355+
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
356356
url: "https://pub.dev"
357357
source: hosted
358-
version: "0.7.4"
358+
version: "0.7.6"
359359
typed_data:
360360
dependency: transitive
361361
description:
@@ -376,10 +376,10 @@ packages:
376376
dependency: transitive
377377
description:
378378
name: vector_math
379-
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
379+
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
380380
url: "https://pub.dev"
381381
source: hosted
382-
version: "2.1.4"
382+
version: "2.2.0"
383383
vm_service:
384384
dependency: transitive
385385
description:
@@ -397,5 +397,5 @@ packages:
397397
source: hosted
398398
version: "1.1.0"
399399
sdks:
400-
dart: ">=3.7.0 <4.0.0"
400+
dart: ">=3.8.0-0 <4.0.0"
401401
flutter: ">=3.29.0"

lib/src/ai_barcode_scanner.dart

Lines changed: 65 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,18 @@ class AiBarcodeScanner extends StatefulWidget {
120120
/// Defaults to `false`.
121121
final bool returnImage;
122122

123+
/// for custom image picker function.
124+
final Future<void> Function(
125+
bool Function(BarcodeCapture)? validator,
126+
void Function(BarcodeCapture)? onDetect,
127+
MobileScannerController controller,
128+
)? onCustomImagePicker;
129+
130+
/// for custom child any where in the body.
131+
/// This will override the gallery button for filled.
132+
/// use [Align/Positioned] to position the child.
133+
final Widget? child;
134+
123135
const AiBarcodeScanner({
124136
super.key,
125137
this.fit = BoxFit.cover,
@@ -150,6 +162,8 @@ class AiBarcodeScanner extends StatefulWidget {
150162
this.flashOnIcon = CupertinoIcons.bolt_fill,
151163
this.flashOffIcon = CupertinoIcons.bolt,
152164
this.returnImage = false,
165+
this.onCustomImagePicker,
166+
this.child,
153167
});
154168

155169
@override
@@ -174,10 +188,11 @@ class _AiBarcodeScannerState extends State<AiBarcodeScanner> {
174188
DeviceOrientation.portraitDown,
175189
]);
176190
}
177-
_controller = widget.controller ?? MobileScannerController(
178-
// Passes the returnImage flag to control whether frame images are returned with barcode data
179-
returnImage: widget.returnImage,
180-
);
191+
_controller = widget.controller ??
192+
MobileScannerController(
193+
// Passes the returnImage flag to control whether frame images are returned with barcode data
194+
returnImage: widget.returnImage,
195+
);
181196
}
182197

183198
@override
@@ -244,14 +259,19 @@ class _AiBarcodeScannerState extends State<AiBarcodeScanner> {
244259
final Rect scanWindow = widget.scanWindow ?? defaultScanWindow;
245260
final isTorchOn = _controller.value.torchState == TorchState.on;
246261

262+
/// default action icons
263+
/// camera switch and torch for easier access
247264
final actionIcons = [
248265
IconButton.filled(
249266
style: IconButton.styleFrom(
250267
backgroundColor: CupertinoColors.systemGrey6,
251268
foregroundColor: CupertinoColors.darkBackgroundGray,
252269
),
253270
icon: Icon(widget.cameraSwitchIcon),
254-
onPressed: () => _controller.switchCamera(),
271+
onPressed: () async {
272+
await _controller.switchCamera();
273+
setState(() {});
274+
},
255275
),
256276
IconButton.filled(
257277
style: IconButton.styleFrom(
@@ -261,11 +281,11 @@ class _AiBarcodeScannerState extends State<AiBarcodeScanner> {
261281
foregroundColor: CupertinoColors.darkBackgroundGray,
262282
),
263283
icon: Icon(isTorchOn ? widget.flashOnIcon : widget.flashOffIcon),
264-
onPressed: () {
265-
_controller.toggleTorch();
284+
onPressed: () async {
285+
await _controller.toggleTorch();
266286
setState(() {});
267287
},
268-
),
288+
)
269289
];
270290

271291
return Scaffold(
@@ -281,6 +301,7 @@ class _AiBarcodeScannerState extends State<AiBarcodeScanner> {
281301
controller: _controller,
282302
isSuccess: _isSuccess,
283303
text: widget.galleryButtonText,
304+
onCustomImagePicker: widget.onCustomImagePicker,
284305
),
285306
...actionIcons,
286307
],
@@ -341,32 +362,35 @@ class _AiBarcodeScannerState extends State<AiBarcodeScanner> {
341362
},
342363
useAppLifecycleState: widget.useAppLifecycleState,
343364
),
344-
if (widget.galleryButtonType == GalleryButtonType.filled)
345-
Align(
346-
alignment: widget.galleryButtonAlignment ??
347-
Alignment.lerp(
348-
Alignment.bottomCenter,
349-
Alignment.center,
350-
0.42,
351-
)!,
352-
child: Row(
353-
mainAxisAlignment: MainAxisAlignment.center,
354-
mainAxisSize: MainAxisSize.min,
355-
children: [
356-
GalleryButton(
357-
onImagePick: widget.onImagePick,
358-
onDetect: widget.onDetect,
359-
validator: widget.validator,
360-
controller: _controller,
361-
isSuccess: _isSuccess,
362-
text: widget.galleryButtonText,
363-
icon: widget.galleryIcon,
364-
),
365-
const SizedBox(width: 4),
366-
...actionIcons,
367-
],
368-
),
369-
),
365+
widget.child ??
366+
(widget.galleryButtonType == GalleryButtonType.filled
367+
? Align(
368+
alignment: widget.galleryButtonAlignment ??
369+
Alignment.lerp(
370+
Alignment.bottomCenter,
371+
Alignment.center,
372+
0.42,
373+
)!,
374+
child: Row(
375+
mainAxisAlignment: MainAxisAlignment.center,
376+
mainAxisSize: MainAxisSize.min,
377+
children: [
378+
GalleryButton(
379+
onImagePick: widget.onImagePick,
380+
onDetect: widget.onDetect,
381+
validator: widget.validator,
382+
controller: _controller,
383+
isSuccess: _isSuccess,
384+
text: widget.galleryButtonText,
385+
icon: widget.galleryIcon,
386+
onCustomImagePicker: widget.onCustomImagePicker,
387+
),
388+
const SizedBox(width: 4),
389+
...actionIcons,
390+
],
391+
),
392+
)
393+
: const SizedBox.shrink()),
370394
],
371395
),
372396
),
@@ -379,12 +403,14 @@ class _AiBarcodeScannerState extends State<AiBarcodeScanner> {
379403
_colorResetTimer?.cancel();
380404
try {
381405
HapticFeedback.lightImpact(); // Always give feedback on scan
406+
final validator = widget.validator;
407+
late final bool isValid;
382408

383-
if (widget.validator == null) return;
384-
385-
final isValid = widget.validator?.call(capture);
386-
387-
if (isValid == null) return;
409+
if (validator == null) {
410+
isValid = true;
411+
} else {
412+
isValid = validator.call(capture);
413+
}
388414

389415
_isSuccess.value = isValid;
390416

0 commit comments

Comments
 (0)