Flutter UI组件库插件flan的使用

Flutter UI组件库插件flan的使用

Flan 是一个本地通知插件,用于 Flutter。它允许发送系统通知。

Flan 示例通知

Flan 目前处于非常早期的开发阶段,并且是为了支持另一个项目而编写的。因此,它目前只支持 iOS 并且只允许使用日历触发器来安排通知。

示例应用主要功能正常运行。它可以让你请求权限并添加通知。请注意,iOS 不会在应用程序处于前台时显示通知。

最低支持的 iOS 版本为 15.0。

安装

flutter pub add flan

使用

Flan 暴露了以下接口:

import 'package:flan/models/notification_authorization_options.dart';
import 'package:flan/models/notification_content.dart';

abstract interface class Flan {
  /// 获取当前的通知设置。
  ///
  /// 返回一个包含当前通知设置的 Future。
  Future<Map<String, dynamic>> getNotificationSettingsAsync();

  /// 请求用户授权以发送指定类型的通知。
  ///
  /// [options] 指定了应用程序想要发送的通知类型。每个选项都是一个 NotificationAuthorizationOptions 实例。选项不能重复指定。
  ///
  /// 返回一个在请求过程完成后完成的 Future。
  Future<void> requestAuthorizationAsync(
    List<NotificationAuthorizationOptions> options,
  );

  /// 在指定的 [target] 时间安排通知。
  ///
  /// [id] 是通知的唯一标识符。
  /// [target] 指定了通知的送达时间。
  /// [content] 包含通知的详细信息,如标题和正文。
  /// [repeats] 表示通知是否应重复,默认为 `false`。
  ///
  /// 返回一个在通知成功安排后完成的 Future。
  Future<void> scheduleNotificationAsync(
    String id,
    DateTime target,
    NotificationContent content, {
    bool repeats = false,
  });

  /// 取消具有指定 [ids] 的通知。
  ///
  /// [ids] 是一个包含要取消的通知唯一标识符的可迭代对象。
  ///
  /// 返回一个在通知成功取消后完成的 Future。
  Future<void> cancelNotificationsAsync(Iterable<String> ids);

  /// 获取所有已安排的通知列表。
  ///
  /// 返回一个包含所有已安排的通知的 Future。
  Future<List<Map<String, dynamic>>> getScheduledNotificationsAsync();
}

要使用它,创建一个 FlanMethodChannel 类的实例。令牌只是一个任意的对象:

Object token = Object();
Flan flan = FlanMethodChannel(token: token);

示例代码

import 'package:flan/flan.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:ksuid/ksuid.dart';

void main() {
  GetIt.instance.registerSingleton<FlanApi>(FlanPlatformApi());
  runApp(const FlanExampleApp());
}

class FlanExampleApp extends StatefulWidget {
  const FlanExampleApp({super.key});

  [@override](/user/override)
  State<FlanExampleApp> createState() => _FlanExampleAppState();
}

class _FlanExampleAppState extends State<FlanExampleApp> {
  static final FlanApi _flan = GetIt.instance<FlanApi>();

  bool? authorized;

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flan 示例应用'),
        ),
        body: Center(
          child: Column(
            spacing: 8,
            children: [
              Text('授权状态: ${authorized ?? '未知'}'),
              OutlinedButton(
                child: const Text('请求通知授权'),
                onPressed: () async {
                  var result = await _flan.requestAuthorizationAsync(
                    [
                      NotificationAuthorizationOptions.alert,
                    ],
                  );
                  setState(() => authorized = result);
                },
              ),
              OutlinedButton(
                child: const Text('安排 10 秒后的通知'),
                onPressed: () async {
                  DateTime target = DateTime.now().add(Duration(seconds: 10));
                  NotificationContent content = NotificationContent(
                    title: '来自 Flan 的示例通知',
                    body: '来自 Flan 的问候!',
                  );

                  await _flan.scheduleNotificationAsync(
                    KSUID.generate().asString,
                    target,
                    content,
                    repeats: false,
                  );
                },
              ),
              OutlinedButton(
                child: const Text('打印通知设置'),
                onPressed: () async =>
                    _flan.getNotificationSettingsAsync().then(print),
              )
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter UI组件库插件flan的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter UI组件库插件flan的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用Flutter UI组件库插件 flan 的示例代码。flan 是一套基于 Flutter 的高质量 UI 组件库,它提供了一系列常用的 UI 组件,可以极大地提高开发效率。

首先,你需要在你的 Flutter 项目中添加 flan 依赖。打开你的 pubspec.yaml 文件,并在 dependencies 部分添加 flan

dependencies:
  flutter:
    sdk: flutter
  flan: ^最新版本号  # 请替换为最新的版本号

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

接下来,你可以在你的 Flutter 应用中使用 flan 提供的组件。以下是一个简单的示例,展示了如何使用 flan 的按钮组件:

import 'package:flutter/material.dart';
import 'package:flan/flan.dart'; // 导入 flan 组件库

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flan UI 组件库示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // 使用 flan 的按钮组件
            FlanButton(
              type: FlanButtonType.primary, // 设置按钮类型为主要按钮
              text: '主要按钮',
              onPressed: () {
                // 按钮点击事件
                FlanToast.show({
                  'text': '你点击了主要按钮',
                  'position': 'middle',
                });
              },
            ),
            SizedBox(height: 20),
            FlanButton(
              type: FlanButtonType.warn, // 设置按钮类型为警告按钮
              text: '警告按钮',
              onPressed: () {
                // 按钮点击事件
                FlanToast.show({
                  'text': '你点击了警告按钮',
                  'position': 'middle',
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们展示了如何使用 flanFlanButton 组件,并为其设置了点击事件。当按钮被点击时,会显示一个 FlanToast 提示。

注意:FlanToastflan 库中提供的另一个组件,用于显示简单的提示信息。在使用 FlanToast 之前,请确保你已经按照 flan 库的文档正确导入了所需的组件。

由于 flan 库可能会持续更新,并且具体的组件使用方式可能会有所变化,因此建议查阅 flan 的官方文档以获取最新的使用指南和组件示例。

回到顶部