flutter - 颤振:如何检测键盘?
问题描述
我想检测键盘。并希望在键盘可见或不可见时显示其他文本。
但是我的代码不起作用。
这是我的代码。
class Search extends StatefulWidget {
@override
_SearchState createState() => _SearchState();
}
class _SearchState extends State<Search> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
color: Colors.white,
child: Column(
children: [
Expanded(
flex: 1,
child: ListView(
children: [
MediaQuery.of(context).viewInsets.bottom !=0 ? Center(child: Text("true"),) : Center(child: Text("false"),)
],
),
)
],
),
),
);
}
}
解决方案
正如@Anas Mohammed 提到的,您可以使用keyboard_visibility包来做到这一点。这是一个完整的例子:
import 'package:flutter/material.dart';
import 'package:keyboard_visibility/keyboard_visibility.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Keyboard visibility example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: KeyboardVisibilityExample(),
);
}
}
class KeyboardVisibilityExample extends StatefulWidget {
KeyboardVisibilityExample({Key key}) : super(key: key);
@override
_KeyboardVisibilityExampleState createState() => _KeyboardVisibilityExampleState();
}
class _KeyboardVisibilityExampleState extends State<KeyboardVisibilityExample> {
KeyboardVisibilityNotification _keyboardVisibility = new KeyboardVisibilityNotification();
int _keyboardVisibilitySubscriberId;
bool _keyboardState;
@protected
void initState() {
super.initState();
_keyboardState = _keyboardVisibility.isKeyboardVisible;
_keyboardVisibilitySubscriberId = _keyboardVisibility.addNewListener(
onChange: (bool visible) {
setState(() {
_keyboardState = visible;
});
},
);
}
@override
void dispose() {
_keyboardVisibility.removeListener(_keyboardVisibilitySubscriberId);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Keyboard visibility example'),
),
body: Center(
child: Padding(
padding: EdgeInsets.all(24.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
keyboardType: TextInputType.text,
decoration: InputDecoration(
labelText: 'Input box for keyboard test',
),
),
Container(height: 60.0),
Text(
'The current state of the keyboard is: ' + (_keyboardState ? 'VISIBLE' : 'NOT VISIBLE'),
),
],
)
),
),
);
}
}
推荐阅读
- javascript - 如何让假浏览器标签集中在多个标签上?
- json - 使用要使用 JSONDecoder 解析的模型的通用值(相对于静态 model.self)
- java - springmvc 获取请求查询字符串参数包装到 pojo
- c# - 在谓词之前使用 .Load() 语句或在 .Include() 语句之后调用我的谓词会更好吗?
- python - 尝试通过变量使用 os.path.exists 但出现错误
- azure-devops - 在 Azure 管道中验证 Swagger 验证器徽章
- python - 如何将mysql查询转换为django orm
- python - 无法在与 libtensorflow 链接的 C 程序中嵌入导入 tensorflow 的 Python 脚本
- javascript - 在 PHP 中更新现有表的数据
- mysql - TypeORM - 按匹配的 OR 数量排序