如何将 AnimatinonContainer 返回到之前的状态?

问题描述

如何让AnimatedContainer在键盘关闭时返回到之前的状态(1)?目前通过 onTap 改变容器的位置

Widget _formAuth(String labelForm,String labelButton,void func()) {
    return AnimatedContainer(
      duration: Duration(seconds: 1),curve: Curves.ease,margin: EdgeInsets.fromLTRB(13,_marginFormAuth,13,50),Widget _inputLoginOrPassword(
      Icon icon,String hint,TextEditingController controller,bool obscure) {
    return Container(
      margin: EdgeInsets.fromLTRB(10,35,10,0),child: TextField(
        onTap: () {
          setState(() {
            _marginFormAuth = 20;
          });
        },

enter image description here

解决方法

您可以在 state 类中定义一个布尔变量,并在 build 方法中为其赋值,如下所示:

bool isKeyboardOpened;

build () {
isKeyboardOpened = MediaQuery.of(context).viewInsets.bottom > 0;
_marginFormAuth = isKeyboardOpened ? 20 : whateverYouHadBefore;
...
}

这种在您打开键盘时移动容器的解决方案并不是最好的方法,但是,您应该修改代码背后的整个概念,并使用在您聚焦字段时自然滚动的可滚动项 :)

,

检测键盘状态使用:https://github.com/adee42/flutter_keyboard_visibility

import 'package:keyboard_visibility/keyboard_visibility.dart';

@protected
void initState() {
  super.initState();

  KeyboardVisibilityNotification().addNewListener(
    onChange: (bool visible) {
      print(visible);
    },);
}

要为容器设置动画,请使用 AnimationController 而不是 AnimatedContainer:https://flutter.dev/docs/development/ui/animations/tutorial

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...