Flutter动画效果插件flutter_ume_animenzzz的使用

Flutter动画效果插件flutter_ume_animenzzz的使用

UME是一个用于Flutter应用的内置调试工具包平台。

快速开始

所有以flutter_ume_kit_开头的包都是UME的功能插件,用户可以根据需求访问它们。

  1. 编辑pubspec.yaml文件并添加依赖项。

    从版本1.0.0开始,flutter_ume开始适配Flutter 3。

    dev_dependencies:
      flutter_ume: ^1.0.1
      flutter_ume_kit_ui: ^1.0.0
      flutter_ume_kit_device: ^1.0.0
      flutter_ume_kit_perf: ^1.0.0
      flutter_ume_kit_show_code: ^1.0.0
      flutter_ume_kit_console: ^1.0.0
      flutter_ume_kit_dio: ^1.0.0
    

    ↓ 零安全版本,兼容Flutter 2.x

    dev_dependencies: # 不要在发布模式下使用UME
      flutter_ume: ^0.3.0+1
      flutter_ume_kit_ui: ^0.3.0+1
      flutter_ume_kit_device: ^0.3.0
      flutter_ume_kit_perf: ^0.3.0
      flutter_ume_kit_show_code: ^0.3.0
      flutter_ume_kit_console: ^0.3.0
      flutter_ume_kit_dio: ^0.3.0
    

    ↓ 非零安全版本,兼容Flutter 1.x

    dev_dependencies: # 不要在发布模式下使用UME
      flutter_ume: ^0.1.1
      flutter_ume_kit_ui: ^0.1.1
      flutter_ume_kit_device: ^0.1.1
      flutter_ume_kit_perf: ^0.1.1
      flutter_ume_kit_show_code: ^0.1.1
      flutter_ume_kit_console: ^0.1.1 
    
  2. 运行flutter pub get

  3. 导入包:

    import 'package:flutter_ume_animenzzz/flutter_ume.dart'; // UME框架
    import 'package:flutter_ume_kit_ui/flutter_ume_kit_ui.dart'; // UI套件
    import 'package:flutter_ume_kit_perf/flutter_ume_kit_perf.dart'; // 性能套件
    import 'package:flutter_ume_kit_show_code/flutter_ume_kit_show_code.dart'; // 显示代码
    import 'package:flutter_ume_kit_device/flutter_ume_kit_device.dart'; // 设备信息
    import 'package:flutter_ume_kit_console/flutter_ume_kit_console.dart'; // 显示调试打印
    import 'package:flutter_ume_kit_dio/flutter_ume_kit_dio.dart'; // Dio检查器
    
  4. 编辑主方法,注册插件套件并初始化UME:

    void main() {
      if (kDebugMode) {
        PluginManager.instance                                 // 注册插件套件
          ..register(WidgetInfoInspector())
          ..register(WidgetDetailInspector())
          ..register(ColorSucker())
          ..register(AlignRuler())
          ..register(ColorPicker())                            // 新功能
          ..register(TouchIndicator())                         // 新功能
          ..register(Performance())
          ..register(ShowCode())
          ..register(MemoryInfoPage())
          ..register(CpuInfoPage())
          ..register(DeviceInfoPanel())
          ..register(Console())
          ..register(DioInspector(dio: dio));                  // 传入你的Dio实例
        // 在flutter_ume 0.3.0之后
        runApp(UMEWidget(child: MyApp(), enable: true));
        // 在flutter_ume 0.3.0之前
        runApp(injectUMEWidget(child: MyApp(), enable: true));
      } else {
        runApp(MyApp());
      }
    }
    
  5. 使用flutter run运行,或者使用flutter build apk --debugflutter build ios --debug构建生产环境。

重要事项

从版本0.1.1/0.2.1开始,我们不再需要设置useRootNavigator: false

功能特性

当前开源版本的UME包含13个插件套件。

开发UME插件套件

UME插件位于./kits目录中,每个插件都是一个package。你可以参考./custom_plugin_example中的示例。

  1. 运行flutter create -t package custom_plugin创建自定义插件套件,它可以是packageplugin

  2. 编辑自定义插件套件的pubspec.yaml文件以添加UME框架依赖:

    dependencies:
      flutter_ume: '>=0.3.0 <0.4.0'
    
  3. 创建插件套件类,并实现Pluggable接口:

    import 'package:flutter_ume_animenzzz/flutter_ume.dart';
    
    class CustomPlugin implements Pluggable {
      CustomPlugin({Key key});
    
      [@override](/user/override)
      Widget buildWidget(BuildContext context) => Container(
        color: Colors.white,
        width: 100,
        height: 100,
        child: Center(
          child: Text('Custom Plugin')
        ),
      ); // 插件套件面板
    
      [@override](/user/override)
      String get name => 'CustomPlugin'; // 插件套件名称
    
      [@override](/user/override)
      String get displayName => 'CustomPlugin';
    
      [@override](/user/override)
      void onTrigger() {} // 点击插件套件图标时调用
    
      [@override](/user/override)
      ImageProvider<Object> get iconImageProvider => NetworkImage('url'); // 插件套件图标
    }
    
  4. 在项目中使用自定义插件套件:

    1. 编辑宿主应用项目的pubspec.yaml文件以添加custom_plugin依赖:

      dev_dependencies:
        custom_plugin:
          path: path/to/custom_plugin
      
    2. 运行flutter pub get

    3. 导入包:

      import 'package:custom_plugin/custom_plugin.dart';
      
    4. 编辑主方法,注册自定义插件套件:

      if (kDebugMode) {
        PluginManager.instance
          ..register(CustomPlugin());
        runApp(
          UMEWidget(
            child: MyApp(), 
            enable: true
          )
        );
      } else {
        runApp(MyApp());
      }
      
  5. 运行你的应用。

