Flutter 小部件不会在颤振中进入屏幕底部?
所以我试着让注册按钮在屏幕的底部中心对齐。我对flifter比较陌生,我想知道是否有一种方法可以很容易地做到这一点,或者我需要重写很多代码吗?这是我到目前为止所拥有的。正如您所看到的,我将它放在Align()中,但它只指向填充区域的底部中心。我想我要做的是使外部容器()成为整个屏幕的高度,但我也不知道如何做到这一点。如果你有办法做到这一点,请让我知道。谢谢Flutter 小部件不会在颤振中进入屏幕底部?,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,所以我试着让注册按钮在屏幕的底部中心对齐。我对flifter比较陌生,我想知道是否有一种方法可以很容易地做到这一点,或者我需要重写很多代码吗?这是我到目前为止所拥有的。正如您所看到的,我将它放在Align()中,但它只指向填充区域的底部中心。我想我要做的是使外部容器()成为整个屏幕的高度,但我也不知道如何做到这一点。如果你有办法做到这一点,请让我知道。谢谢 import 'package:flutter/material.dart'; class LoginSignupScreen exten
import 'package:flutter/material.dart';
class LoginSignupScreen extends StatefulWidget {
@override
_LoginSignupScreenState createState() => _LoginSignupScreenState();
}
class _LoginSignupScreenState extends State<LoginSignupScreen> {
// TRUE: register page, FALSE: login page
bool _register = true;
void _changeScreen() {
setState(() {
// sets it to the opposite of the current screen
_register = !_register;
});
}
@override
Widget build(BuildContext context) {
return Container(
// height:,
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(20),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ButtonBar(
children: <Widget>[
MaterialButton(
onPressed: _changeScreen,
child: Text('REGISTER'),
),
MaterialButton(
onPressed: _changeScreen,
child: Text('LOGIN'),
),
],
),
],
),
),
Padding(
padding: EdgeInsets.all(20),
child: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(
border: InputBorder.none, hintText: 'E-MAIL'),
),
TextField(
decoration: InputDecoration(
border: InputBorder.none, hintText: 'USERNAME'),
),
TextField(
decoration: InputDecoration(
border: InputBorder.none, hintText: 'PASSWORD'),
)
],
),
),
Align(
alignment: FractionalOffset.bottomCenter,
child: MaterialButton(
onPressed: () => {},
child: Text(_register ? 'REGISTER' : 'LOGIN'),
),
),
],
),
);
}
}
导入“包装:颤振/材料.省道”;
类LoginSignupScreen扩展StatefulWidget{
@凌驾
_LoginSignupScreenState createState()=>\u LoginSignupScreenState();
}
类_LoginSignupScreenState扩展状态{
//TRUE:注册页面,FALSE:登录页面
bool_寄存器=真;
void _changeScreen(){
设置状态(){
//将其设置为与当前屏幕相反的位置
_寄存器=!\u寄存器;
});
}
@凌驾
小部件构建(构建上下文){
返回容器(
//身高:,
子:列(
//mainAxisAlignment:mainAxisAlignment.start,
儿童:[
填充物(
填充:常数边集。全部(20),
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
钮扣杆(
儿童:[
材料按钮(
按下按钮:\u更改屏幕,
子:文本(‘寄存器’),
),
材料按钮(
按下按钮:\u更改屏幕,
子项:文本('LOGIN'),
),
],
),
],
),
),
填充物(
填充:边缘设置。全部(20),
子:列(
儿童:[
文本字段(
装饰:输入装饰(
边框:InputBorder.none,hintText:“电子邮件”),
),
文本字段(
装饰:输入装饰(
边框:InputBorder.none,hintText:“用户名”),
),
文本字段(
装饰:输入装饰(
边框:InputBorder.none,hintText:“密码”),
)
],
),
),
对齐(
对齐:分馏Loffset.bottomCenter,
子:材质按钮(
按下:()=>{},
子项:文本(_register?'register':'LOGIN'),
),
),
],
),
);
}
}
试试这个:
import 'package:flutter/material.dart';
class LoginSignupScreen extends StatefulWidget {
@override
_LoginSignupScreenState createState() => _LoginSignupScreenState();
}
class _LoginSignupScreenState extends State<LoginSignupScreen> {
// TRUE: register page, FALSE: login page
bool _register = true;
void _changeScreen() {
setState(() {
// sets it to the opposite of the current screen
_register = !_register;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
// height:,
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(20),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ButtonBar(
children: <Widget>[
MaterialButton(
onPressed: _changeScreen,
child: Text('REGISTER'),
),
MaterialButton(
onPressed: _changeScreen,
child: Text('LOGIN'),
),
],
),
],
),
),
Padding(
padding: EdgeInsets.all(20),
child: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(
border: InputBorder.none, hintText: 'E-MAIL'),
),
TextField(
decoration: InputDecoration(
border: InputBorder.none, hintText: 'USERNAME'),
),
TextField(
decoration: InputDecoration(
border: InputBorder.none, hintText: 'PASSWORD'),
)
],
),
),
Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
MaterialButton(
onPressed: () => {},
child: Text(_register ? 'REGISTER' : 'LOGIN'),
),
],
)
],
),
),
);
}
}
导入“包装:颤振/材料.省道”;
类LoginSignupScreen扩展StatefulWidget{
@凌驾
_LoginSignupScreenState createState()=>\u LoginSignupScreenState();
}
类_LoginSignupScreenState扩展状态{
//TRUE:注册页面,FALSE:登录页面
bool_寄存器=真;
void _changeScreen(){
设置状态(){
//将其设置为与当前屏幕相反的位置
_寄存器=!\u寄存器;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
//身高:,
子:列(
//mainAxisAlignment:mainAxisAlignment.start,
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
填充物(
填充:常数边集。全部(20),
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
钮扣杆(
儿童:[
材料按钮(
按下按钮:\u更改屏幕,
子:文本(‘寄存器’),
),
材料按钮(
按下按钮:\u更改屏幕,
子项:文本('LOGIN'),
),
],
),
],
),
),
填充物(
填充:边缘设置。全部(20),
子:列(
儿童:[
文本字段(
装饰:输入装饰(
边框:InputBorder.none,hintText:“电子邮件”),
),
文本字段(
装饰:输入装饰(
边框:InputBorder.none,hintText:“用户名”),
),
文本字段(
装饰:输入装饰(
边框:InputBorder.none,hintText:“密码”),
)
],
),
),
纵队(
mainAxisAlignment:mainAxisAlignment.end,
儿童:[
材料按钮(
按下:()=>{},
子项:文本(_register?'register':'LOGIN'),
),
],
)
],
),
),
);
}
}
您可以设置容器的高度,以覆盖您提到的整个屏幕,然后只需将对齐
小部件包装在一个展开的
小部件中,即可填满可用空间
请尝试以下代码:
Widget build(BuildContext context) {
return Container(
height: MediaQuery.of(context).size.height,
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(20),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ButtonBar(
children: <Widget>[
MaterialButton(
onPressed: _changeScreen,
child: Text('REGISTER'),
),
MaterialButton(
onPressed: _changeScreen,
child: Text('LOGIN'),
),
],
),
],
),
),
Padding(
padding: EdgeInsets.all(20),
child: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(
border: InputBorder.none, hintText: 'E-MAIL'),
),
TextField(
decoration: InputDecoration(
border: InputBorder.none, hintText: 'USERNAME'),
),
TextField(
decoration: InputDecoration(
border: InputBorder.none, hintText: 'PASSWORD'),
)
],
),
),
Expanded(
child: Align(
alignment: Alignment.bottomCenter,
child: MaterialButton(
onPressed: () => {},
child: Text(_register ? 'REGISTER' : 'LOGIN'),
),
),
)
],
),
);
}
小部件构建(构建上下文){
返回容器(
高度:MediaQuery.of(context).size.height,
子:列(
儿童:[
填充物(
填充:常数边集。全部(20),
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
钮扣杆(
儿童:[
材料按钮(
按下按钮:\u更改屏幕,
子:文本(‘寄存器’),
),
材料按钮(
按下按钮:
Expanded(
child: Align(
alignment: FractionalOffset.bottomCenter,
child: MaterialButton(
onPressed: () => {},
child: Text(_register ? 'REGISTER' : 'LOGIN'),
),
),
),
return Scaffold(
bottomNavigationBar: BottomAppBar(
color: Colors.transparent,
child: Text('bottom screen widget'),
elevation: 0,
),
body: Text('body')
);
children : [
///1
Button(),
Expanded(child:Container()),
///2
Button(),
]
drawer: Drawer(
child: Center(
child: Align(
alignment: Alignment.bottomCenter,
child: RaisedButton(
child: const Text('Logout', style: TextStyle(fontSize: 20)),
onPressed: () async {
await _auth.signOutUser();
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => LoginScreen()));
},
),
),
),
),