Flutter消息管理插件messages的使用

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

Flutter消息管理插件messages的使用

目标

支持以下功能:

  • 支持无需重新编译即可更新本地化文件,
  • 通过命名方法和参数生成实现简便且安全的消息调用,
  • 小巧的文件体积,树摇(tree shaking)未使用的语言和地区及未使用的消息。

状态 - 实验性

  • 序列化为二进制格式:-
  • 序列化为JSON格式:✔️
  • 反序列化JSON:✔️
  • 使用浏览器JavaScript反序列化JSON:-
  • 反序列化二进制格式:-
  • 树摇消息文件:-

分区

该包分区设计使得其他包仅作为dev_dependency来消费库的部分内容,而不是将消息构建和序列化包包含在应用程序的依赖项中。

messages

包含MessageList接口以及不同子类型的Message及其解析数据文件到MessageList的功能。

messages_builder

用于从输入的arb翻译文件生成命名方法和数据文件。依赖于messages_serializermessages

messages_serializer

负责将arb消息文件序列化为数据文件。

示例

首先,向您的依赖项中添加package:messagespackage:messages_builder

dart pub add messages
dart pub add dev:messages_builder

接下来,创建两个语言的翻译消息文件:

en.arb

开发者编写的参考文件:

{
    "@@locale":"en",
    "@@context": "AboutPage",
    "aboutMessage": "About {website}",
    "@aboutMessage": {
        "placeholders": {
            "website" : {
                "type":"string"
            }
        }
    }
}

fr.arb

由翻译人员根据参考文件en.arb创建的翻译文件:

{
    "@@locale":"fr",
    "@@context": "AboutPage",
    "aboutMessage": "À propos de {website}",
}

运行以下命令以生成消息调用代码和数据文件:

dart run build_runner build -d

然后,您可以导入生成的文件来使用这些消息:

import 'dart:io';

import 'package:example/aboutpage_arb_file.g.dart'; // 该文件刚刚生成
import 'package:messages/messages_native.dart';
import 'package:messages/package_intl_object.dart';

void main() {
  final aboutPageMessages = AboutPageMessages(
    (String id) => File('lib/$id').readAsBytesSync(), // 读取文件字节
    OldIntlObject(), // 国际化对象
  );
  aboutPageMessages.loadLocale('fr'); // 加载法语
  print(aboutPageMessages.aboutMessage(website: 'mywebsite.com')); // 输出:'À propos de mywebsite.com'
  aboutPageMessages.loadLocale('en'); // 加载英语
  print(aboutPageMessages.aboutMessage(website: 'mywebsite.com')); // 输出:'About mywebsite.com'
}

可选地,在pubspec.yaml中添加选项,指定以下键之一:

package_options:
  messages_builder:
    generateMethods: true # 是否生成命名方法
    generateFindById: false # 是否允许通过ID检索消息
    generateFindBy: integer # {none, integer, enumerate},使用的键类型
    header: | # 自定义头信息。在生成的代码中始终以//开头。
      Generated by flutter_messages.

      // Some custom
      // multi
      // line
      // header

更多关于Flutter消息管理插件messages的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter消息管理插件messages的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用messages插件(假设这里指的是一个常见的消息管理插件,尽管Flutter生态系统中没有一个官方直接名为messages的插件,但概念上可以是用于消息管理,如推送通知、本地消息等功能的插件)的示例代码。为了示范,我们可以使用一个假设的flutter_local_notifications插件,它常用于管理本地通知消息。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_local_notifications: ^9.0.0  # 请使用最新版本

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

2. 配置Android和iOS

对于Android,你需要在android/app/src/main/AndroidManifest.xml中添加必要的权限,比如:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />

对于iOS,在ios/Runner/Info.plist中添加必要的权限配置,比如请求通知权限:

<key>UIBackgroundModes</key>
<array>
    <string>remote-notification</string>
</array>
<key>UIApplicationExitsOnSuspend</key>
<false/>

3. 初始化插件

在你的主应用文件(通常是main.dart)中初始化插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Message Management'),
        ),
        body: MessageManager(),
      ),
    );
  }
}

class MessageManager extends StatefulWidget {
  @override
  _MessageManagerState createState() => _MessageManagerState();
}

class _MessageManagerState extends State<MessageManager> {
  var initializationSettings;
  var flutterLocalNotificationsPlugin;

  @override
  void initState() {
    super.initState();
    var androidInitializationSettings = AndroidInitializationSettings('@mipmap/ic_launcher');
    var iOSInitializationSettings = IOSInitializationSettings(requestAlertPermission: true, requestSoundPermission: true, requestBadgePermission: true);
    initializationSettings = InitializationSettings(androidInitializationSettings, iOSInitializationSettings);
    flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
    flutterLocalNotificationsPlugin.initialize(initializationSettings, onInitializationComplete: onInitializationComplete);
  }

  void onInitializationComplete() {
    flutterLocalNotificationsPlugin.show(
      0,
      'Hello, World!',
      'This is a local notification demo.',
      NotificationDetails(
        android: AndroidNotificationDetails(
          'channel_id',
          'Channel human readable title',
          'Channel description',
          importance: Importance.Max,
          priority: Priority.High,
        ),
        iOS: IOSNotificationDetails(
          presentAlert: true,
          presentSound: true,
          presentBadge: true,
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: () {
          showNotification();
        },
        child: Text('Show Notification'),
      ),
    );
  }

  void showNotification() {
    flutterLocalNotificationsPlugin.show(
      1,
      'New Message!',
      'You have a new message.',
      NotificationDetails(
        android: AndroidNotificationDetails(
          'channel_id',
          'Channel human readable title',
          'Channel description',
        ),
        iOS: IOSNotificationDetails(
          presentAlert: true,
          presentSound: true,
          presentBadge: true,
        ),
      ),
    );
  }
}

4. 运行应用

确保你的开发环境已经配置正确,然后运行flutter run来启动你的应用。你应该能够看到一个按钮,点击后会显示一个本地通知。

注意事项

  • 上述代码假设你使用的是flutter_local_notifications插件。如果你使用的是其他消息管理插件,请查阅相应插件的文档。
  • 确保你处理了所有必要的权限请求,尤其是在iOS上。
  • 你可以根据需要对通知的展示和点击事件进行更多的自定义处理。

希望这个示例能帮到你理解如何在Flutter中使用消息管理插件。如果有具体的需求或问题,请进一步详细说明。

回到顶部