Login 从侧面而不是屏幕底部输入省道号字段(用于横向)
我正在尝试为横向视图中的应用程序进行pin登录。 我正在使用省道/颤振,无法确定如何重新定位textinput键盘 是否可以使用类似的方式,但强制键盘位于文本字段旁边而不是文本字段下面?Login 从侧面而不是屏幕底部输入省道号字段(用于横向),login,dart,flutter,landscape,Login,Dart,Flutter,Landscape,我正在尝试为横向视图中的应用程序进行pin登录。 我正在使用省道/颤振,无法确定如何重新定位textinput键盘 是否可以使用类似的方式,但强制键盘位于文本字段旁边而不是文本字段下面? 键盘的位置和形状完全取决于设备。甚至还有浮动或拆分键盘,无法修改系统键盘的位置 我建议您在flatter中构建一个“假”数字键盘小部件。这将使您能够完全控制键盘的位置和大小,以及显示的数字。对于简单的PIN输入,您甚至不需要将其连接到真正的文本字段,这使事情变得更简单 下面是一个非常基本的例子: 导入“包装:
键盘的位置和形状完全取决于设备。甚至还有浮动或拆分键盘,无法修改系统键盘的位置 我建议您在flatter中构建一个“假”数字键盘小部件。这将使您能够完全控制键盘的位置和大小,以及显示的数字。对于简单的PIN输入,您甚至不需要将其连接到真正的
文本字段
,这使事情变得更简单
下面是一个非常基本的例子:
导入“包装:颤振/材料.省道”;
void main()=>runApp(新的MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主页:MyLoginPage(),
);
}
}
类MyLoginPage扩展StatefulWidget{
@凌驾
State createState()=>MyLoginPeartate();
}
类MyLoginPagentate扩展了状态{
字符串_pin='';
按下void _on键(int键){
if(key==NumericalKeyboard.backspaceKey){
如果(_pin.length>0){
设置状态(){
_pin=_pin.substring(0,_pin.length-1);
});
}
}否则{
设置状态(){
_pin+=key.toString();
});
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“登录”),
),
正文:世界其他地区(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
已展开(子项:_buildPage()),
数字键盘(
onKeyPressed:_onKeyPressed,
)
],
),
);
}
小部件_buildPage(){
返回填充(
填充:所有边缘设置(16.0),
儿童:中心(
子:容器(
装饰:框装饰(边框:border.all()),
宽度:150.0,
填充:所有边缘设置(4.0),
子:文本(
_别针,
textAlign:textAlign.center,
样式:TextStyle(字体大小:32.0,字母间距:2.0),
),
),
),
);
}
}
typedef键盘回调(int键);
类NumericalKeyboard扩展了无状态小部件{
const NumericalKeyboard({Key-Key,this.onKeyPressed}):super(Key:Key);
静态常量backspaceKey=42;
静态常数clearKey=69;
最后一次键盘回拨,按上键;
@凌驾
小部件构建(构建上下文){
退货(
颜色:颜色。灰色[200],
孩子:桌子(
defaultColumnWidth:IntrinsicColumnWidth(flex:1.0),
边框:TableBorder.all(),
儿童:[
桌椅(
儿童:[
_建筑编号(1),
_建筑编号(2),
_建筑编号(3),
],
),
桌椅(
儿童:[
_建筑编号(4),
_建筑编号(5),
_建筑编号(6),
],
),
桌椅(
儿童:[
_建筑编号(7),
_建筑编号(8),
_建筑编号(9),
],
),
桌椅(
儿童:[
容器(),
_buildNumberKey(0),
_构建键(图标(Icons.backspace),backspaceKey),
],
)
],
),
);
}
小部件_buildNumberKey(int n){
返回_buildKey(文本('$n'),n);
}
小部件构建键(小部件图标,int键){
返回图标按钮(
图标:图标,
填充:所有边缘设置(16.0),
onPressed:()=>onKeyPressed(键),
);
}
}
我担心这就是答案。感谢您的确认,并为如何更改它提供了一个很好的示例。
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: MyLoginPage(),
);
}
}
class MyLoginPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => MyLoginPageState();
}
class MyLoginPageState extends State<MyLoginPage> {
String _pin = '';
void _onKeyPressed(int key) {
if (key == NumericalKeyboard.backspaceKey) {
if (_pin.length > 0) {
setState(() {
_pin = _pin.substring(0, _pin.length - 1);
});
}
} else {
setState(() {
_pin += key.toString();
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('LOGIN'),
),
body: Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Expanded(child: _buildPage()),
NumericalKeyboard(
onKeyPressed: _onKeyPressed,
)
],
),
);
}
Widget _buildPage() {
return Padding(
padding: EdgeInsets.all(16.0),
child: Center(
child: Container(
decoration: BoxDecoration(border: Border.all()),
width: 150.0,
padding: EdgeInsets.all(4.0),
child: Text(
_pin,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 32.0, letterSpacing: 2.0),
),
),
),
);
}
}
typedef KeyboardCallback(int key);
class NumericalKeyboard extends StatelessWidget {
const NumericalKeyboard({Key key, this.onKeyPressed}) : super(key: key);
static const backspaceKey = 42;
static const clearKey = 69;
final KeyboardCallback onKeyPressed;
@override
Widget build(BuildContext context) {
return Material(
color: Colors.grey[200],
child: Table(
defaultColumnWidth: IntrinsicColumnWidth(flex: 1.0),
border: TableBorder.all(),
children: [
TableRow(
children: [
_buildNumberKey(1),
_buildNumberKey(2),
_buildNumberKey(3),
],
),
TableRow(
children: [
_buildNumberKey(4),
_buildNumberKey(5),
_buildNumberKey(6),
],
),
TableRow(
children: [
_buildNumberKey(7),
_buildNumberKey(8),
_buildNumberKey(9),
],
),
TableRow(
children: [
Container(),
_buildNumberKey(0),
_buildKey(Icon(Icons.backspace), backspaceKey),
],
)
],
),
);
}
Widget _buildNumberKey(int n) {
return _buildKey(Text('$n'), n);
}
Widget _buildKey(Widget icon, int key) {
return IconButton(
icon: icon,
padding: EdgeInsets.all(16.0),
onPressed: () => onKeyPressed(key),
);
}
}