我有一个带有条子和文本字段的屏幕,我在背景中绘制了一个渐变,没关系!但是,当我单击文本字段时,键盘会修改背景的大小。我该如何预防?
class Test extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Colors.blue, Colors.white],
begin: Alignment.topLeft,
end: Alignment.bottomRight),
),
),
CustomScrollView(
slivers: <Widget>[
SliverAppBar(
floating: true,
snap: true,
backgroundColor: Colors.transparent,
elevation: 0.0,
flexibleSpace: FlexibleSpaceBar(
title: const Text("Test"), centerTitle: true),
),
SliverToBoxAdapter(
child: TextField(
decoration: InputDecoration(labelText: "Test Keyboard"),
),
),
SliverToBoxAdapter(
child: TextField(
decoration: InputDecoration(labelText: "Test Keyboard"),
),
),
SliverToBoxAdapter(
child: TextField(
decoration: InputDecoration(labelText: "Test Keyboard"),
),
)
],
)
],
),
);
}
}
答案 0 :(得分:2)
如果您仍然需要将 resizeToAvoidBottomPadding
(或 resizeToAvoidBottomInset
)属性设置为 true,例如为了避免使用键盘遮挡 TextFields,您可以使用如下解决方案以避免像你这样的渐变背景的缩小:
Container(
height: screenHeight,
decoration: getGradientDecoration(context), // your gradient decoration
child: Scaffold(
backgroundColor: Colors.transparent,
resizeToAvoidBottomInset: true,
body: SingleChildScrollView(
child: Column(
children: <Widget>[
// your form body (text fields, ...)
],
),
),
)
)
这允许内部 Scaffold 调整其内容的大小,但由于具有渐变背景的 Container 位于 Scaffold 之外,因此不会调整大小并且渐变保持一致。
答案 1 :(得分:0)
完成此操作的最快方法是使用固定大小的容器。使用媒体查询获取宽度和高度,然后将容器尺寸设置为这些尺寸。
var screenWidth = MediaQuery.of(context).size.width;
var screenHeight = MediaQuery.of(context).size.height;
Container(
width: screenWidth,
height: screenHeight,
...
)
答案 2 :(得分:0)
我必须在脚手架中将属性resizeToAvoidBottomPadding设置为false。
答案 3 :(得分:0)
您不能将CustomScrollView放置为容器的子级吗?