【问题标题】:Flutter Bluetooth External Barcode ScannerFlutter 蓝牙外部条码扫描器
【发布时间】:2019-01-04 10:21:55
【问题描述】:

我需要使用通过蓝牙连接到我的设备的外部条码扫描器(它被识别为键盘)。它运行良好,我可以在 TextField 中获取条形码的内容。

问题是我需要将焦点设置到 TextField 才能获取条形码的内容...有没有办法让当前屏幕监听键盘事件,这样我就可以在没有数据的情况下获取数据浪费时间选择 TextField...

有什么想法吗?

谢谢!

【问题讨论】:

    标签: android ios flutter barcode


    【解决方案1】:

    可能为时已晚,但您可以将 TextField 自动对焦属性设置为 true。

    TextField(
      autofocus:true,
    )
    

    【讨论】:

      【解决方案2】:

      您可以将此示例代码用于 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

      【讨论】:

        猜你喜欢
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        • 2015-03-03
        • 1970-01-01
        • 1970-01-01
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多