Flutter动画渲染插件flarelane_flutter的使用

发布于 1周前 作者 ionicwang 来自 Flutter

Flutter动画渲染插件flarelane_flutter的使用

欢迎来到 FlareLane,这是一个用于在Flutter应用中实现推送通知和应用内消息的强大工具。本文将详细介绍如何使用flarelane_flutter插件。

安装

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

dependencies:
  flarelane_flutter: ^latest_version

然后运行flutter pub get来安装该插件。

初始化与设置

下面是一个完整的示例代码,展示了如何初始化FlareLane SDK以及如何处理不同的事件回调。

示例代码

import 'dart:async';
import 'package:flarelane_flutter/flarelane_flutter.dart';
import 'package:flutter/material.dart';

const FLARELANE_PROJECT_ID = 'YOUR_PROJECT_ID'; // 替换为你的项目ID

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  setupFlareLane();

  runApp(const MyApp());
}

Future<void> setupFlareLane() async {
  await FlareLane.shared.initialize(
    FLARELANE_PROJECT_ID,
    requestPermissionOnLaunch: false, // 是否在启动时请求权限
  );
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _resState = '';
  String _clickedMessage = '';
  bool _isSetUserId = false;
  bool _isSubscribed = false;
  bool _isSetTags = false;

  [@override](/user/override)
  void initState() {
    super.initState();

    // 设置点击通知的处理器
    FlareLane.shared.setNotificationClickedHandler((notification) {
      setState(() {
        _clickedMessage =
            '✅ Message of clickedHandler\n${notification.toString()}';
      });
    });

    // 设置前台接收通知的处理器
    FlareLane.shared.setNotificationForegroundReceivedHandler((event) {
      setState(() {
        _clickedMessage =
            '✅ Message of foregroundReceivedHandler\n${event.notification.toString()}';
      });

      if (event.notification.data?["dismiss_foreground_notification"] ==
          "true") {
        return;
      }

      event.display(); // 显示通知
    });

    // 设置应用内消息动作处理器
    FlareLane.shared.setInAppMessageActionHandler((iam, actionId) {
      var message =
          '✅ Message of setInAppMessageActionHandler\n${iam.toString()}\nactionId:${actionId}';
      print(message);
      setState(() {
        _clickedMessage = message;
      });
    });

    // 显示应用内消息
    FlareLane.shared.displayInApp("home");

    setState(() {
      _resState = 'FlareLane initialized.';
    });
  }

  Future<void> toggleUserId() async {
    await FlareLane.shared
        .setUserId(_isSetUserId ? null : "myuser@flarelane.com");
    _isSetUserId = !_isSetUserId;
  }

  Future<void> toggleTags() async {
    if (!_isSetTags) {
      await FlareLane.shared.setTags({"age": 27, "gender": 'men'});
      _isSetTags = true;
    } else {
      await FlareLane.shared.setTags({"age": null, "gender": null});
      _isSetTags = false;
    }
  }

  Future<void> getDeviceId() async {
    print(await FlareLane.shared.getDeviceId());
  }

  Future<void> trackEvent() async {
    await FlareLane.shared.trackEvent("test_event", {"test": "event"});
  }

  Future<void> subscribe() async {
    await FlareLane.shared.subscribe(true, (isSubscribed) {
      print(isSubscribed);
    });
  }

  Future<void> unsubscribe() async {
    await FlareLane.shared.unsubscribe((isSubscribed) {
      print(isSubscribed);
    });
  }

  Future<void> isSubscribed() async {
    final bool isSubscribed = await FlareLane.shared.isSubscribed();
    print(isSubscribed);
  }

  Future<void> displayInApp() async {
    FlareLane.shared.displayInApp("home");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('FlareLane Example App'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Center(child: Text('$_resState\n\n$_clickedMessage')),
            OutlinedButton(
                onPressed: toggleUserId, child: const Text("TOGGLE USER ID")),
            OutlinedButton(
                onPressed: toggleTags, child: const Text("TOGGLE TAGS")),
            OutlinedButton(
                onPressed: getDeviceId, child: const Text("PRINT DEVICE ID")),
            OutlinedButton(
                onPressed: trackEvent, child: const Text("TRACK EVENT")),
            OutlinedButton(
                onPressed: subscribe, child: const Text("SUBSCRIBE")),
            OutlinedButton(
                onPressed: unsubscribe, child: const Text("UNSUBSCRIBE")),
            OutlinedButton(
                onPressed: isSubscribed, child: const Text("ISSUBSCRIBED")),
            OutlinedButton(
                onPressed: displayInApp, child: const Text("DISPLAY INAPP"))
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用flarelane_flutter插件来实现动画渲染的代码示例。flarelane_flutter插件允许你在Flutter应用中嵌入和播放Flare动画(由Rive创建)。

首先,你需要确保你的Flutter项目已经添加了flarelane_flutter依赖。你可以在pubspec.yaml文件中添加以下依赖:

dependencies:
  flare_flutter: ^3.0.0  # 请检查最新版本号

然后运行flutter pub get来安装依赖。

接下来,你需要一个Flare文件(通常以.flr.flare为扩展名),这个文件包含了你的动画数据。你可以从Rive的官网或者其他资源获取这个文件。

假设你已经有一个名为example.flr的Flare文件,并且已经将其放置在assets文件夹中,你需要在pubspec.yaml中声明这个资源:

flutter:
  assets:
    - assets/example.flr

现在,你可以在Flutter代码中使用flare_flutter插件来加载和播放这个动画。以下是一个简单的示例代码:

import 'package:flutter/material.dart';
import 'package:flare_flutter/flare_actor.dart';
import 'package:flare_flutter/flare_controller.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flare Animation Example'),
        ),
        body: Center(
          child:FlareAnimationWidget(),
        ),
      ),
    );
  }
}

class FlareAnimationWidget extends StatefulWidget {
  @override
  _FlareAnimationWidgetState createState() => _FlareAnimationWidgetState();
}

class _FlareAnimationWidgetState extends State<FlareAnimationWidget> with SingleTickerProviderStateMixin {
  late FlareController _flareController;

  @override
  void initState() {
    super.initState();
    _flareController = FlareController();
    _flareController.setAnimation("animation_name");  // 替换为你的Flare文件中的动画名称
    _flareController.play();
  }

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

  @override
  Widget build(BuildContext context) {
    return FlareActor(
      "assets/example.flr",  // 替换为你的Flare文件路径
      animation: _flareController.animationName,
      controller: _flareController,
      alignment: Alignment.center,
      fit: BoxFit.contain,
      size: Size(300, 300),  // 根据需要调整动画大小
    );
  }
}

在上面的代码中:

  1. 我们定义了一个FlareAnimationWidget,它是一个有状态的组件,用于管理Flare动画的控制器。
  2. initState方法中,我们初始化了FlareController,并设置了要播放的动画名称(确保替换为你的Flare文件中的实际动画名称)。
  3. 我们重写了dispose方法来释放控制器资源。
  4. build方法中,我们使用FlareActor来渲染Flare动画,并传入Flare文件路径、动画名称、控制器、对齐方式、适应方式以及动画大小等参数。

确保将"animation_name"替换为你在Flare文件中定义的动画的实际名称。

这样,你就可以在Flutter应用中成功加载和播放Flare动画了。

回到顶部