2

I'm working on a Flutter app in which I'm using the shared_preferences: ^2.0.13 package.

  • Flutter version : 2.10.1 (latest)

  • gradle version: 6.7

  • Android gradle plugin version: 4.1.3

  • kotlin version: 1.6.10

  • flutterEmbedding 2 (in android menifiest)

MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences).

While getting FCM message received in background.

main.dart

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();

  print('Got a message onBackgroundMessageHandler_');
  print("Handling a background message: ${message.messageId}");

  print('Shared pref process starts');
  SharedPreferences sf = await SharedPreferences.getInstance();
  sf.setString("key", "Value");
  print('${sf.getKeys()}');
  print('Shared pref process ends');
}

void main() async{
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

  runApp(const MyApp());
}

MainActivity.kt

class MainActivity: FlutterActivity() {

}
James Z
  • 12,209
  • 10
  • 24
  • 44

2 Answers2

1

please reference to my post

you need to register share_preference for background access

io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin.registerWith(registry.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));
Jim
  • 6,928
  • 1
  • 7
  • 18
  • I have already done in my application.kt but its not working for me. – Urvesh Rathod Feb 16 '22 at 04:39
  • In the latest versions of flutter plugins are automatically registered by generated_plugin_registrant.dart, in this case FirebaseMessaging.onBackgroundMessage uses seperate isolate than main and in this isolate all third party dependencies gets unavailable. – MerdanDev Apr 20 '22 at 15:33
  • @MerdaDev, How can we fix this then? – George ozzy Jun 21 '22 at 10:08
1

Some edit into your code below:


import 'package:shared_preferences_android/shared_preferences_android.dart';
import 'package:shared_preferences_ios/shared_preferences_ios.dart';

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  await Firebase.initializeApp();

  print('Got a message onBackgroundMessageHandler_');
  print("Handling a background message: ${message.messageId}");

  print('Shared pref process starts');
  // I am not sure what does SharedPreferencesAndroid.registerWith(); but it can solve problem
  if (Platform.isAndroid) SharedPreferencesAndroid.registerWith();
  if (Platform.isIOS) SharedPreferencesIOS.registerWith();
  SharedPreferences sf = await SharedPreferences.getInstance();
  sf.setString("key", "Value");
  print('${sf.getKeys()}');
  print('Shared pref process ends');
}

void main() async{
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

  runApp(const MyApp());
}

There wasn't a little bit of information about it, espacially in firebase cloud messaging docs. I think this information must be available in onBackgroundMessage section of docs!

MerdanDev
  • 381
  • 3
  • 13