示例代码

import 'package:dio/dio.dart';
import 'package:example/custom_router_pluggable.dart';
import 'package:example/detail_page.dart';
import 'package:example/home_page.dart';
import 'package:example/ume_switch.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ume_animenzzz/flutter_ume.dart';
import 'package:flutter_ume_kit_ui/flutter_ume_kit_ui.dart';
import 'package:flutter_ume_kit_perf/flutter_ume_kit_perf.dart';
import 'package:flutter_ume_kit_show_code/flutter_ume_kit_show_code.dart';
import 'package:flutter_ume_kit_device/flutter_ume_kit_device.dart';
import 'package:flutter_ume_kit_console/flutter_ume_kit_console.dart';
import 'package:provider/provider.dart';
import 'package:flutter_ume_kit_dio/flutter_ume_kit_dio.dart';
import 'package:flutter_ume_kit_channel_monitor/flutter_ume_kit_channel_monitor.dart';

final Dio dio = Dio()..options = BaseOptions(connectTimeout: 10000);

final navigatorKey = GlobalKey<NavigatorState>();

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

class UMEApp extends StatefulWidget {
  const UMEApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<UMEApp> createState() => _UMEAppState();
}

class _UMEAppState extends State<UMEApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      CustomRouterPluggable().navKey = navigatorKey;
    });
    if (kDebugMode) {
      PluginManager.instance
        ..register(WidgetInfoInspector())
        ..register(WidgetDetailInspector())
        ..register(ColorSucker())
        ..register(AlignRuler())
        ..register(ColorPicker())
        ..register(TouchIndicator())
        ..register(Performance())
        ..register(ShowCode())
        ..register(MemoryInfoPage())
        ..register(CpuInfoPage())
        ..register(DeviceInfoPanel())
        ..register(Console())
        ..register(DioInspector(dio: dio))
        ..register(CustomRouterPluggable())
        ..register(ChannelPlugin());
    }
  }

  Widget _buildApp(BuildContext context) {
    return MaterialApp(
      navigatorKey: navigatorKey,
      title: 'UME Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: HomePage(title: 'UME Demo Home Page'),
      onGenerateRoute: (settings) {
        switch (settings.name) {
          case 'detail':
            return MaterialPageRoute(builder: (_) => const DetailPage());
          default:
            return null;
        }
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    final Widget body = _buildApp(context);
    if (kDebugMode) {
      return MultiProvider(
        providers: [
          ChangeNotifierProvider(create: (_) => UMESwitch()),
        ],
        builder: (BuildContext context, _) => UMEWidget(
          enable: context.watch<UMESwitch>().enable,
          child: body,
        ),
      );
    }
    return body;
  }
}

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

1 回复

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


flutter_ume_animenzzz 是一个 Flutter 动画效果插件,它提供了多种预定义的动画效果,帮助开发者快速实现复杂的动画效果。以下是如何使用 flutter_ume_animenzzz 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_ume_animenzzz: ^0.1.0  # 请使用最新版本

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

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:flutter_ume_animenzzz/flutter_ume_animenzzz.dart';

3. 使用动画效果

flutter_ume_animenzzz 提供了多种动画效果,你可以直接在 Widget 中使用它们。以下是一些常见的使用示例:

3.1 基本动画

class MyAnimatedWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Animatezzz(
      duration: Duration(seconds: 2),
      effect: Effects.fadeIn,  // 使用淡入效果
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
      ),
    );
  }
}

3.2 组合动画

你可以将多个动画效果组合在一起使用:

class MyAnimatedWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Animatezzz(
      duration: Duration(seconds: 2),
      effects: [Effects.fadeIn, Effects.slideInRight],  // 组合淡入和从右侧滑入效果
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
      ),
    );
  }
}

3.3 自定义动画参数

你可以通过传递参数来自定义动画效果:

class MyAnimatedWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Animatezzz(
      duration: Duration(seconds: 2),
      effects: [
        Effects.fadeIn(delay: Duration(milliseconds: 500)),  // 延迟500毫秒开始淡入
        Effects.slideInRight(offset: 100.0),  // 从右侧滑入100像素
      ],
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
      ),
    );
  }
}

4. 支持的动画效果

flutter_ume_animenzzz 支持多种动画效果,包括但不限于:

  • Effects.fadeIn:淡入效果
  • Effects.fadeOut:淡出效果
  • Effects.slideInLeft:从左侧滑入
  • Effects.slideInRight:从右侧滑入
  • Effects.slideInTop:从顶部滑入
  • Effects.slideInBottom:从底部滑入
  • Effects.scaleIn:缩放进入
  • Effects.rotateIn:旋转进入

5. 完整示例

以下是一个完整的示例,展示如何使用 flutter_ume_animenzzz 插件:

import 'package:flutter/material.dart';
import 'package:flutter_ume_animenzzz/flutter_ume_animenzzz.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter UME Animenzzz Example'),
        ),
        body: Center(
          child: MyAnimatedWidget(),
        ),
      ),
    );
  }
}

class MyAnimatedWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Animatezzz(
      duration: Duration(seconds: 2),
      effects: [
        Effects.fadeIn(delay: Duration(milliseconds: 500)),
        Effects.slideInRight(offset: 100.0),
      ],
      child: Container(
        width: 100,
        height: 100,
        color: Colors.blue,
      ),
    );
  }
}
回到顶部