Flutter Hero小部件没有';t第一次发射(颤振)
动画在第一次启动时不起作用(GestureDetector中的onTap),但如果我后退,它在下一次启动时起作用。我不知道为什么。 这是我的密码:Flutter Hero小部件没有';t第一次发射(颤振),flutter,animation,Flutter,Animation,动画在第一次启动时不起作用(GestureDetector中的onTap),但如果我后退,它在下一次启动时起作用。我不知道为什么。 这是我的密码: 在main.dart中: 启动屏幕和登录屏幕位于“屏幕”文件夹下 在屏幕/飞溅屏幕中。省道: 当我第一次单击图像时,它会进入LoginScreen,ok,但没有动画 和在屏幕/登录屏幕中: 导入“包装:颤振/材料.省道”; 常量用户=常量{ 'a@a.a“:“aaa”, 'hunter@gmail.com':'猎人', }; 类Login
- 在main.dart中:
- 在屏幕/飞溅屏幕中。省道:
- 和在屏幕/登录屏幕中:
导入“包装:颤振/材料.省道”;
常量用户=常量{
'a@a.a“:“aaa”,
'hunter@gmail.com':'猎人',
};
类LoginScreen扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
最终用户名控制器=TextEditingController();
最终密码控制器=TextEditingController();
最终标志=英雄(
标签:“homeLogo”,
孩子:圆环星(
背景颜色:颜色。透明,
半径:40.0,
子项:Image.asset('assets/logo.png'),
));
最终txtUserName=TextField(
控制器:userNameController,
装饰:输入装饰(
hintText:'用户名',
内容填充:来自LTRB(20.0,10.0,20.0,10.0)的EdgeInsets,
边框:大纲输入边框(边框半径:边框半径.圆形(30.0))
),
);
最终txtPassword=TextField(
控制器:密码控制器,
蒙昧文字:对,
装饰:输入装饰(
hintText:'密码',
内容填充:来自LTRB(20.0,10.0,20.0,10.0)的EdgeInsets,
边框:大纲输入边框(边框半径:边框半径.圆形(30.0))
),
);
最终btnLogin=升起按钮(
颜色:颜色。深紫色,
textColor:Colors.white,
形状:RoundedRectangleBorder(borderRadius:borderRadius.all(Radius.circular(10.0)),
已按下:(){
if(userNameController!=null&&userNameController.text==“abc”
&&passwordController!=null&&passwordController.text==“123”){
//Navigator.of(context.pushReplacement)(newRoute)
}
},
子项:文本('Login',样式:TextStyle(fontSize:20.0),),
);
最终btnForgetPassword=FlatButton(
按下:(){},
子项:文本('忘记密码',样式:文本样式(颜色:Colors.blue),),
);
返回脚手架(
正文:中(
子:容器(
宽度:400,
身高:400,
子:ListView(
填充:仅限边设置(左:25.0,右:25.0),
儿童:[
标志
尺寸箱(高度:20.0),
txtUserName,
尺寸箱(高度:20.0),
TXT密码,
尺寸箱(高度:20.0),
贝特洛金,
BTN目标密码
],
),
),
),
);
}
}
如果我返回或/或再次单击上一屏幕上的图像,英雄动画将正常工作
import 'package:fairlove/screen/splash_screen.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SplashScreen(),
);
}
}
import 'package:flutter/material.dart';
import 'login_screen.dart';
class SplashScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Hero(
tag: 'homeLogo',
child: GestureDetector(
onTap: () => Navigator.push(context, MaterialPageRoute(builder: (context) => LoginScreen(),)),
child: Image.asset('assets/logo.png')
),
),
);
}
}
import 'package:flutter/material.dart';
const users = const {
'a@a.a': 'aaa',
'hunter@gmail.com': 'hunter',
};
class LoginScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final userNameController = TextEditingController();
final passwordController = TextEditingController();
final logo = Hero(
tag: 'homeLogo',
child: CircleAvatar(
backgroundColor: Colors.transparent,
radius: 40.0,
child: Image.asset('assets/logo.png'),
));
final txtUserName = TextField(
controller: userNameController,
decoration: InputDecoration(
hintText: 'Username',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(30.0))
),
);
final txtPassword = TextField(
controller: passwordController,
obscureText: true,
decoration: InputDecoration(
hintText: 'Password',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(30.0))
),
);
final btnLogin = RaisedButton(
color: Colors.deepPurpleAccent,
textColor: Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(10.0))),
onPressed: () {
if(userNameController != null && userNameController.text == "abc"
&& passwordController!= null && passwordController.text == "123") {
//Navigator.of(context).pushReplacement(newRoute)
}
},
child: Text('Login', style: TextStyle(fontSize: 20.0),),
);
final btnForgetPassword = FlatButton(
onPressed: () { },
child: Text('Forget Password', style: TextStyle(color: Colors.blue),),
);
return Scaffold(
body: Center(
child: Container(
width: 400,
height: 400,
child: ListView(
padding: EdgeInsets.only(left: 25.0, right: 25.0),
children: <Widget>[
logo,
SizedBox(height: 20.0),
txtUserName,
SizedBox(height: 20.0),
txtPassword,
SizedBox(height: 20.0),
btnLogin,
btnForgetPassword
],
),
),
),
);
}
}