flutter - 为什么行动后不设置可见性?
问题描述
我正在尝试使用可见性来显示和隐藏我的容器。第一个容器包含登录按钮、注册按钮和忘记密码按钮。第二个容器具有电子邮件文本表单字段。密码文本框,然后登录按钮。
我想做的是;当我单击第一个容器中的登录按钮时,我可以看到第二个容器来填写我的登录凭据。但是目前,当我单击登录按钮时,什么也没有发生。这是为什么?我在这里错过了什么吗?
class StartPage extends StatefulWidget {
_StartPageState createState() => new _StartPageState();
}
class _StartPageState extends State<StartPage> {
Widget build(BuildContext context) {
bool _toDoVisibility = true;
bool _signInVisibility = false;
void _showSignIn(){
_signInVisibility = true;
setState(() {
_toDoVisibility = false;
_signInVisibility = true;
});
}
void _showToDo(){
setState(() {
_signInVisibility = false ;
_toDoVisibility = true;
});
}
final _toDo = Visibility(
child: Container(
alignment: Alignment.center,
decoration: deco.gradient,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ButtonTheme(
child: CustomButtonOutline(text: constant.signIn, onPressed: _showSignIn),
),
SizedBox(width: 20.0),
ButtonTheme(
child: CustomButtonOutline(text: constant.signUp, onPressed: _showToDo),
),
],
),
SizedBox(height: 15.0),
ButtonTheme(
child: CustomButtonOutlineNoBorder(text: constant.forgotPassword, onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => null));
}),
),
],
)),
maintainSize: true,
maintainAnimation: true,
maintainState: true,
visible: _toDoVisibility,
);
final _signIn = Visibility(
child: SingleChildScrollView(
padding: EdgeInsets.fromLTRB(30.0, 20.0, 30.0, 0.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: constant.email),
style: TextStyle(color: constant.colorWhite),
),
SizedBox(height: 10.0),
TextFormField(
decoration: InputDecoration(labelText: constant.password),
obscureText: true,
),
SizedBox(height: 20.0),
CustomButtonOutline(text: constant.signIn, onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => null));
}),
SizedBox(height: 10.0),
],
),
),
maintainSize: true,
maintainAnimation: true,
maintainState: true,
visible: _signInVisibility,
);
return Scaffold(
appBar: AppBar(
elevation: 0.0,
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () => print('something'),
),
),
body: Stack(
fit: StackFit.expand,
children: <Widget>[
_toDo,
_signIn,
],
),
);
}
}
解决方案
您需要在 State 类中但在 build 方法之外定义可见性布尔值,如下所示:
class _StartPageState extends State<StartPage> {
bool _toDoVisibility = true;
bool _signInVisibility = false;
Widget build(BuildContext context) {
...
}
}
推荐阅读
- arrays - 从 Google 表格中的单个范围拆分多个范围
- spring-boot - 如何设计在springboot中接受JSON数组作为输入的post api?
- heroku - Heroku烧瓶webapp部署中的requirements.txt vs Pipfile?
- sql - 将列值分隔为行值
- dart - 如何使用 dart 截取特定应用程序?
- apache - Codeigniter 应用程序上的 RewriteRule 和排除问题
- python - 用于移动物体的 Aruco 标记姿势估计 opencv
- javascript - 在 JS 中映射 laravel 验证器错误
- java - 在邮递员中生成的客户端代码与邮递员的测试响应不匹配
- r - 防止频率形成标签