修改:
我收到一份报告,指出这是When the keyboard appears, the Flutter widgets resize. How to prevent this?的副本。虽然这是相关的,但这是一个不同的问题。我希望键盘与UI重叠,直到它到达具有焦点的TextField。这是Android上的默认行为
原始
我是Android开发人员,刚开始使用Flutter。我想创建一个登录屏幕。我想要一张insert into times(sale_day, day_type)
select sale_date
, case when to_char(sale_date,'DD-MM') in
( '01-01', '21-01', '18-02', '28-05', '04-07', '03-09', '08-10', '11-11', '22-11', '25-12' )
then 'Holiday'
when to_char(sale_date, 'DY', 'nls_date_language = English') like 'S%'
then 'Weekend'
else
'Weekday'
end as day_type
from sales;
以上的图像。所以我想,我使用TextField
将图片放在背景上,然后使用Stack
下面的图片。
问题是,只要键盘出现,它就会推送所有内容。在Android上,通常键盘只在必要时才会向上推,直到达到TextField
。
我尝试将EditText
设置为false,但之后没有任何动作(当然),resizeToAvoidBottomPadding
被键盘覆盖。
我记得过去玩iOS时,这是默认行为,也许我应该重新考虑我的布局?
目前,我将其包裹在TextField
中,以便用户能够在键盘出现时滚动。
这是我的布局(仅用于测试)
ListView
答案 0 :(得分:8)
在$this->app
中设置autoFocus: true
并在CupertinoTextField()
中设置resizeToAvoidBottomPadding: false
时解决了这个问题。
答案 1 :(得分:1)
我认为这可以满足您的需求。最大的问题是你选择使用Stack。仅当您希望将事物堆叠在一起时才使用堆栈。在这种情况下,你不想要那样。将它放置在一个列中并使用Expanded填充开放空间(此Widget扩展到可用空间并将所有内容向下推)是我这样做的方式。我不是说这是最好的方式(只有2周的扑克经验)。但这是一种方式。我希望它有所帮助!
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new Scaffold(
body: new Column(
children: <Widget>[
new Center(
child: new Container(
height: 150.0,
width: 75.0,
color: Colors.red,
),
),
new Expanded(
child: new Container(),
),
new Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
new TextField(),
new TextField(),
new TextField(),
new TextField(),
new TextField(),
new TextField()
],
),
],
),
),
);
}
}
答案 2 :(得分:0)
也建议不要使用Stack
,而不要使用ListView
。另一方面,您也可以试用SingleChildScrollView
(但可能必须添加额外的代码才能实现)。
快乐编码...
答案 3 :(得分:0)
这是Flutter的默认功能。因此,如果您设置resizeToAvoidBottomInset: false
,则将失去将UI组件保持在键盘上方的功能。
在应用程序中具有背景图像
更好的方法是这样:
Container(
decoration: BoxDecoration(
color: primaryColor,
image: DecorationImage(image: AssetImage(AppImages.appBg)),
),
child: SafeArea(
child: Scaffold(
backgroundColor: Colors.transparent,
body: //All Ui code here//
),
),
),
必要设置脚手架的背景颜色:Colors.transparent 否则,您将看不到背景图片。