返回

Flutter动画中的一个容易忽视的点:没有key的盒子换颜色时会消失

前端

问题

在Flutter开发中,如果您想在动画中交换两个盒子的颜色,并且这两个盒子没有key,那么您会惊讶地发现,只有颜色互换了,而数字没有动。

原因

在Flutter中,如果没有key,那么Flutter无法追踪组件的更新,因为Flutter需要依靠key来唯一地标识组件。因此,当您在动画中交换两个盒子的颜色时,Flutter会将它们视为两个不同的组件,并且不会执行动画。

解决方案

为了解决这个问题,您需要给这两个盒子添加key。key可以是任何唯一的值,例如数字或字符串。如果您给这两个盒子添加了key,那么Flutter就可以追踪它们的更新,并且会执行动画。

代码示例

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              AnimatedContainer(
                key: UniqueKey(),
                duration: Duration(seconds: 1),
                curve: Curves.easeIn,
                color: Colors.green,
                width: 100,
                height: 100,
                child: Center(
                  child: Text(
                    '1',
                    style: TextStyle(
                      fontSize: 30,
                      color: Colors.white,
                    ),
                  ),
                ),
              ),
              AnimatedContainer(
                key: UniqueKey(),
                duration: Duration(seconds: 1),
                curve: Curves.easeIn,
                color: Colors.orange,
                width: 100,
                height: 100,
                child: Center(
                  child: Text(
                    '2',
                    style: TextStyle(
                      fontSize: 30,
                      color: Colors.white,
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

总结

在Flutter开发中,如果您想在动画中交换两个盒子的颜色,那么您需要给这两个盒子添加key。这样,Flutter就可以追踪它们的更新,并且会执行动画。