Flutter动画效果插件cat_flow的使用

Flutter动画效果插件CatFlow的使用

CatFlow

Flutter 超轻量级状态管理工具。

语言

English
中文

特性

  • 轻量级
  • 非侵入式状态管理
  • 简单易用

开始使用

安装

pubspec.yaml 文件中添加依赖:

dependencies:
  cat_flow: ^版本号

然后运行 flutter pub get 来安装。

导入

在 Dart 文件中导入 CatFlow:

import 'package:cat_flow/cat.dart';

使用示例

以下是一个完整的示例,展示如何使用 CatFlow 来实现状态管理和视图更新。

示例代码

import 'package:flutter/material.dart';
import 'package:cat_flow/cat.dart';

// 创建一个控制器类
class MyController extends CatController {
  // 使用 CatRx 包裹状态数据
  CatRx<int> count = CatRx<int>(0);

  // 修改状态的方法
  void changeCount() {
    count.value++; // 更新状态值
    count.update(); // 手动通知视图更新
  }
}

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'CatFlow 示例',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: TestPage(),
    );
  }
}

class TestPage extends StatefulWidget {
  [@override](/user/override)
  _TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  // 初始化控制器
  final MyController controller = MyController();

  [@override](/user/override)
  void initState() {
    super.initState();
    // 在页面初始化时调用控制器的 onInit 方法
    controller.onInit();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('CatFlow 示例'),
      ),
      body: Center(
        child: CatView.render(
          controller.count, // 绑定状态
          (context) => Text(
            controller.count.value.toString(), // 显示状态值
            style: TextStyle(fontSize: 48),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 调用控制器方法修改状态
          controller.changeCount();
        },
        tooltip: '增加计数',
        child: Icon(Icons.add),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    // 页面销毁时调用控制器的 onClose 方法
    controller.onClose();
    super.dispose();
  }
}

文档

CatRx

初始化数据

CatRx<int> count = CatRx<int>(0); // 初始化整型状态
CatRx<bool> isLoading = CatRx<bool>(false); // 初始化布尔型状态

更新数据并触发视图更新

count.value += 1; // 直接更新值

如果数据是对象类型,在修改后需要手动调用 update()

foo.value.name = "bar"; // 修改对象属性
foo.update(); // 手动通知视图更新

CatHook

useEffect

监听数据变化并响应数据更新:

CatHook.useEffect(() {
  print("count 改变");
  return Text(
    controller.count.value.toString(),
    style: TextStyle(fontSize: 80),
  );
}, [controller.count, controller.people]);

CatController

基本用法

class MyController extends CatController {
  CatRx<int> count = CatRx<int>(0);

  [@override](/user/override)
  void onClose() {
    super.onClose();
    print("关闭控制器");
  }

  [@override](/user/override)
  void onInit() {
    super.onInit();
    print("初始化控制器");
  }
}

在页面生命周期中调用

class TemplatePageState extends State<TemplatePage> {
  MyController controller = MyController();

  [@override](/user/override)
  void initState() {
    super.initState();
    controller.onInit(); // 页面初始化时调用
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("示例页面")),
    );
  }

  [@override](/user/override)
  void dispose() {
    controller.onClose(); // 页面销毁时调用
    super.dispose();
  }
}
1 回复

更多关于Flutter动画效果插件cat_flow的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


cat_flow 是一个用于 Flutter 的动画效果插件,它可以帮助开发者轻松实现各种复杂的动画效果。以下是如何使用 cat_flow 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 cat_flow 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  cat_flow: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 cat_flow 包:

import 'package:cat_flow/cat_flow.dart';

3. 使用 CatFlow 组件

CatFlowcat_flow 插件中的核心组件,你可以通过它来控制动画的流动效果。

基本用法

class MyAnimatedWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CatFlow(
      duration: Duration(seconds: 2),
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
      ),
      flow: FlowType.fadeIn, // 选择动画类型
    );
  }
}

支持的动画类型

cat_flow 支持多种动画类型,你可以通过 FlowType 来指定:

  • FlowType.fadeIn: 淡入效果
  • FlowType.fadeOut: 淡出效果
  • FlowType.slideInLeft: 从左侧滑入
  • FlowType.slideInRight: 从右侧滑入
  • FlowType.slideInTop: 从顶部滑入
  • FlowType.slideInBottom: 从底部滑入
  • FlowType.scaleIn: 缩放进入
  • FlowType.scaleOut: 缩放退出

自定义动画

你还可以通过 CatFlowController 来自定义动画效果:

class MyAnimatedWidget extends StatefulWidget {
  @override
  _MyAnimatedWidgetState createState() => _MyAnimatedWidgetState();
}

class _MyAnimatedWidgetState extends State<MyAnimatedWidget> {
  CatFlowController _controller;

  @override
  void initState() {
    super.initState();
    _controller = CatFlowController();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        CatFlow(
          controller: _controller,
          duration: Duration(seconds: 2),
          child: Container(
            width: 100,
            height: 100,
            color: Colors.blue,
          ),
          flow: FlowType.fadeIn,
        ),
        ElevatedButton(
          onPressed: () {
            _controller.start(); // 启动动画
          },
          child: Text('Start Animation'),
        ),
      ],
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}

4. 控制动画

你可以通过 CatFlowController 来控制动画的开始、停止、暂停和恢复:

  • _controller.start(): 启动动画
  • _controller.stop(): 停止动画
  • _controller.pause(): 暂停动画
  • _controller.resume(): 恢复动画

5. 动画回调

cat_flow 还提供了动画状态的回调,你可以监听动画的开始、结束和重复:

CatFlow(
  duration: Duration(seconds: 2),
  child: Container(
    width: 100,
    height: 100,
    color: Colors.blue,
  ),
  flow: FlowType.fadeIn,
  onStart: () {
    print('Animation started');
  },
  onEnd: () {
    print('Animation ended');
  },
  onRepeat: () {
    print('Animation repeated');
  },
);

6. 其他配置

你还可以通过 delay 参数来设置动画的延迟时间,或者通过 curve 参数来设置动画的曲线:

CatFlow(
  duration: Duration(seconds: 2),
  delay: Duration(seconds: 1), // 延迟1秒开始
  curve: Curves.easeInOut, // 使用缓动曲线
  child: Container(
    width: 100,
    height: 100,
    color: Colors.blue,
  ),
  flow: FlowType.fadeIn,
);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!