qrscan 1.2.1
qrscan: ^1.2.1 copied to clipboard
One-shot Flutter QR/barcode scanner: open camera, first decode, string back. Android CameraX+ZXing, iOS Vision. Not a widget.
1.2.1 - 2026-08-22 #
Same two knobs. Looks like WeChat / Alipay without becoming a widget.
await scanner.scan(looks: ScanLooks.wechat);
await scanner.scan(looks: ScanLooks.alipay);
ScanLooks.wechat#07C160+ 「将二维码/条码放入框内,即可自动扫描」ScanLooks.alipay#1677FF+ 「对准二维码/条码」- Scan line now fades at the ends (Android + iOS)
1.2.0 - 2026-08-22 #
scan() is still one line. Optional overlay only:
await scanner.scan();
await scanner.scan(color: Color(0xFF00C853), hint: '对准条码或二维码');
colortints corners + scan line (default#12C4FF). Android + iOShintone line under the viewfinder- Not a widget. No hole size, no custom overlay builder — that is
mobile_scanner
1.1.2 - 2026-08-22 #
Docs only. scan() already reads 1D barcodes (Code 128 / 39, EAN, UPC, …) and 2D. No API change.
- README: camera on a phone or a PDA uses
scan(); laser broadcast usespda_scanner
1.1.1 - 2026-08-22 #
Listing only. No API change.
- pub.dev
topicsand screenshot - One-shot wording in the package description
- Library dartdoc
1.1.0 - 2026-08-22 #
iOS is the same product as Android.
- iOS album / path / bytes: QR first, EXIF orientation, invert, 90° retries, Codabar on iOS 15+
- iOS scanner: viewfinder + scan line + torch + 取消. No in-scanner album
- iOS
CAMERA_IN_USEwhen another app holds the camera - Android
scan()no longer has a gallery button — that isscanPhoto() - Dart rejects empty
scanPath/scanBytes/generateBarCode(release too, not justassert) NoActivity(NO_ACTIVITY) documented
1.0.2 - 2026-08-22 #
- Album / path / bytes: if the first pass misses, retry at 90° / 180° / 270° (phone photos stored sideways; vertical Code 128)
- Decoder harness: 63 fixtures (field ISBT / 发血单 / 微信支付宝样式, JPEG, blur, dark, low contrast, noise, screenshot chrome, inverted, negatives)
TEST-REPORT.mdgenerated by CI
1.0.1 - 2026-08-22 #
- README demo GIF again: tap Scan, first decode, string back
- Example app is one screen, one primary button
1.0.0 - 2026-08-22 #
API freeze. Decoder covered by a 30-case JVM harness that uses the same format order as QrDecoder.
generateBarCodeencodes UTF-8 (Chinese / non-Latin no longer become?)- Codabar keeps start/stop (
RETURN_CODABAR_START_END) - Album / path / bytes: HybridBinarizer then GlobalHistogramBinarizer
- CI runs
tool/decoder-harness(QR, Latin-1, UTF-8 without ECI, Code 128/39/93, Codabar, EAN-13/8, UPC-A/E, ITF, Data Matrix, PDF417, Aztec, invert, noise)
Camera scan() is still one-shot. #90 (SM-A530W) stays open until that device retests.
0.4.0 - 2026-08-21 #
Revive for modern Flutter.
- Dart 3 / Flutter 3.10+
- Android embedding v2 only (CameraX + ZXing core)
- Real iOS scanning via Vision (camera, album, path, bytes)
- Drop JitPack
leyan95/android-zxingLibraryand storage permissions - compileSdk 35, minSdk 21, Android 13+ photo picker
- CODE_128 / CODE_39 / EAN / PDF417 / Aztec / Data Matrix
- Scanner follows device orientation (no portrait lock). CameraX
setTargetRotationon rotate; overlay recenters between top bar and torch (#45 #105 #113) - iOS preview + sample-buffer
videoOrientationfollow the interface when the host allows landscape - Decode QR (TRY_HARDER) before other 2D before 1D, so a dense QR is not stolen as UPC-E (#85)
- Stop forcing UTF-8. BYTE_SEGMENTS → UTF-8 only if valid-with-high-bit, else ISO-8859-1 (#40)
- Camera bind failure closes the scanner. Dart gets
CAMERA_START_FAILED/CAMERA_IN_USEinstead of a black Activity (#81 #130) - iOS Vision: QR/2D before 1D;
requestAccessif.notDetermined;CAMERA_START_FAILEDif no back camera - GitHub Actions CI
- Homepage updated to
wu9007/qrcode_scanner