引用
scan: "0.0.7" # 二维码扫描
# images_picker: "1.1.0" #图片
image_picker: ^0.6.6 #图片
permission_handler: "5.1.0+2" #权限管理
封装
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:scan/scan.dart';
///扫描二维码插件
class ScanPage extends StatefulWidget {
const ScanPage({Key key}) : super(key: key);
@override
State<ScanPage> createState() => _ScanPageState();
}
///Chaos20220922
class _ScanPageState extends State<ScanPage> {
//闪光灯
IconData lightIcon = Icons.flash_on;
//扫描识图
final ScanController _controller = ScanController();
///init
@override
void initState() {
super.initState();
}
///dispose
@override
void dispose() {
super.dispose();
}
///build
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
alignment: AlignmentDirectional.center,
children: [
//扫描图
ScanView(
controller: _controller,
scanLineColor: Color(0xFF4759DA),
onCapture: (result) {
//返回解析二维码图片结果
_getResult(result: result);
},
),
//返回键
Positioned(
left: 0,
top: 25,
child: IconButton(
icon: Icon(
Icons.arrow_back,
size: 25,
color: Colors.white,
),
onPressed: () {
_getResult();
},
),
),
//解析相册图片二维码
Positioned(
right: 0,
top: 25,
child: MaterialButton(
child: Icon(
Icons.image,
size: 25,
color: Colors.white,
),
onPressed: () async {
var imageFile = await ImagePicker().getImage(source: ImageSource.gallery);
if (imageFile != null) {
_controller.pause();
String result = await Scan.parse(imageFile.path);
if (result != null) {
//返回解析二维码图片结果
_getResult(result: result);
}
}
}),
),
//闪光灯
Positioned(
bottom: 25,
child: StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return MaterialButton(
child: Icon(
lightIcon,
size: 25,
color: Colors.white,
),
onPressed: () {
_controller.toggleTorchMode();
if (lightIcon == Icons.flash_on) {
lightIcon = Icons.flash_off;
} else {
lightIcon = Icons.flash_on;
}
setState(() {});
});
},
),
),
],
),
);
}
///扫描结果返回
_getResult({String result}) {
_controller.pause();
Navigator.of(context).pop(result);
}
}
调用
///扫描二维码
_scanQrCode() {
//回收键盘
// hideTextInput();
//解析二维码
Future.delayed(Duration(milliseconds: 500), () async {
//开启权限
var status = await Permission.camera.request();
if (status.isGranted) {
//获取图片
var result = await Navigator.of(context).push(MaterialPageRoute(builder: (context) => ScanPage()));
print("扫描结果: $result");
if (result == null) return;
}
});
}
网友评论