我想在 Flutter 中处理 FCM 的后台消息,但是当 fcm 在后台模式下向应用程序发送消息并在日志中出错时出现错误
pubspec.yaml:
firebase_core: ^0.7.0
firebase_messaging: ^8.0.0-dev.14
Run Code Online (Sandbox Code Playgroud)
主活动.kt :
package com.mydomain.myproject
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}
Run Code Online (Sandbox Code Playgroud)
应用程序.kt :
package com.mydomain.myproject
import com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin
import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
import io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingBackgroundExecutor
import io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingBackgroundService
import io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingPlugin
import io.flutter.plugins.pathprovider.PathProviderPlugin
class MyApplication : FlutterApplication(), PluginRegistrantCallback {
override
fun onCreate() {
super.onCreate()
FlutterFirebaseMessagingBackgroundService.setPluginRegistrant(this)
FlutterFirebaseMessagingBackgroundExecutor.setPluginRegistrant(this)
}
override
fun registerWith(registry: PluginRegistry) {
PathProviderPlugin.registerWith(registry.registrarFor("io.flutter.plugins.pathprovider.PathProviderPlugin"))
FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"))
FlutterFirebaseMessagingPlugin.registerWith(registry.registrarFor("plugins.flutter.io/firebase_messaging"))
}
}
Run Code Online (Sandbox Code Playgroud)
使用fcm的代码: 我只是在主应用程序类的initState()中调用了_initFcm()。我的目标是当应用程序在后台时,后台 fcm 方法必须触发,我必须在首选项中保存消息数据,以便在应用程序打开时做一些事情
void _initFcm() {
Firebase.initializeApp();
FirebaseMessaging.onMessageOpenedApp.listen((message) {
Logger.log("_messaging onMessageOpenedApp: ${message}"); …Run Code Online (Sandbox Code Playgroud) firebase flutter firebase-cloud-messaging flutter-method-channel
我正在 Flutter 中开发一个多语言应用程序。
我使用flutter_localizations包进行本地化,使用 intl包进行国际化。
以 Widgets 内的正常方式,我可以在Context的帮助下使用它。
但问题是当我想在存储库或除 UI 层之外的其他层中使用国际化时。
除了 UI(我们无法访问Context)之外的其他层中进行国际化的最佳实践是什么,例如在 Api、Repository、Bloc 或 Cubit 中使用国际化?
注意:我正在寻找一种在应用程序的 BLOC(业务逻辑)内部使用国际化的方法,而不是 UI!
我使用charts_flutter创建BarChart,目前我想自定义它以构建如下图所示的 barChart:
在这里,我想做以下选项:
请看我的代码:
pubspec.yaml :
dev_dependencies:
flutter_test:
sdk: flutter
charts_flutter: ^0.9.0
Run Code Online (Sandbox Code Playgroud)
series_legend_options.dart :
import 'dart:math';
import 'package:charts_common/src/chart/common/behavior/legend/legend.dart';
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;
const Color blueColor = Color(0xff1565C0);
const Color orangeColor = Color(0xffFFA000);
class LegendOptions extends StatelessWidget {
final List<charts.Series> seriesList;
static const secondaryMeasureAxisId = 'secondaryMeasureAxisId';
final bool animate;
LegendOptions(this.seriesList, {this.animate});
factory LegendOptions.withSampleData() {
return LegendOptions(
_createSampleData(),
// Disable animations …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用floor数据库,但是当我想构建数据库时,出现以下错误:
E/flutter (26007): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method getDatabasesPath on channel com.tekartik.sqflite)
E/flutter (26007): #0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:154:7)
E/flutter (26007): <asynchronous suspension>
E/flutter (26007): #1 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:329:12)
E/flutter (26007): #2 invokeMethod (package:sqflite/src/sqflite_impl.dart:17:13)
E/flutter (26007): #3 SqfliteDatabaseFactoryImpl.invokeMethod (package:sqflite/src/factory_impl.dart:82:7)
E/flutter (26007): #4 SqfliteDatabaseFactoryMixin.safeInvokeMethod.<anonymous closure> (package:sqflite_common/src/factory_mixin.dart:25:35)
E/flutter (26007): #5 wrapDatabaseException (package:sqflite/src/exception_impl.dart:7:32)
E/flutter (26007): #6 SqfliteDatabaseFactoryImpl.wrapDatabaseException (package:sqflite/src/factory_impl.dart:78:7)
E/flutter (26007): #7 SqfliteDatabaseFactoryMixin.safeInvokeMethod (package:sqflite_common/src/factory_mixin.dart:25:7)
E/flutter (26007): #8 SqfliteDatabaseFactoryMixin.getDatabasesPath (package:sqflite_common/src/factory_mixin.dart:143:26)
E/flutter (26007): #9 getDatabasesPath (package:sqflite/sqflite.dart:168:54)
E/flutter (26007): #10 DatabaseFactoryExtension.getDatabasePath (package:floor/src/sqflite_database_factory.dart:23:23)
E/flutter …Run Code Online (Sandbox Code Playgroud) 当我删除 flutter-sdk 并替换新的 flutter-sdk 时出现此错误
\nInsufficient permissions to the resource in https://pub.dartlang.org package repository. You can modify credential using:\n pub token add https://pub.dartlang.org\nRunning "flutter pub get" in flutter_tools... \npub get failed (65; pub token add https://pub.dartlang.org)\nRun Code Online (Sandbox Code Playgroud)\n颤动版本:
\nFlutter 2.8.0 \xe2\x80\xa2 channel stable \xe2\x80\xa2 https://github.com/flutter/flutter.git\nFramework \xe2\x80\xa2 revision cf44000065 (6 days ago) \xe2\x80\xa2 2021-12-08 14:06:50 -0800\nEngine \xe2\x80\xa2 revision 40a99c5951\nTools \xe2\x80\xa2 Dart 2.15.0\nRun Code Online (Sandbox Code Playgroud)\n 当我发布由 Flutter web 创建的 PWA 的新版本时,浏览器不会缓存,也不会显示 PWA 的新更新,而是读取旧的缓存。
我在我的 flutter 项目中使用了url_launcher: ^6.1.0 。我开始为我的小部件编写测试,但是使用url_launcher方法启动 URL 的小部件部分在运行测试时无法正常工作。
我在小部件中使用的方法之一如下所示:
Future<void> _onTapLink(String? href) async {
if (href == null) return;
// canLaunchUrl method never return anything when we are calling this function inside flutter test
if (await canLaunchUrl(Uri.parse(href))) {
await launchUrl(Uri.parse(href));
} else {
print('cannot launch url: $href');
}
}
Run Code Online (Sandbox Code Playgroud)
当我们在 flutter 测试中调用此函数时,canLaunchUrl方法永远不会返回任何内容。
我正在寻找一种方法来模拟url_launcher包以使用内部颤动测试。
flutter ×7
bloc ×1
charts ×1
cubit ×1
database ×1
firebase ×1
floor ×1
legend ×1
localization ×1
mocking ×1
mockito ×1
sqflite ×1
testing ×1
url-launcher ×1
versioning ×1