Flutter本地化插件fcm_localization的使用
Flutter本地化插件fcm_localization的使用
在本教程中,我们将详细介绍如何使用 fcm_localization
插件来实现 Flutter 应用程序的本地化。我们将从创建本地化类开始,然后初始化配置,并最终发送包含本地化消息的通知。
初始化
首先,你需要创建一个用于本地化的类:
class MyTranslationMessages extends TranslationMessages {
@override
String get defaultLocale => "ar";
@override
Map<String, Map<String, String>> get messages => {
"ar": {
"new_offer": "عرض جديد",
"new_offer_body": "لديك عرض جديد علي طلبك رقم {order_id} في تصنيف {category_name_ar}",
},
"en": {
"new_offer": "New offer",
"new_offer_body": "You have a new offer on your request number {order_id} on {category_name_en}",
},
};
}
在这个例子中,我们定义了两种语言(阿拉伯语和英语),并为每种语言提供了相应的本地化字符串。
接下来,你需要初始化 fcm_config
和 fcm_localizations
:
void main() async {
// 初始化 fcm_config
await FCMConfig().init();
// 初始化 fcm_localizations
await FCMLocalization.init(MyTranslationMessages());
runApp(
// 这里你可以获取已保存的语言环境
MyHomePage(locale: await FCMLocalization.getSavedLocale(Locale("ar"))),
);
}
获取已保存的语言环境
你可以通过以下方式获取已保存的语言环境:
// 带默认值
var locale = await FCMLocalization.getSavedLocale(Locale("ar"));
// 不带默认值
var locale = await FCMLocalization.getSavedLocale();
更改应用语言环境时保存
每次更改应用程序的语言环境时,你都需要保存它:
FCMLocalization.setLocale(Locale("ar"));
发送通知
当你从后端或其他方式发送通知时,需要遵循以下步骤:
- 仅发送数据部分。
- 数据必须包含
title_loc_key
和body_loc_key
。 - 消息中的任何参数都必须在数据的根目录下。
示例 JSON 数据:
{
"to": "...",
"data": {
"title_loc_key": "new_offer",
"body_loc_key": "new_offer_body",
"category_name_ar": "سيارات",
"category_name_en": "Cars",
"order_id": "77676"
},
"priority": "high"
}
更多关于Flutter本地化插件fcm_localization的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地化插件fcm_localization的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
fcm_localization
是一个用于在 Flutter 应用中实现本地化的插件,特别是结合 Firebase Cloud Messaging (FCM) 进行消息推送时,能够根据用户的语言偏好自动选择推送消息的本地化内容。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 fcm_localization
插件的依赖:
dependencies:
flutter:
sdk: flutter
fcm_localization: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装插件。
配置 Firebase
在使用 fcm_localization
之前,你需要确保已经在项目中正确配置了 Firebase。以下是基本的配置步骤:
-
在 Firebase Console 中创建项目:如果你还没有 Firebase 项目,请先在 Firebase 控制台 中创建一个新项目。
-
添加 Android 和 iOS 应用:
- 对于 Android:在 Firebase 控制台中添加 Android 应用,并下载
google-services.json
文件,将其放置在android/app
目录下。 - 对于 iOS:在 Firebase 控制台中添加 iOS 应用,并下载
GoogleService-Info.plist
文件,将其添加到 Xcode 项目中。
- 对于 Android:在 Firebase 控制台中添加 Android 应用,并下载
-
配置 Flutter 应用:
- 在
android/app/build.gradle
文件中添加google-services
插件:apply plugin: 'com.google.gms.google-services'
- 在
ios/Runner/AppDelegate.swift
文件中添加 Firebase 初始化代码:import UIKit import Flutter import Firebase @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { FirebaseApp.configure() GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } }
- 在
-
添加 Firebase 依赖: 在
pubspec.yaml
中添加 Firebase Core 和 Firebase Messaging 插件:dependencies: flutter: sdk: flutter firebase_core: latest_version firebase_messaging: latest_version fcm_localization: ^1.0.0
使用 fcm_localization
-
初始化
fcm_localization
: 在main.dart
文件中初始化fcm_localization
:import 'package:flutter/material.dart'; import 'package:fcm_localization/fcm_localization.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); await FcmLocalization.initialize( defaultLanguage: 'en', // 默认语言 supportedLanguages: ['en', 'es', 'fr'], // 支持的语言 ); runApp(MyApp()); }
-
处理 FCM 消息: 使用
FirebaseMessaging
来处理收到的消息,并根据语言显示本地化内容:import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:fcm_localization/fcm_localization.dart'; class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('FCM Localization Example'), ), body: Center( child: Text('Hello, World!'), ), ), ); } void _initializeFcm() async { FirebaseMessaging messaging = FirebaseMessaging.instance; // 请求通知权限 NotificationSettings settings = await messaging.requestPermission(); if (settings.authorizationStatus == AuthorizationStatus.authorized) { FirebaseMessaging.onMessage.listen((RemoteMessage message) { String? localizedTitle = FcmLocalization.getLocalizedString( message.data['title'], message.data['title_es'], message.data['title_fr'], ); String? localizedBody = FcmLocalization.getLocalizedString( message.data['body'], message.data['body_es'], message.data['body_fr'], ); showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Text(localizedTitle ?? 'Notification'), content: Text(localizedBody ?? 'No message body'), actions: [ TextButton( child: Text('OK'), onPressed: () { Navigator.of(context).pop(); }, ), ], ); }, ); }); } } }
-
发送本地化消息: 在 Firebase 控制台或通过 API 发送 FCM 消息时,确保消息的
data
字段包含不同语言的标题和内容。例如:{ "data": { "title": "Hello", "title_es": "Hola", "title_fr": "Bonjour", "body": "This is a message", "body_es": "Esto es un mensaje", "body_fr": "Ceci est un message" } }