Flutter 在flatter中的操作后显示小部件
在操作后显示小部件的最佳方式是什么?在我的例子中,我想在用户错过登录凭据后显示文本Flutter 在flatter中的操作后显示小部件,flutter,mobile,flutter-layout,Flutter,Mobile,Flutter Layout,在操作后显示小部件的最佳方式是什么?在我的例子中,我想在用户错过登录凭据后显示文本忘记密码?,这样他可以选择重置密码或通过电子邮件发送密码。 图1: 在用户错过密码后的第二张图片中,会触发一个操作,并出现忘记密码: 我曾想过使用AnimatedOpacity(),但不确定这是否是正确的方法。提前感谢您的建议。您可以使用状态管理来显示或隐藏任何操作上的任何小部件。请参见下面的示例,阅读内联注释中的解释 import 'package:flutter/material.dart'; void
忘记密码?
,这样他可以选择重置密码或通过电子邮件发送密码。
图1:
在用户错过密码后的第二张图片中,会触发一个操作,并出现忘记密码
:
我曾想过使用
AnimatedOpacity()
,但不确定这是否是正确的方法。提前感谢您的建议。您可以使用状态管理来显示或隐藏任何操作上的任何小部件。请参见下面的示例,阅读内联注释中的解释
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget{
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool showcard = false; //set widget show to false
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title:Text("Show widget on action"), //title of app
backgroundColor: Colors.redAccent, //background color of app bar
),
body: Container(
child: Column(children: [
showcard?Container( //check if showcard is true or false
child: Card(
child: Padding(
padding: EdgeInsets.all(20),
child:Text("This is card widget")
)
)
):Container(),
//if showcard is true then show card, else show empty contianer.
Container(
child: ElevatedButton(
child: Text(showcard?"Hide Card":"Show Card"),
onPressed: (){
setState(() { //update UI with setState
if(showcard){
showcard = false;
//if showcard is true, then make it false to hide
}else{
showcard = true;
//if showcard is false, then make it true to show.
}
});
},
)
)
],)
)
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:主页(),
);
}
}
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
bool showcard=false;//将小部件显示设置为false
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“操作时显示小部件”),//应用程序标题
backgroundColor:Colors.redAccent,//应用程序栏的背景色
),
主体:容器(
子项:列(子项:[
showcard?容器(//检查showcard是否正确
孩子:卡片(
儿童:填充(
填充:边缘设置。全部(20),
子:文本(“这是卡片小部件”)
)
)
):Container(),
//如果showcard为true,则显示card,否则显示空contianer。
货柜(
儿童:提升按钮(
子项:文本(显示卡?“隐藏卡”:“显示卡”),
已按下:(){
setState((){//使用setState更新UI
如果(显示卡){
showcard=false;
//如果showcard为true,则将其设为false以隐藏
}否则{
showcard=true;
//如果showcard为false,则将其设置为true以显示。
}
});
},
)
)
],)
)
);
}
}
在这个例子中,有一个凸起的按钮,当你点击它时,卡片会出现,有一个“隐藏”按钮,当你点击它时,卡片会消失,反之亦然
输出:
按“显示卡片”按钮后的卡片小部件
这是一个最小的工作代码,用于传递消息。您可以使用setState 在有状态小部件中
import 'package:flutter/material.dart';
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
TextEditingController _email = TextEditingController();
TextEditingController _password = TextEditingController();
bool _forgotPassword = false;
@override
Widget build(BuildContext context) {
return Column(
children: [
TextField(
controller: _email,
),
TextField(
controller: _password,
),
_forgotPassword
? TextButton(
onPressed: () async {
//await your logic for forgotton password
},
child: Text('Forgot Password'))
: Container(),
TextButton(
onPressed: () async {
//await your login logic, if it returns false\error\not authenticated, then you can change the state of _forgotPassword, and then shows 'forgot password TextButton'
setState(() {
_forgotPassword = true;
});
},
child: Text('Login'))
],
);
}
}
导入“包装:颤振/材料.省道”;
类LoginScreen扩展StatefulWidget{
@凌驾
_LoginsScreenState createState()=>\u LoginsScreenState();
}
类_LoginScreenState扩展状态{
TextEditingController_email=TextEditingController();
TextEditingController_password=TextEditingController();
bool _forgotPassword=false;
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
文本字段(
控制员:_电子邮件,
),
文本字段(
控制器:_密码,
),
_放弃密码
?文本按钮(
onPressed:()异步{
//等待您放弃密码的逻辑
},
子项:文本(‘忘记密码’)
:Container(),
文本按钮(
onPressed:()异步{
//等待您的登录逻辑,如果它返回false\error\not authenticated,则您可以更改_forgotPassword的状态,然后显示“忘记密码文本按钮”
设置状态(){
_forgotPassword=true;
});
},
子项:文本('Login'))
],
);
}
}
下面是一个非常简单的代码示例,介绍如何使用Visibility小部件进行此操作
import 'package:flutter/material.dart';
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
TextEditingController emailController = TextEditingController();
TextEditingController passwordController = TextEditingController();
bool showForgotPassword = false;
@override
Widget build(BuildContext context) {
return Column(
children: [
TextField(
controller: emailController,
),
TextField(
controller: passwordController,
),
Visibility(
child: Text("Forgot Password?"),
visible: showForgotPassword,
),
RaisedButton(
child: Text("Log in"),
onPressed: () {
// Validate password
if (passwordController.text != 'realpassword') {
setState(() {
showForgotPassword = true;
});
} else {
// continue
}
},
),
],
);
}
}
导入“包装:颤振/材料.省道”;
类LoginScreen扩展StatefulWidget{
@凌驾
_LoginsScreenState createState()=>\u LoginsScreenState();
}
类_LoginScreenState扩展状态{
TextEditingController emailController=TextEditingController();
TextEditingController密码控制器=TextEditingController();
bool showForgotPassword=false;
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
文本字段(
控制器:emailController,
),
文本字段(
控制器:密码控制器,
),
可见度(
子项:文本(“忘记密码?”),
可见:showForgotPassword,
),
升起的按钮(
子项:文本(“登录”),
已按下:(){
//验证密码
if(passwordController.text!=“realpassword”){
设置状态(){
showForgotPassword=true;
});
}否则{
//继续
}
},
),
],
);
}
}
当我们用错误的密码点击登录按钮时。我们将可见性小部件的visible属性更改为true。因此,密码文本变得可见
如果我们键入正确的密码,那么可见性小部件的visible属性将变为false。因此,文本变得不可见
输出
当他们输入错误的密码时:
当他们输入正确的密码时:
请发布您的代码片段,以便它可以在任何时候修改和编辑,而不是为您的问题编写专栏和小部件。感谢您的帮助,我将在我的项目中对其进行更多测试并制作