【发布时间】:2019-01-04 10:21:55
【问题描述】:
我需要使用通过蓝牙连接到我的设备的外部条码扫描器(它被识别为键盘)。它运行良好,我可以在 TextField 中获取条形码的内容。
问题是我需要将焦点设置到 TextField 才能获取条形码的内容...有没有办法让当前屏幕监听键盘事件,这样我就可以在没有数据的情况下获取数据浪费时间选择 TextField...
有什么想法吗?
谢谢!
【问题讨论】:
标签: android ios flutter barcode
我需要使用通过蓝牙连接到我的设备的外部条码扫描器(它被识别为键盘)。它运行良好,我可以在 TextField 中获取条形码的内容。
问题是我需要将焦点设置到 TextField 才能获取条形码的内容...有没有办法让当前屏幕监听键盘事件,这样我就可以在没有数据的情况下获取数据浪费时间选择 TextField...
有什么想法吗?
谢谢!
【问题讨论】:
标签: android ios flutter barcode
可能为时已晚,但您可以将 TextField 自动对焦属性设置为 true。
TextField(
autofocus:true,
)
【讨论】:
您可以将此示例代码用于 RawKeyboardListener:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _title = 'RawKeyboardListener';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: const MyStatefulWidget(),
),
);
}
}
class MyStatefulWidget extends StatefulWidget {
const MyStatefulWidget({Key? key}) : super(key: key);
@override
State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
final FocusNode _focusNode = FocusNode();
String _controller = '';
String? _message;
@override
void dispose() {
_focusNode.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
FocusScope.of(context).requestFocus(_focusNode);
final TextTheme textTheme = Theme.of(context).textTheme;
return Container(
color: Colors.white,
alignment: Alignment.center,
child: DefaultTextStyle(
style: textTheme.bodyText1!,
child: RawKeyboardListener(
focusNode: _focusNode,
onKey: (RawKeyEvent event) {
if (event is RawKeyDownEvent) {
if (event.physicalKey == PhysicalKeyboardKey.enter) {
print('ENTER');
setState(() {
_message = _controller;
_controller = '';
});
} else {
print(
'_handleKeyEvent Event data keyLabel ${event.data.keyLabel}');
_controller += event.data.keyLabel;
}
print('controller: $_controller');
}
},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
_message ?? 'Press a key',
),
Text(
'${_message?.length}',
),
],
),
),
),
);
}
}
您可以将 TextEditingController 用于 TextFormField
【讨论】: