【问题标题】:Animation not firing at the start of the page in flutter动画在颤动中没有在页面的开头触发
【发布时间】:2022-01-25 12:16:04
【问题描述】:

我想展示一个动画,我的容器每次都在页面开始时增加其宽度和高度。 这里直接取initstate的值,不显示任何动画。

Padding(
              padding: const EdgeInsets.all(8.0),
              child: AnimatedContainer(
                duration: Duration(seconds: 2),
                curve: Curves.easeInOut,
                decoration: BoxDecoration(
                    image:DecorationImage(
                      fit: BoxFit.cover,
                      colorFilter: ColorFilter.mode(Colors.black54, BlendMode.darken),
                      image: AssetImage("lib/images/read.jpg"),
                    ),
                    borderRadius: BorderRadius.circular(10),
                    gradient: LinearGradient(
                        colors: <Color>[
                          Colors.yellowAccent,
                          Colors.blueAccent,
                        ]
                    )
                ),
                width: width,
                height: height,
                child: FlatButton(
                  onPressed: (){
                    Navigator.push(context, MaterialPageRoute(builder: (context)=>Quote_Categories())
                    );
                  },
                  child: Text(
                    'Reader',
                    style: TextStyle(
                      fontSize: 35,
                      fontWeight: FontWeight.bold,
                      color: Colors.white,
                    ),
                  ),
                ),
              ),
            ),
height=400;
width=250;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    registernotification();
    width=200;
    height=200;
  }

【问题讨论】:

    标签: flutter dart flutter-layout flutter-animation


    【解决方案1】:

    initState: 当此对象插入树时调用。

    所以基本上你在读取值之前拥有width:200height = 200,因为它们在initState 内部。您可以简单地使用Duration.zero 创建一个Future method,然后使用setState 来更新用户界面。

      @override
      void initState() {
        super.initState();
        changeContainerSize();
      }
    
      changeContainerSize() {
        Future.delayed(Duration.zero).then((value) {
          setState(() {
            width = 200;
            height = 200;
          });
        });
      }
    

    或使用addPostFrameCallback

      @override
      void initState() {
        super.initState();
        WidgetsBinding.instance!.addPostFrameCallback((timeStamp) {
          setState(() {
            width = 200;
            height = 200;
          });
        });
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2021-10-31
      • 2019-01-15
      • 2019-09-28
      相关资源
      最近更新 更多