Skip to content

Commit 855f3bb

Browse files
committed
fix barcode scanner not showing progress
1 parent 08f4749 commit 855f3bb

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

lib/view_model/barcode_scanner_view_model.dart

+8-13
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class BarcodeScannerViewModel = BarcodeScannerViewModelBase with _$BarcodeScanne
1111

1212
abstract class BarcodeScannerViewModelBase with ViewModel, Store {
1313
BarcodeScannerViewModelBase({required this.wallet});
14+
1415
@override
1516
String get screenName => L.scan;
1617

@@ -23,38 +24,31 @@ abstract class BarcodeScannerViewModelBase with ViewModel, Store {
2324
@observable
2425
List<String> urCodes = [];
2526

26-
URQRData get ur => URQRData.parse(urCodes);
27-
2827
final CoinWallet wallet;
2928

3029
final MobileScannerController mobileScannerCtrl = MobileScannerController();
3130

32-
URQrProgress get urQrProgress => URQrProgress(
33-
expectedPartCount: ur.count - 1,
34-
processedPartsCount: ur.inputs.length,
35-
receivedPartIndexes: urParts(),
36-
percentage: ur.progress,
37-
);
38-
31+
@action
3932
Future<void> handleUR() async {
4033
await callThrowable(
4134
() async {
42-
await wallet.handleUR(c!, ur);
35+
await wallet.handleUR(c!, URQRData.parse(urCodes));
4336
},
4437
L.error_handling_urqr_scan,
4538
);
4639
}
4740

41+
@action
4842
Future<void> handleBarcode(final BarcodeCapture barcodes) async {
4943
for (final barcode in barcodes.barcodes) {
5044
if (barcode.rawValue!.startsWith("ur:")) {
51-
if (ur.progress == 1 && !popped) {
45+
if (URQRData.parse(urCodes).progress == 1 && !popped) {
5246
popped = true;
5347
await handleUR();
5448
return;
5549
}
5650
if (urCodes.contains(barcode.rawValue)) return;
57-
urCodes.add(barcode.rawValue!);
51+
urCodes = [...urCodes, barcode.rawValue!];
5852
}
5953
}
6054
if (urCodes.isNotEmpty) return;
@@ -66,9 +60,10 @@ abstract class BarcodeScannerViewModelBase with ViewModel, Store {
6660
}
6761
}
6862

63+
@action
6964
List<int> urParts() {
7065
final List<int> l = [];
71-
for (final inp in ur.inputs) {
66+
for (final inp in URQRData.parse(urCodes).inputs) {
7267
try {
7368
l.add(int.parse(inp.split("/")[1].split("-")[0]));
7469
} catch (e) {

lib/views/barcode_scanner.dart

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import 'package:cupcake/coins/abstract/wallet.dart';
2+
import 'package:cupcake/utils/urqr.dart';
23
import 'package:cupcake/view_model/barcode_scanner_view_model.dart';
34
import 'package:cupcake/views/abstract.dart';
45
import 'package:cupcake/views/widgets/barcode_scanner/progress_painter.dart';
56
import 'package:cupcake/views/widgets/barcode_scanner/switch_camera.dart';
67
import 'package:cupcake/views/widgets/barcode_scanner/toggle_flashlight_button.dart';
8+
import 'package:cupcake/views/widgets/barcode_scanner/urqr_progress.dart';
79
import 'package:fast_scanner/fast_scanner.dart';
810
import 'package:flutter/material.dart';
911

@@ -20,16 +22,17 @@ class BarcodeScanner extends AbstractView {
2022

2123
@override
2224
Widget? body(final BuildContext context) {
25+
final ur = URQRData.parse(viewModel.urCodes);
2326
return Stack(
2427
children: [
2528
MobileScanner(
2629
onDetect: (final BarcodeCapture bc) => viewModel.handleBarcode(bc),
2730
controller: viewModel.mobileScannerCtrl,
2831
),
29-
if (viewModel.ur.inputs.isNotEmpty)
32+
if (ur.inputs.isNotEmpty)
3033
Center(
3134
child: Text(
32-
"${viewModel.ur.inputs.length}/${viewModel.ur.count}",
35+
"${ur.inputs.length}/${ur.count}",
3336
style: Theme.of(context).textTheme.displayLarge?.copyWith(color: Colors.white),
3437
),
3538
),
@@ -40,7 +43,7 @@ class BarcodeScanner extends AbstractView {
4043
height: 250,
4144
child: CustomPaint(
4245
painter: ProgressPainter(
43-
urQrProgress: viewModel.urQrProgress,
46+
urQrProgress: URQrProgress.fromURQRData(ur),
4447
),
4548
),
4649
),

lib/views/widgets/barcode_scanner/urqr_progress.dart

+11
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'package:cupcake/utils/urqr.dart';
2+
13
class URQrProgress {
24
URQrProgress({
35
required this.expectedPartCount,
@@ -16,4 +18,13 @@ class URQrProgress {
1618
}
1719
return processedPartsCount == progress.processedPartsCount;
1820
}
21+
22+
static URQrProgress fromURQRData(final URQRData ur) {
23+
return URQrProgress(
24+
expectedPartCount: ur.count,
25+
processedPartsCount: ur.inputs.length,
26+
receivedPartIndexes: ur.inputs.map((final e) => int.tryParse(e.split("/")[1].split("-")[0]) ?? 0).toList(),
27+
percentage: ur.progress,
28+
);
29+
}
1930
}

0 commit comments

Comments
 (0)