Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter emojies的颤振动画_Flutter_Flutter Animation - Fatal编程技术网

Flutter emojies的颤振动画

Flutter emojies的颤振动画,flutter,flutter-animation,Flutter,Flutter Animation,请观看小视频以便清楚地理解 我有一个Flitter应用程序,它以表情符号为图像,背景是一个圆形容器,我想让表情符号弹出一点动画,然后在再次点击时恢复正常 我有下面的代码,这是简单的设计没有关于动画的想法,所以我正在寻求帮助 Container( height: 90, child: ListView( scrollDirection: Axis.horizontal, children:

请观看小视频以便清楚地理解

我有一个Flitter应用程序,它以表情符号为图像,背景是一个圆形容器,我想让表情符号弹出一点动画,然后在再次点击时恢复正常

我有下面的代码,这是简单的设计没有关于动画的想法,所以我正在寻求帮助

 Container(
            height: 90,
            child: ListView(
              scrollDirection: Axis.horizontal,
              children: [
                Padding(
                  padding: const EdgeInsets.only(left: 10),
                  child: Column(
                    children: [
                      Container(
                        width: 60.0,
                        height: 60.0,
                        child: Center(
                            child: Container(
                                width: 40.0,
                                height: 40.0,
                                child: Image.asset('assets/love.png'))),
                        decoration:  BoxDecoration(
                            color: Color(0xFFF9EAD3),
                            shape: BoxShape.circle,
                           /* image: DecorationImage(
                              image: AssetImage('assets/emoji1.png',),
                            )*/
                        ),
                      //  child:
                      ),
                      SizedBox(height: 2,),
                      Text('Love',style: TextStyle(color: textcolor,fontSize: 14,fontFamily: medium),),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(left: 10),
                  child: Column(
                    children: [
                      Container(
                        width: 60.0,
                        height: 60.0,
                        child: Center(
                            child: Container(
                                width: 40.0,
                                height: 40.0,
                                child: Image.asset('assets/happy.png'))),
                        decoration:  BoxDecoration(
                          color: Color(0xFFF9EAD3),
                          shape: BoxShape.circle,
                          /* image: DecorationImage(
                              image: AssetImage('assets/emoji1.png',),
                            )*/
                        ),
                        //  child:
                      ),
                      SizedBox(height: 2,),
                      Text('Happy',style: TextStyle(color: textcolor,fontSize: 14,fontFamily: medium),),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(left: 10),
                  child: Column(
                    children: [
                      Container(
                        width: 60.0,
                        height: 60.0,
                        child: Center(
                            child: Container(
                                width: 40.0,
                                height: 40.0,
                                child: Image.asset('assets/sad.png'))),
                        decoration:  BoxDecoration(
                          color: Color(0xFFF9EAD3),
                          shape: BoxShape.circle,
                          /* image: DecorationImage(
                              image: AssetImage('assets/emoji1.png',),
                            )*/
                        ),
                        //  child:
                      ),
                      SizedBox(height: 2,),
                      Text('Sad',style: TextStyle(color: textcolor,fontSize: 14,fontFamily: medium),),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(left: 10),
                  child: Column(
                    children: [
                      Container(
                        width: 60.0,
                        height: 60.0,
                        child: Center(
                            child: Container(
                                width: 40.0,
                                height: 40.0,
                                child: Image.asset('assets/depressed.png'))),
                        decoration:  BoxDecoration(
                          color: Color(0xFFF9EAD3),
                          shape: BoxShape.circle,
                          /* image: DecorationImage(
                              image: AssetImage('assets/emoji1.png',),
                            )*/
                        ),
                        //  child:
                      ),
                      SizedBox(height: 2,),
                      Text('Depressed',style: TextStyle(color: textcolor,fontSize: 14,fontFamily: medium),),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(left: 10),
                  child: Column(
                    children: [
                      Container(
                        width: 60.0,
                        height: 60.0,
                        child: Center(
                            child: Container(
                                width: 40.0,
                                height: 40.0,
                                child: Image.asset('assets/worried.png'))),
                        decoration:  BoxDecoration(
                          color: Color(0xFFF9EAD3),
                          shape: BoxShape.circle,
                          /* image: DecorationImage(
                              image: AssetImage('assets/emoji1.png',),
                            )*/
                        ),
                        //  child:
                      ),
                      SizedBox(height: 2,),
                      Text('Worried',style: TextStyle(color: textcolor,fontSize: 14,fontFamily: medium),),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(left: 10),
                  child: Column(
                    children: [
                      Container(
                        width: 60.0,
                        height: 60.0,
                        child: Center(
                            child: Container(
                                width: 40.0,
                                height: 40.0,
                                child: Image.asset('assets/confused.png'))),
                        decoration:  BoxDecoration(
                          color: Color(0xFFF9EAD3),
                          shape: BoxShape.circle,
                          /* image: DecorationImage(
                              image: AssetImage('assets/emoji1.png',),
                            )*/
                        ),
                        //  child:
                      ),
                      SizedBox(height: 2,),
                      Text('Confused',style: TextStyle(color: textcolor,fontSize: 14,fontFamily: medium),),
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(left: 10),
                  child: Column(
                    children: [
                      Container(
                        width: 60.0,
                        height: 60.0,
                        child: Center(
                            child: Container(
                                width: 40.0,
                                height: 40.0,
                                child: Image.asset('assets/irritated.png'))),
                        decoration:  BoxDecoration(
                          color: Color(0xFFF9EAD3),
                          shape: BoxShape.circle,
                          /* image: DecorationImage(
                              image: AssetImage('assets/emoji1.png',),
                            )*/
                        ),
                        //  child:
                      ),
                      SizedBox(height: 2,),
                      Text('Irritated',style: TextStyle(color: textcolor,fontSize: 14,fontFamily: medium),),
                    ],
                  ),
                ),

              ],
            ),
          ),

你可以这样做

  GestureDetector(
      onTap:(){
        setState((){
          isTap=!isTap;
        });
      },
      child: Padding(
                  padding: const EdgeInsets.only(left: 10),
                  child: Column(
                    children: [
                      Container(
                        width: 60.0,
                        height: 60.0,
                        child: Center(
                            child: AnimatedContainer(
                              duration:Duration(milliseconds:100),
                                width:isTap? 40.0:20,
                                height:isTap? 40.0:20,
                                child: Image.network('assets/irritated.png'))),                              
                        decoration:  BoxDecoration(
                            color: Color(0xFFF9EAD3),
                            shape: BoxShape.circle,
                         ),
                      ),
                      SizedBox(height: 2,),
                      Text('Love',),
                    ],
                  ),
                ));
我们可以再提高一点。我们可以创建EmojiItem小部件,通过在主小部件中创建选定的索引变量来管理动画

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int? selectedIndex;
  List<String> imagePathList = ['assets/happy.png', 'assets/happy.png'];
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
        scrollDirection: Axis.horizontal,
        shrinkWrap: true,
        itemCount: 2,
        itemBuilder: (context, index) {
          return GestureDetector(
              onTap: () {
                setState(() {
                  selectedIndex = selectedIndex != index ? index : null;
                });
              },
              child: EmojiItem(
                isSelected: index == selectedIndex,
                imagePath: imagePathList[index],
              ));
        });
  }
}

class EmojiItem extends StatelessWidget {
  final bool isSelected;
  final String imagePath;
  EmojiItem({Key? key, required this.isSelected, required this.imagePath}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
        child: Padding(
      padding: const EdgeInsets.only(left: 10),
      child: Column(
        children: [
          Container(
            width: 60.0,
            height: 60.0,
            child: Center(
                child: AnimatedContainer(
                    duration: Duration(milliseconds: 100),
                    width: isSelected ? 40.0 : 20,
                    height: isSelected ? 40.0 : 20,
                    child: Image.asset(imagePath))),
            decoration: BoxDecoration(
              color: Color(0xFFF9EAD3),
              shape: BoxShape.circle,
            ),
          ),
          SizedBox(
            height: 2,
          ),
          Text(
            'Love',
            style: TextStyle(),
          ),
        ],
      ),
    ));
  }
}
类MyApp扩展StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
int?选择的索引;
List imagePathList=['assets/happy.png','assets/happy.png'];
@凌驾
小部件构建(构建上下文){
返回ListView.builder(
滚动方向:轴水平,
收缩膜:对,
物品计数:2,
itemBuilder:(上下文,索引){
返回手势检测器(
onTap:(){
设置状态(){
selectedIndex=selectedIndex!=索引?索引:空;
});
},
子项:EmojiItem(
isSelected:index==selectedIndex,
imagePath:imagePathList[索引],
));
});
}
}
类EmojiItem扩展了无状态小部件{
最终选举产生;
最终字符串图像路径;
EmojiItem({Key?Key,required this.isSelected,required this.imagePath}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回手势检测器(
孩子:填充(
填充:仅限常量边集(左:10),
子:列(
儿童:[
容器(
宽度:60.0,
身高:60.0,
儿童:中心(
子:动画容器(
持续时间:持续时间(毫秒:100),
宽度:40.0:20,
身高:40.0:20,
子项:Image.asset(imagePath)),
装饰:盒子装饰(
颜色:颜色(0xFFF9EAD3),
形状:BoxShape.circle,
),
),
大小盒子(
身高:2,
),
正文(
“爱”,
样式:TextStyle(),
),
],
),
));
}
}