Skip to content

Commit b74f524

Browse files
authored
Merge pull request #146 from RedgeBarkley/add-custom-icons
Add custom icon support for buttons
2 parents d3d23d3 + a18b758 commit b74f524

File tree

4 files changed

+27
-6
lines changed

4 files changed

+27
-6
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/arvindsangwan/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.12+2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/arvindsangwan/.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/arvindsangwan/.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/arvindsangwan/.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/arvindsangwan/.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"file_selector_macos","path":"/Users/arvindsangwan/.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/arvindsangwan/.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/arvindsangwan/.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/arvindsangwan/.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/.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/arvindsangwan/.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/.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/arvindsangwan/.pub-cache/hosted/pub.dev/image_picker_for_web-3.0.6/","dependencies":[],"dev_dependency":false},{"name":"mobile_scanner","path":"/Users/arvindsangwan/.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-06 14:07:45.052206","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/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}}

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,5 @@ migrate_working_dir/
2929
.packages
3030
build/
3131
.vscode
32-
.vsCode
32+
.vsCode
33+
.flutter-plugins-dependencies

lib/src/ai_barcode_scanner.dart

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,18 @@ class AiBarcodeScanner extends StatefulWidget {
103103
/// Configuration for the scanner overlay (lines, borders, colors).
104104
final ScannerOverlayConfig overlayConfig;
105105

106+
/// Custom icon for the gallery button
107+
final IconData galleryIcon;
108+
109+
/// Custom icon for the camera switch button
110+
final IconData cameraSwitchIcon;
111+
112+
/// Custom icon for the flashlight when on
113+
final IconData flashOnIcon;
114+
115+
/// Custom icon for the flashlight when off
116+
final IconData flashOffIcon;
117+
106118
const AiBarcodeScanner({
107119
super.key,
108120
this.fit = BoxFit.cover,
@@ -128,6 +140,10 @@ class AiBarcodeScanner extends StatefulWidget {
128140
this.setPortraitOrientation = true,
129141
this.overlayConfig = const ScannerOverlayConfig(),
130142
this.galleryButtonText = 'Upload from gallery',
143+
this.galleryIcon = CupertinoIcons.photo,
144+
this.cameraSwitchIcon = CupertinoIcons.arrow_2_circlepath,
145+
this.flashOnIcon = CupertinoIcons.bolt_fill,
146+
this.flashOffIcon = CupertinoIcons.bolt,
131147
});
132148

133149
@override
@@ -225,7 +241,7 @@ class _AiBarcodeScannerState extends State<AiBarcodeScanner> {
225241
backgroundColor: CupertinoColors.systemGrey6,
226242
foregroundColor: CupertinoColors.darkBackgroundGray,
227243
),
228-
icon: const Icon(CupertinoIcons.arrow_2_circlepath),
244+
icon: Icon(widget.cameraSwitchIcon),
229245
onPressed: () => _controller.switchCamera(),
230246
),
231247
IconButton.filled(
@@ -235,7 +251,7 @@ class _AiBarcodeScannerState extends State<AiBarcodeScanner> {
235251
: CupertinoColors.systemGrey6,
236252
foregroundColor: CupertinoColors.darkBackgroundGray,
237253
),
238-
icon: const Icon(CupertinoIcons.bolt),
254+
icon: Icon(isTorchOn ? widget.flashOnIcon : widget.flashOffIcon),
239255
onPressed: () {
240256
_controller.toggleTorch();
241257
setState(() {});
@@ -335,6 +351,7 @@ class _AiBarcodeScannerState extends State<AiBarcodeScanner> {
335351
controller: _controller,
336352
isSuccess: _isSuccess,
337353
text: widget.galleryButtonText,
354+
icon: widget.galleryIcon,
338355
),
339356
const SizedBox(width: 4),
340357
...actionIcons,

lib/src/gallery_button.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class GalleryButton extends StatelessWidget {
1919
final ValueNotifier<bool?> isSuccess;
2020
final GalleryButtonType buttonType;
2121
final String text;
22+
final IconData? icon;
2223

2324
const GalleryButton({
2425
super.key,
@@ -29,6 +30,7 @@ class GalleryButton extends StatelessWidget {
2930
required this.isSuccess,
3031
this.buttonType = GalleryButtonType.filled,
3132
this.text = 'Upload from gallery',
33+
this.icon,
3234
});
3335

3436
const GalleryButton.icon({
@@ -39,6 +41,7 @@ class GalleryButton extends StatelessWidget {
3941
required this.controller,
4042
required this.isSuccess,
4143
this.text = 'Upload from gallery',
44+
this.icon = CupertinoIcons.photo,
4245
}) : buttonType = GalleryButtonType.icon;
4346

4447
/// REFACTORED: The logic for picking and analyzing the image is now cleaner.
@@ -81,14 +84,14 @@ class GalleryButton extends StatelessWidget {
8184
backgroundColor: CupertinoColors.systemGrey6,
8285
foregroundColor: CupertinoColors.darkBackgroundGray,
8386
),
84-
icon: const Icon(CupertinoIcons.photo),
87+
icon: Icon(icon),
8588
onPressed: _pickAndAnalyzeImage,
8689
);
8790
case GalleryButtonType.filled:
8891
return FilledButton.icon(
8992
onPressed: _pickAndAnalyzeImage,
9093
label: Text(text),
91-
icon: const Icon(CupertinoIcons.photo),
94+
icon: Icon(icon),
9295
style: FilledButton.styleFrom(
9396
backgroundColor: CupertinoColors.systemGrey6,
9497
foregroundColor: CupertinoColors.darkBackgroundGray,

0 commit comments

Comments
 (0)