我正在尝试使用具有集成条形码扫描仪的 Android 设备。我有一个文本字段,其中填充了扫描仪读取的数据。它正在工作,但每次我改变焦点时,软键盘都会出现,但我不知道如何隐藏它。 这是我的代码:
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'libr.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'TEST',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.orange),
useMaterial3: true,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _controller = TextEditingController();
late FocusNode _focusNode;
String _message = '';
@override
void initState() {
super.initState();
_focusNode = FocusNode();
WidgetsBinding.instance.addPostFrameCallback((_) async {
FocusScope.of(context).requestFocus(_focusNode);
});
_focusNode.addListener(() {
print('1: ${_focusNode.hasFocus}');
if (!_focusNode.hasFocus) {
print('request!');
_focusNode.requestFocus();
print('requested');
}
SystemChannels.textInput.invokeMethod('TextInput.hide');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text("TEST"),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Stack(
children: [
TextField(
// keyboardType: TextInputType.none,
focusNode: _focusNode,
controller: _controller,
onChanged: (v) {
_message = v;
_controller.text = '';
setState(() {});
},
),
// Container(
// color: Colors.white,
// width: double.infinity,
// height: double.infinity,
// ),
Text(_message),
],
),
),
));
}
}
我尝试通过将文本字段设置为只读或将输入类型设置为无来解决该问题,但这两种方法都不起作用。
现在,每次我隐藏键盘时,焦点都会改变,然后键盘会再次出现......我陷入了循环。
编辑 另外,最终目标是以某种方式隐藏文本字段......也许带有堆栈视图和其上方的全屏容器。
请尝试以下操作希望您能得到解决方案
将此添加到文本字段的装饰中 装饰:输入装饰( counter: Offstage(), // 隐藏计数器小部件 ),
textInputAction:TextInputAction.none
你可以在页面的initstate中添加这个 FocusScope.of(context).unfocus();
只读:true,