美文网首页
从零开始用flutter写一个完整应用(12):动画1--淡入淡

从零开始用flutter写一个完整应用(12):动画1--淡入淡

作者: 逃离_102 | 来源:发表于2022-07-05 14:08 被阅读0次

说明

动画对功能的实现用处并不大,但是对用户体验却是很多时候必不可少的。前端应用动画也是个绕不开得话题,flutter也给我们提供了多种动画实现的方式,下面就具体讨论3种常见的动画:1,淡入淡出效果AnimatedOpacity;2,隐式动画 AnimatedContainer渐变效果;3,物理模拟动画效果。这3种动画基本就可以覆盖大部场景了,这片文章先讲第一种:淡入淡出效果AnimatedOpacity。在实现 UI 设计时,我们经常需要在屏幕上显示或隐藏各种元素。如若这个过程只是让某个元素快速地出现或者消失,用户们肯定不买帐。我们一般会使用不透明动画让元素淡入淡出,以创建出更加流畅的用户体验。这个时候AnimatedOpacity就出场了,下面就开始说说它的使用。

AnimatedOpacity

AnimatedOpacity 小部件需要传入三个参数:
opacity:它的取值范围从 0.0(不可见)到 1.0(完全可见)。
duration:代表这个动画需要持续多长时间。
child:需要进行动画的小部件。在这个例子中就是那个绿色的方框。

AnimatedOpacity(
  opacity: _visible ? 1.0 : 0.0,
  duration: const Duration(milliseconds: 500),
  child: Container(
    width: 200.0,
    height: 200.0,
    color: Colors.green,
  ),
)

完整示例

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    const appTitle = 'Opacity Demo';
    return const MaterialApp(
      title: appTitle,
      home: MyHomePage(title: appTitle),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({
    super.key,
    required this.title,
  });

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _visible = true;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: AnimatedOpacity(
          opacity: _visible ? 1.0 : 0.0,
          duration: const Duration(milliseconds: 500),
          child: Container(
            width: 200.0,
            height: 200.0,
            color: Colors.green,
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () { 
          setState(() {
            _visible = !_visible;
          });
        },
        tooltip: 'Toggle Opacity',
        child: const Icon(Icons.flip),
      ),
    );
  }
}

淡入淡出就说到这,比较简单,就不过多说了,如有遗漏欢迎留言,如有错误欢迎指正,谢谢

相关文章

网友评论

      本文标题:从零开始用flutter写一个完整应用(12):动画1--淡入淡

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