#flutter #dart
Вопрос:
Поэтому я создаю qr-сканер, и мне удается закончить его и выдать мне результат, но когда я печатаю результат, он дает мне
'Instance of 'Barcode'
Отзывы
Вот мой код
Future _openScanner(BuildContext context) async {
final result = await Navigator.push(context, MaterialPageRoute(builder: (c) => Scanner()));
_result = result.toString();
}
Как я показываю в своем приложении
Text(
_result != null ? _result : 'Hi, Raisa',
style: TextStyle(
color: Color(
0xFFE1C884),
// fontFamily: 'Saveur',
fontWeight: FontWeight
.bold,
fontSize: 20.sp
),
)
Мой QR-код для просмотра
QRView(
key: _qrKey,
overlay: QrScannerOverlayShape(borderColor: Colors.white),
onQRViewCreated: (QRViewController controller) {
this._controller = controller;
controller.scannedDataStream.listen((val) {
// print(val.toString());
if (mounted) {
_controller.dispose();
Navigator.pop(context,val);
}
});
}),
Комментарии:
1. Метод toString() вернет имя объекта, которое
'Instance of 'Barcode'
2. @Mayank, но если я не добавлю, что это будет ошибка
Ответ №1:
Согласно документации, вы должны использовать val.code
для получения строкового значения штрих — кода.
onQRViewCreated: (QRViewController controller) {
this._controller = controller;
controller.scannedDataStream.listen((val) {
if (mounted) {
_controller.dispose();
Navigator.pop(context, val.code);
}
});
}),
В будущем, если у вас возникнут проблемы с пакетом, убедитесь, что вы указали, что и где находится пакет. Таким образом, потенциальным ответчикам не придется искать его и гадать, какой пакет вы используете. Таким образом, вы быстрее получите больше и лучшие ответы.
Ответ №2:
Вы должны сделать что-то вроде этого:
Future _openScanner(BuildContext context) async {
final result = await Navigator.push(context, MaterialPageRoute(builder: (c) => Scanner()));
_result = result.getValue;
}
class Barcode{
String? value;
...
String get getValue{
return value;
}
...
}
QRView(
key: _qrKey,
overlay: QrScannerOverlayShape(borderColor: Colors.white),
onQRViewCreated: (QRViewController controller) {
this._controller = controller;
controller.scannedDataStream.listen((val) {
// print(val.toString());
if (mounted) {
_controller.dispose();
value = val;
Navigator.pop(context);
}
});
}),
}
Комментарии:
1. ошибка в
value = val;
значении типа «Штрих-код» не может быть присвоена переменной типа «Строка». Попробуйте изменить тип переменной или присвоить правому типу значение «Строка».2. @Карамель Из той информации, которую вы дали, это все, что я могу сказать. Вы должны это сделать
value=val;
, где val-строка, возвращаемая с вашего считывателя штрих-кодов,
Ответ №3:
Там есть какая-то ошибка
- добавьте это :
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
Barcode resu<
- добавьте это в QRview
QRView(
key: _qrKey,
overlay: QrScannerOverlayShape(borderColor: Colors.white),
onQRViewCreated: (QRViewController controller) {
this._controller = controller;
controller.scannedDataStream.listen((val) {
// print(val.toString());
if (mounted) {
_controller.dispose();
value = val; //this
Navigator.pop(context);
}
});
}),
}
- когда вы собираетесь показать или распечатать
a. если вы хотите распечатать тип штрих-кода, просто добавьте (.формат) b. если вы хотите распечатать код штрих-кода, просто добавьте (.код)