Flutter Hero小部件没有';t第一次发射(颤振)

Flutter Hero小部件没有';t第一次发射(颤振),flutter,animation,Flutter,Animation,动画在第一次启动时不起作用(GestureDetector中的onTap),但如果我后退,它在下一次启动时起作用。我不知道为什么。 这是我的密码: 在main.dart中: 启动屏幕和登录屏幕位于“屏幕”文件夹下 在屏幕/飞溅屏幕中。省道: 当我第一次单击图像时,它会进入LoginScreen,ok,但没有动画 和在屏幕/登录屏幕中: 导入“包装:颤振/材料.省道”; 常量用户=常量{ 'a@a.a“:“aaa”, 'hunter@gmail.com':'猎人', }; 类Login

动画在第一次启动时不起作用(GestureDetector中的onTap),但如果我后退,它在下一次启动时起作用。我不知道为什么。 这是我的密码:

  • 在main.dart中:
启动屏幕和登录屏幕位于“屏幕”文件夹下

  • 在屏幕/飞溅屏幕中。省道:
当我第一次单击图像时,它会进入LoginScreen,ok,但没有动画

  • 和在屏幕/登录屏幕中:
导入“包装:颤振/材料.省道”;
常量用户=常量{
'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
            ],
          ),
        ),
      ),
    );
  }

}