aman-satu-flutter/lib/widgets/tools/app_barcode_scanner_widget....

177 lines
4.2 KiB
Dart

import 'package:ai_barcode/ai_barcode.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
late String _label;
late Function(String result) _resultCallback;
///
/// AppBarcodeScannerWidget
class AppBarcodeScannerWidget extends StatefulWidget {
///
///
AppBarcodeScannerWidget.defaultStyle({
Function(String result)? resultCallback,
String label = 'Заголовок',
}) {
_resultCallback = resultCallback ?? (String result) {};
_label = label;
}
@override
_AppBarcodeState createState() => _AppBarcodeState();
}
class _AppBarcodeState extends State<AppBarcodeScannerWidget> {
@override
Widget build(BuildContext context) {
return _BarcodePermissionWidget();
}
}
class _BarcodePermissionWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _BarcodePermissionWidgetState();
}
}
class _BarcodePermissionWidgetState extends State<_BarcodePermissionWidget> {
bool _isGranted = false;
@override
void initState() {
super.initState();
}
void _requestMobilePermission() async {
if (await Permission.camera.request().isGranted) {
setState(() {
_isGranted = true;
});
}
}
@override
Widget build(BuildContext context) {
TargetPlatform platform = Theme.of(context).platform;
if (!kIsWeb) {
if (platform == TargetPlatform.android ||
platform == TargetPlatform.iOS) {
_requestMobilePermission();
} else {
setState(() {
_isGranted = true;
});
}
} else {
setState(() {
_isGranted = true;
});
}
return Column(
children: <Widget>[
Expanded(
child: _isGranted
? _BarcodeScannerWidget()
: Center(
child: OutlinedButton(
onPressed: () {
_requestMobilePermission();
},
child: const Text('Запроса на разрешения'),
),
),
),
// _useCameraScan
// ? OutlinedButton(
// onPressed: () {
// setState(() {
// _useCameraScan = false;
// });
// },
// child: Text("Использовать камеру $_label"),
// )
// : Row(
// children: [
// OutlineButton(
// onPressed: () {
// setState(() {
// _useCameraScan = true;
// });
// },
// child: Text("_useCameraScan = true $_label"),
// ),
// OutlineButton(
// onPressed: () {
// _resultCallback(_inputValue);
// },
// child: Text("_resultCallback"),
// ),
// ],
// ),
],
);
}
}
///ScannerWidget
class _BarcodeScannerWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _AppBarcodeScannerWidgetState();
}
}
class _AppBarcodeScannerWidgetState extends State<_BarcodeScannerWidget> {
late ScannerController _scannerController;
@override
void initState() {
super.initState();
_scannerController = ScannerController(scannerResult: (result) {
_resultCallback(result);
}, scannerViewCreated: () {
TargetPlatform platform = Theme.of(context).platform;
if (TargetPlatform.iOS == platform) {
Future.delayed(Duration(seconds: 2), () {
_scannerController.startCamera();
_scannerController.startCameraPreview();
});
} else {
_scannerController.startCamera();
_scannerController.startCameraPreview();
}
});
}
@override
void dispose() {
super.dispose();
_scannerController.stopCameraPreview();
_scannerController.stopCamera();
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Expanded(
child: _getScanWidgetByPlatform(),
)
],
);
}
Widget _getScanWidgetByPlatform() {
return PlatformAiBarcodeScannerWidget(
platformScannerController: _scannerController,
);
}
}