美文网首页
5.AnimatedList

5.AnimatedList

作者: ankouyang | 来源:发表于2022-09-27 09:52 被阅读0次

    AnimatedList 和 ListView 的功能大体相似,不同的是, AnimatedList 可以在列表中插入或删除节点时执行一个动画,在需要添加或删除列表项的场景中会提高用户体验。
    AnimatedList 是一个 StatefulWidget,它对应的 State 类型为 AnimatedListState,添加和删除元素的方法位于 AnimatedListState 中:

    void insertItem(int index, { Duration duration = _kDuration });
    
    void removeItem(int index, AnimatedListRemovedItemBuilder builder, { Duration duration = _kDuration }) ;
    

    下面我们具体实现这样一个列表,点击底部 + 按钮时向列表追加一个列表项;点击每个列表项后面的删除按钮时,删除该列表项,添加和删除时分别执行指定的动画:这里添加和删除的动画的关键还是的使用全局的GlobalKey。

    import 'package:flutter/material.dart';
    import 'package:flutter_os_china/constants/constants.dart';
    class AnimatedListWidgetData extends StatefulWidget {
     const AnimatedListWidgetData({Key? key}) : super(key: key);
    
     @override
     State<AnimatedListWidgetData> createState() => _AnimatedListWidgetDataState();
    }
    
    class _AnimatedListWidgetDataState extends State<AnimatedListWidgetData> {
    
     //先定义一个List
     List<String> data = <String>[];
     int counter = 5;
    
     final  globalListKey = GlobalKey<AnimatedListState>();
     
     @override
     void initState() {
       // TODO: implement initState
       
       for(var i=0;i<counter;i++){
         data.add('${i+1}');
       }
       
       super.initState();
     }
    
     @override
     Widget build(BuildContext context) {
       return Scaffold(
            appBar: AppBar(
              title: const Text('AnimatedList'),
            ),
            body: AnimatedList(
              key:globalListKey ,
              initialItemCount: data.length,
              itemBuilder: (
                  BuildContext context,
                  int index,
                  Animation<double> animation
                  ) {
                     // 添加列表项时会执行渐显动画
                     return  FadeTransition(
                       opacity: animation,
                       child: ListTile(title: Text('${index+1}'),trailing: const Icon(Icons.delete)),
                     );
                  },
             ),
             floatingActionButton: FloatingActionButton(
               backgroundColor: AppColor.primaryColor,
               child: const Icon(Icons.add,color: Colors.white),
               onPressed: () {
                 // 添加一个列表项
                 data.add('${++counter}');
                 // 告诉列表项有新添加的列表项
                 globalListKey.currentState!.insertItem(data.length - 1);
                 // print(globalListKey.currentState!.insertItem());
    
               },
             ),
       );
     }
    }
    

    关注点1


    追加列表项关注点1

    关注点2


    追加列表项关注点2

    删除节点并添加动画


    删除节点并添加动画

    相关文章

      网友评论

          本文标题:5.AnimatedList

          本文链接:https://www.haomeiwen.com/subject/stubortx.html