flutter:animate_do(flutter中的Animate.css)

简介

做过web开发的应该大部分人都知道Animate.css,它为开发者提供了一系列预定义的动画效果,可以通过简单的CSS类来实现各种动画效果。而animate_do 相当于flutter中的Animate.css,它提供了很多定义好的动画效果

基本使用

官方地址
https://pub-web.flutter-io.cn/packages/animate_do

安装

flutter pub add animate_do

示例一

class SwitcherContainerState extends State<SwitcherContainer> {
  
  Widget build(BuildContext context) {
    return Center(
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          FadeInLeft(child: const Square(label: '1')),
          FadeInUp(child: const Square(label: '2') ),
          FadeInDown(child: const Square(label: '3') ),
          FadeInRight(child: const Square(label: '4') ),
        ],
      ),
    );
  }
}

class Square extends StatelessWidget {
  final String label;
  const Square({Key? key,required this.label}) : super(key: key);
  
  Widget build(BuildContext context) {
    return Container(
      width: 50,
      height: 50,
      color: Colors.blueAccent,
      child: Text(label,style: const TextStyle(color: Colors.white),),
    );
  }
}

在这里插入图片描述
示例2

class SwitcherContainerState extends State<SwitcherContainer> {
  bool isVisible = true;
  
  Widget build(BuildContext context) {
    return Center(
        child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Visibility(
          visible: isVisible,
          replacement: FadeOut(
            duration: const Duration(seconds: 1),
            child: Container(
              width: 100,
              height: 100,
              color: Colors.blue,
            ),
          ),
          child: FadeIn(
            duration: const Duration(seconds: 1),
            child: Container(
              width: 100,
              height: 100,
              color: Colors.blue,
            ),
          ),
        ),
        const SizedBox(
          height: 100,
        ),
        ElevatedButton(
            onPressed: () {
              setState(() {
                isVisible = true;
              });
            },
            child: const Text("淡入")),
        ElevatedButton(
            onPressed: () {
              setState(() {
                isVisible = false;
              });
            },
            child: const Text("淡出"))
      ],
    ));
  }
}

在这里插入图片描述
示例3

class SwitcherContainerState extends State<SwitcherContainer> {
  List<String> items = [
    'item 1',
    'item 2',
    'item 3',
    'item 4',
    'item 5',
    'item 6',
    'item 7',
    'item 8',
    'item 9',
    'item 10'
  ];
  
  Widget build(BuildContext context) {
    return ListView.builder(
        itemCount: items.length,
        itemBuilder: (BuildContext context, int index) {
          return FadeInRight(
              delay: Duration(milliseconds: 200 * index),
              child: SlideInUp(
                delay: Duration(milliseconds: 200 * index),
                child: ListTile(
                  title: Text(items[index]),
                ),
              ));
        });
  }
}

在这里插入图片描述
示例4

class SwitcherContainerState extends State<SwitcherContainer> {

  
  Widget build(BuildContext context) {
    return GridView.builder(
        gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 2,
        ),
        itemCount: 4,
        itemBuilder: (BuildContext context, int index) {
          return FadeInRight(
              delay: const Duration(seconds: 1),
              child: ZoomIn(
                delay: const Duration(seconds: 1),
                child: Container(
                  width: 120,
                  height: 100,
                  margin: const EdgeInsets.all(8),
                  color: Colors.blue,
                  child: Center(
                    child: Text("item $index",style: const TextStyle(color: Colors.white),),
                  ),
                ),
              ));
        });
  }
}

在这里插入图片描述
示例5

上面的几个例子动画都是自动触发,如果需要手动触发可以如下

Column(
  children: [
    ElevatedButton(
        onPressed: () {
          animationController.forward();
        },
        child: const Text("开始")),
    Expanded(
        child: ZoomIn(
      manualTrigger: true,
      controller: (controller) => animationController = controller,
      delay: const Duration(seconds: 1),
      child: Container(
        width: 120,
        height: 100,
        margin: const EdgeInsets.all(8),
        color: Colors.blue,
        child: const Center(
          child: Text(
            "item",
            style: TextStyle(color: Colors.white),
          ),
        ),
      ),
    ))
  ],
)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flutter,您可以使用`charts_flutter`库来创建各种类型的图表。以下是一个简单的示例,演示如何在Flutter设置一个简单的图表: ```dart import 'package:flutter/material.dart'; import 'package:charts_flutter/flutter.dart' as charts; class MyChart extends StatelessWidget { final List<charts.Series> seriesList; final bool animate; MyChart(this.seriesList, {this.animate}); factory MyChart.withSampleData() { return MyChart( _createSampleData(), animate: true, ); } @override Widget build(BuildContext context) { return charts.BarChart( seriesList, animate: animate, ); } static List<charts.Series<OrdinalSales, String>> _createSampleData() { final data = [ OrdinalSales('2014', 5), OrdinalSales('2015', 25), OrdinalSales('2016', 100), OrdinalSales('2017', 75), ]; return [ charts.Series<OrdinalSales, String>( id: 'Sales', domainFn: (OrdinalSales sales, _) => sales.year, measureFn: (OrdinalSales sales, _) => sales.sales, data: data, ) ]; } } class OrdinalSales { final String year; final int sales; OrdinalSales(this.year, this.sales); } ``` 在上面的代码,我们首先定义了一个名为`MyChart`的小部件,它接受一个`seriesList`参数和一个`animate`参数。`seriesList`参数是一个包含图表数据的`List<charts.Series>`,`animate`参数是一个布尔值,指示是否启用动画效果。 然后,我们创建了一个`MyChart.withSampleData`构造函数,它返回一个包含示例数据的`MyChart`实例。 在`build`方法,我们创建了一个`BarChart`小部件,并将`seriesList`作为数据源传递给它。我们还将`animate`参数传递给`BarChart`,以指示是否启用动画效果。 最后,我们定义了一个名为`OrdinalSales`的简单类,用于表示一年的销售额。 上述代码使用的是柱状图(`BarChart`),如果您需要使用其他类型的图表,可以查看`charts_flutter`库的文档以获取更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值