diff --git a/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart
index 1938a04..11498cf 100755
--- a/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart
+++ b/packages/shared_preferences/shared_preferences/test/shared_preferences_test.dart
@@ -47,11 +47,6 @@
       store.log.clear();
     });
 
-    tearDown(() async {
-      await preferences.clear();
-      await store.clear();
-    });
-
     test('reading', () async {
       expect(preferences.get('String'), testString);
       expect(preferences.get('bool'), testBool);
diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md
index 527d64d..5321e86 100644
--- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md
+++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.11
+
+* Switches to an in-package method channel implementation.
+
 ## 2.0.10
 
 * Removes dependency on `meta`.
diff --git a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java
index d41328e..9545fe9 100644
--- a/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java
+++ b/packages/shared_preferences/shared_preferences_android/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java
@@ -11,7 +11,7 @@
 
 /** SharedPreferencesPlugin */
 public class SharedPreferencesPlugin implements FlutterPlugin {
-  private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences";
+  private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences_android";
   private MethodChannel channel;
   private MethodCallHandlerImpl handler;
 
diff --git a/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart
new file mode 100644
index 0000000..86f447b
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_android/lib/shared_preferences_android.dart
@@ -0,0 +1,53 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:flutter/services.dart';
+import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
+
+const MethodChannel _kChannel =
+    MethodChannel('plugins.flutter.io/shared_preferences_android');
+
+/// The macOS implementation of [SharedPreferencesStorePlatform].
+///
+/// This class implements the `package:shared_preferences` functionality for Android.
+class SharedPreferencesAndroid extends SharedPreferencesStorePlatform {
+  /// Registers this class as the default instance of [SharedPreferencesStorePlatform].
+  static void registerWith() {
+    SharedPreferencesStorePlatform.instance = SharedPreferencesAndroid();
+  }
+
+  @override
+  Future<bool> remove(String key) async {
+    return (await _kChannel.invokeMethod<bool>(
+      'remove',
+      <String, dynamic>{'key': key},
+    ))!;
+  }
+
+  @override
+  Future<bool> setValue(String valueType, String key, Object value) async {
+    return (await _kChannel.invokeMethod<bool>(
+      'set$valueType',
+      <String, dynamic>{'key': key, 'value': value},
+    ))!;
+  }
+
+  @override
+  Future<bool> clear() async {
+    return (await _kChannel.invokeMethod<bool>('clear'))!;
+  }
+
+  @override
+  Future<Map<String, Object>> getAll() async {
+    final Map<String, Object>? preferences =
+        await _kChannel.invokeMapMethod<String, Object>('getAll');
+
+    if (preferences == null) {
+      return <String, Object>{};
+    }
+    return preferences;
+  }
+}
diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml
index 8adb240..7eb180f 100644
--- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml
+++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml
@@ -2,11 +2,11 @@
 description: Android implementation of the shared_preferences plugin
 repository: https://github.com/flutter/plugins/tree/main/packages/shared_preferences/shared_preferences_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22
-version: 2.0.10
+version: 2.0.11
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
-  flutter: ">=2.5.0"
+  flutter: ">=2.8.0"
 
 flutter:
   plugin:
@@ -15,6 +15,7 @@
       android:
         package: io.flutter.plugins.sharedpreferences
         pluginClass: SharedPreferencesPlugin
+        dartPluginClass: SharedPreferencesAndroid
 
 dependencies:
   flutter:
@@ -24,4 +25,3 @@
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  pedantic: ^1.10.0
diff --git a/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart
new file mode 100644
index 0000000..92d9e8f
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_android/test/shared_preferences_android_test.dart
@@ -0,0 +1,117 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/services.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:shared_preferences_android/shared_preferences_android.dart';
+import 'package:shared_preferences_platform_interface/method_channel_shared_preferences.dart';
+import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
+
+void main() {
+  TestWidgetsFlutterBinding.ensureInitialized();
+
+  group(MethodChannelSharedPreferencesStore, () {
+    const MethodChannel channel = MethodChannel(
+      'plugins.flutter.io/shared_preferences_android',
+    );
+
+    const Map<String, Object> kTestValues = <String, Object>{
+      'flutter.String': 'hello world',
+      'flutter.Bool': true,
+      'flutter.Int': 42,
+      'flutter.Double': 3.14159,
+      'flutter.StringList': <String>['foo', 'bar'],
+    };
+    // Create a dummy in-memory implementation to back the mocked method channel
+    // API to simplify validation of the expected calls.
+    late InMemorySharedPreferencesStore testData;
+
+    final List<MethodCall> log = <MethodCall>[];
+    late SharedPreferencesStorePlatform store;
+
+    setUp(() async {
+      testData = InMemorySharedPreferencesStore.empty();
+
+      channel.setMockMethodCallHandler((MethodCall methodCall) async {
+        log.add(methodCall);
+        if (methodCall.method == 'getAll') {
+          return await testData.getAll();
+        }
+        if (methodCall.method == 'remove') {
+          final String key = methodCall.arguments['key']! as String;
+          return await testData.remove(key);
+        }
+        if (methodCall.method == 'clear') {
+          return await testData.clear();
+        }
+        final RegExp setterRegExp = RegExp(r'set(.*)');
+        final Match? match = setterRegExp.matchAsPrefix(methodCall.method);
+        if (match?.groupCount == 1) {
+          final String valueType = match!.group(1)!;
+          final String key = methodCall.arguments['key'] as String;
+          final Object value = methodCall.arguments['value'] as Object;
+          return await testData.setValue(valueType, key, value);
+        }
+        fail('Unexpected method call: ${methodCall.method}');
+      });
+      log.clear();
+    });
+
+    test('registered instance', () {
+      SharedPreferencesAndroid.registerWith();
+      expect(SharedPreferencesStorePlatform.instance,
+          isA<SharedPreferencesAndroid>());
+    });
+
+    test('getAll', () async {
+      store = SharedPreferencesAndroid();
+      testData = InMemorySharedPreferencesStore.withData(kTestValues);
+      expect(await store.getAll(), kTestValues);
+      expect(log.single.method, 'getAll');
+    });
+
+    test('remove', () async {
+      store = SharedPreferencesAndroid();
+      testData = InMemorySharedPreferencesStore.withData(kTestValues);
+      expect(await store.remove('flutter.String'), true);
+      expect(await store.remove('flutter.Bool'), true);
+      expect(await store.remove('flutter.Int'), true);
+      expect(await store.remove('flutter.Double'), true);
+      expect(await testData.getAll(), <String, dynamic>{
+        'flutter.StringList': <String>['foo', 'bar'],
+      });
+
+      expect(log, hasLength(4));
+      for (final MethodCall call in log) {
+        expect(call.method, 'remove');
+      }
+    });
+
+    test('setValue', () async {
+      store = SharedPreferencesAndroid();
+      expect(await testData.getAll(), isEmpty);
+      for (final String key in kTestValues.keys) {
+        final Object value = kTestValues[key]!;
+        expect(await store.setValue(key.split('.').last, key, value), true);
+      }
+      expect(await testData.getAll(), kTestValues);
+
+      expect(log, hasLength(5));
+      expect(log[0].method, 'setString');
+      expect(log[1].method, 'setBool');
+      expect(log[2].method, 'setInt');
+      expect(log[3].method, 'setDouble');
+      expect(log[4].method, 'setStringList');
+    });
+
+    test('clear', () async {
+      store = SharedPreferencesAndroid();
+      testData = InMemorySharedPreferencesStore.withData(kTestValues);
+      expect(await testData.getAll(), isNotEmpty);
+      expect(await store.clear(), true);
+      expect(await testData.getAll(), isEmpty);
+      expect(log.single.method, 'clear');
+    });
+  });
+}
diff --git a/packages/shared_preferences/shared_preferences_ios/CHANGELOG.md b/packages/shared_preferences/shared_preferences_ios/CHANGELOG.md
index 84fe4f8..b2a9f14 100644
--- a/packages/shared_preferences/shared_preferences_ios/CHANGELOG.md
+++ b/packages/shared_preferences/shared_preferences_ios/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.10
+
+* Switches to an in-package method channel implementation.
+
 ## 2.0.9
 
 * Removes dependency on `meta`.
diff --git a/packages/shared_preferences/shared_preferences_ios/ios/Classes/FLTSharedPreferencesPlugin.m b/packages/shared_preferences/shared_preferences_ios/ios/Classes/FLTSharedPreferencesPlugin.m
index 09308d4..4d49e3b 100644
--- a/packages/shared_preferences/shared_preferences_ios/ios/Classes/FLTSharedPreferencesPlugin.m
+++ b/packages/shared_preferences/shared_preferences_ios/ios/Classes/FLTSharedPreferencesPlugin.m
@@ -4,7 +4,7 @@
 
 #import "FLTSharedPreferencesPlugin.h"
 
-static NSString *const CHANNEL_NAME = @"plugins.flutter.io/shared_preferences";
+static NSString *const CHANNEL_NAME = @"plugins.flutter.io/shared_preferences_ios";
 
 @implementation FLTSharedPreferencesPlugin
 
diff --git a/packages/shared_preferences/shared_preferences_ios/lib/shared_preferences_ios.dart b/packages/shared_preferences/shared_preferences_ios/lib/shared_preferences_ios.dart
new file mode 100644
index 0000000..15f1e2f
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_ios/lib/shared_preferences_ios.dart
@@ -0,0 +1,53 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:flutter/services.dart';
+import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
+
+const MethodChannel _kChannel =
+    MethodChannel('plugins.flutter.io/shared_preferences_ios');
+
+/// The macOS implementation of [SharedPreferencesStorePlatform].
+///
+/// This class implements the `package:shared_preferences` functionality for iOS.
+class SharedPreferencesIOS extends SharedPreferencesStorePlatform {
+  /// Registers this class as the default instance of [SharedPreferencesStorePlatform].
+  static void registerWith() {
+    SharedPreferencesStorePlatform.instance = SharedPreferencesIOS();
+  }
+
+  @override
+  Future<bool> remove(String key) async {
+    return (await _kChannel.invokeMethod<bool>(
+      'remove',
+      <String, dynamic>{'key': key},
+    ))!;
+  }
+
+  @override
+  Future<bool> setValue(String valueType, String key, Object value) async {
+    return (await _kChannel.invokeMethod<bool>(
+      'set$valueType',
+      <String, dynamic>{'key': key, 'value': value},
+    ))!;
+  }
+
+  @override
+  Future<bool> clear() async {
+    return (await _kChannel.invokeMethod<bool>('clear'))!;
+  }
+
+  @override
+  Future<Map<String, Object>> getAll() async {
+    final Map<String, Object>? preferences =
+        await _kChannel.invokeMapMethod<String, Object>('getAll');
+
+    if (preferences == null) {
+      return <String, Object>{};
+    }
+    return preferences;
+  }
+}
diff --git a/packages/shared_preferences/shared_preferences_ios/pubspec.yaml b/packages/shared_preferences/shared_preferences_ios/pubspec.yaml
index ad3f20b..68ab035 100644
--- a/packages/shared_preferences/shared_preferences_ios/pubspec.yaml
+++ b/packages/shared_preferences/shared_preferences_ios/pubspec.yaml
@@ -2,11 +2,11 @@
 description: iOS implementation of the shared_preferences plugin
 repository: https://github.com/flutter/plugins/tree/main/packages/shared_preferences/shared_preferences_ios
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22
-version: 2.0.9
+version: 2.0.10
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
-  flutter: ">=2.5.0"
+  flutter: ">=2.8.0"
 
 flutter:
   plugin:
@@ -14,6 +14,7 @@
     platforms:
       ios:
         pluginClass: FLTSharedPreferencesPlugin
+        dartPluginClass: SharedPreferencesIOS
 
 dependencies:
   flutter:
@@ -23,4 +24,3 @@
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  pedantic: ^1.10.0
diff --git a/packages/shared_preferences/shared_preferences_ios/test/shared_preferences_ios_test.dart b/packages/shared_preferences/shared_preferences_ios/test/shared_preferences_ios_test.dart
new file mode 100644
index 0000000..8eb23f2
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_ios/test/shared_preferences_ios_test.dart
@@ -0,0 +1,117 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/services.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:shared_preferences_ios/shared_preferences_ios.dart';
+import 'package:shared_preferences_platform_interface/method_channel_shared_preferences.dart';
+import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
+
+void main() {
+  TestWidgetsFlutterBinding.ensureInitialized();
+
+  group(MethodChannelSharedPreferencesStore, () {
+    const MethodChannel channel = MethodChannel(
+      'plugins.flutter.io/shared_preferences_ios',
+    );
+
+    const Map<String, Object> kTestValues = <String, Object>{
+      'flutter.String': 'hello world',
+      'flutter.Bool': true,
+      'flutter.Int': 42,
+      'flutter.Double': 3.14159,
+      'flutter.StringList': <String>['foo', 'bar'],
+    };
+    // Create a dummy in-memory implementation to back the mocked method channel
+    // API to simplify validation of the expected calls.
+    late InMemorySharedPreferencesStore testData;
+
+    final List<MethodCall> log = <MethodCall>[];
+    late SharedPreferencesStorePlatform store;
+
+    setUp(() async {
+      testData = InMemorySharedPreferencesStore.empty();
+
+      channel.setMockMethodCallHandler((MethodCall methodCall) async {
+        log.add(methodCall);
+        if (methodCall.method == 'getAll') {
+          return await testData.getAll();
+        }
+        if (methodCall.method == 'remove') {
+          final String key = methodCall.arguments['key'] as String;
+          return await testData.remove(key);
+        }
+        if (methodCall.method == 'clear') {
+          return await testData.clear();
+        }
+        final RegExp setterRegExp = RegExp(r'set(.*)');
+        final Match? match = setterRegExp.matchAsPrefix(methodCall.method);
+        if (match?.groupCount == 1) {
+          final String valueType = match!.group(1)!;
+          final String key = methodCall.arguments['key'] as String;
+          final Object value = methodCall.arguments['value'] as Object;
+          return await testData.setValue(valueType, key, value);
+        }
+        fail('Unexpected method call: ${methodCall.method}');
+      });
+      log.clear();
+    });
+
+    test('registered instance', () {
+      SharedPreferencesIOS.registerWith();
+      expect(
+          SharedPreferencesStorePlatform.instance, isA<SharedPreferencesIOS>());
+    });
+
+    test('getAll', () async {
+      store = SharedPreferencesIOS();
+      testData = InMemorySharedPreferencesStore.withData(kTestValues);
+      expect(await store.getAll(), kTestValues);
+      expect(log.single.method, 'getAll');
+    });
+
+    test('remove', () async {
+      store = SharedPreferencesIOS();
+      testData = InMemorySharedPreferencesStore.withData(kTestValues);
+      expect(await store.remove('flutter.String'), true);
+      expect(await store.remove('flutter.Bool'), true);
+      expect(await store.remove('flutter.Int'), true);
+      expect(await store.remove('flutter.Double'), true);
+      expect(await testData.getAll(), <String, dynamic>{
+        'flutter.StringList': <String>['foo', 'bar'],
+      });
+
+      expect(log, hasLength(4));
+      for (final MethodCall call in log) {
+        expect(call.method, 'remove');
+      }
+    });
+
+    test('setValue', () async {
+      store = SharedPreferencesIOS();
+      expect(await testData.getAll(), isEmpty);
+      for (final String key in kTestValues.keys) {
+        final Object value = kTestValues[key]!;
+        expect(await store.setValue(key.split('.').last, key, value), true);
+      }
+      expect(await testData.getAll(), kTestValues);
+
+      expect(log, hasLength(5));
+      expect(log[0].method, 'setString');
+      expect(log[1].method, 'setBool');
+      expect(log[2].method, 'setInt');
+      expect(log[3].method, 'setDouble');
+      expect(log[4].method, 'setStringList');
+    });
+
+    test('clear', () async {
+      store = SharedPreferencesIOS();
+      testData = InMemorySharedPreferencesStore.withData(kTestValues);
+      expect(await testData.getAll(), isNotEmpty);
+      expect(await store.clear(), true);
+      expect(await testData.getAll(), isEmpty);
+      expect(log.single.method, 'clear');
+    });
+  });
+}
diff --git a/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md b/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md
index bfc48b7..7c86b3c 100644
--- a/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md
+++ b/packages/shared_preferences/shared_preferences_linux/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.1.0
+
+* Deprecated `SharedPreferencesWindows.instance` in favor of `SharedPreferencesStorePlatform.instance`.
+
 ## 2.0.4
 
 * Removes dependency on `meta`.
diff --git a/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart
index b33d601..1d83eea 100644
--- a/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart
+++ b/packages/shared_preferences/shared_preferences_linux/example/integration_test/shared_preferences_test.dart
@@ -31,7 +31,7 @@
     late SharedPreferencesLinux preferences;
 
     setUp(() async {
-      preferences = SharedPreferencesLinux.instance;
+      preferences = SharedPreferencesLinux();
     });
 
     tearDown(() {
diff --git a/packages/shared_preferences/shared_preferences_linux/example/lib/main.dart b/packages/shared_preferences/shared_preferences_linux/example/lib/main.dart
index b4a7ea3..4b71c7e 100644
--- a/packages/shared_preferences/shared_preferences_linux/example/lib/main.dart
+++ b/packages/shared_preferences/shared_preferences_linux/example/lib/main.dart
@@ -31,7 +31,7 @@
 }
 
 class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
-  final SharedPreferencesLinux prefs = SharedPreferencesLinux.instance;
+  final SharedPreferencesLinux prefs = SharedPreferencesLinux();
   late Future<int> _counter;
 
   Future<void> _incrementCounter() async {
diff --git a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart
index d6dcceb..b6a9a5b 100644
--- a/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart
+++ b/packages/shared_preferences/shared_preferences_linux/lib/shared_preferences_linux.dart
@@ -16,14 +16,14 @@
 ///
 /// This class implements the `package:shared_preferences` functionality for Linux.
 class SharedPreferencesLinux extends SharedPreferencesStorePlatform {
-  /// The default instance of [SharedPreferencesLinux] to use.
-  // TODO(egarciad): Remove when the Dart plugin registrant lands on Flutter stable.
-  // https://github.com/flutter/flutter/issues/81421
+  /// Deprecated instance of [SharedPreferencesLinux].
+  /// Use [SharedPreferencesStorePlatform.instance] instead.
+  @Deprecated('Use `SharedPreferencesStorePlatform.instance` instead.')
   static SharedPreferencesLinux instance = SharedPreferencesLinux();
 
   /// Registers the Linux implementation.
   static void registerWith() {
-    SharedPreferencesStorePlatform.instance = instance;
+    SharedPreferencesStorePlatform.instance = SharedPreferencesLinux();
   }
 
   /// Local copy of preferences
@@ -33,9 +33,12 @@
   @visibleForTesting
   FileSystem fs = const LocalFileSystem();
 
+  /// The path_provider_linux instance used to find the support directory.
+  @visibleForTesting
+  PathProviderLinux pathProvider = PathProviderLinux();
+
   /// Gets the file where the preferences are stored.
   Future<File?> _getLocalDataFile() async {
-    final PathProviderLinux pathProvider = PathProviderLinux();
     final String? directory = await pathProvider.getApplicationSupportPath();
     if (directory == null) {
       return null;
diff --git a/packages/shared_preferences/shared_preferences_linux/pubspec.yaml b/packages/shared_preferences/shared_preferences_linux/pubspec.yaml
index 1b84644..8ab692a 100644
--- a/packages/shared_preferences/shared_preferences_linux/pubspec.yaml
+++ b/packages/shared_preferences/shared_preferences_linux/pubspec.yaml
@@ -2,11 +2,11 @@
 description: Linux implementation of the shared_preferences plugin
 repository: https://github.com/flutter/plugins/tree/main/packages/shared_preferences/shared_preferences_linux
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22
-version: 2.0.4
+version: 2.1.0
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
-  flutter: ">=2.0.0"
+  flutter: ">=2.5.0"
 
 flutter:
   plugin:
@@ -21,9 +21,9 @@
     sdk: flutter
   path: ^1.8.0
   path_provider_linux: ^2.0.0
+  path_provider_platform_interface: ^2.0.0
   shared_preferences_platform_interface: ^2.0.0
 
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  pedantic: ^1.10.0
diff --git a/packages/shared_preferences/shared_preferences_linux/test/shared_preferences_linux_test.dart b/packages/shared_preferences/shared_preferences_linux/test/shared_preferences_linux_test.dart
index 40dbdd5..57acd17 100644
--- a/packages/shared_preferences/shared_preferences_linux/test/shared_preferences_linux_test.dart
+++ b/packages/shared_preferences/shared_preferences_linux/test/shared_preferences_linux_test.dart
@@ -5,20 +5,22 @@
 import 'package:flutter_test/flutter_test.dart';
 import 'package:path/path.dart' as path;
 import 'package:path_provider_linux/path_provider_linux.dart';
+import 'package:path_provider_platform_interface/path_provider_platform_interface.dart';
 import 'package:shared_preferences_linux/shared_preferences_linux.dart';
 import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
 
 void main() {
   late MemoryFileSystem fs;
+  late PathProviderLinux pathProvider;
 
   SharedPreferencesLinux.registerWith();
 
   setUp(() {
     fs = MemoryFileSystem.test();
+    pathProvider = FakePathProviderLinux();
   });
 
   Future<String> _getFilePath() async {
-    final PathProviderLinux pathProvider = PathProviderLinux();
     final String? directory = await pathProvider.getApplicationSupportPath();
     return path.join(directory!, 'shared_preferences.json');
   }
@@ -36,10 +38,12 @@
   SharedPreferencesLinux _getPreferences() {
     final SharedPreferencesLinux prefs = SharedPreferencesLinux();
     prefs.fs = fs;
+    prefs.pathProvider = pathProvider;
     return prefs;
   }
 
   test('registered instance', () {
+    SharedPreferencesLinux.registerWith();
     expect(
         SharedPreferencesStorePlatform.instance, isA<SharedPreferencesLinux>());
   });
@@ -81,3 +85,26 @@
     expect(await _readTestFile(), '{}');
   });
 }
+
+/// Fake implementation of PathProviderLinux that returns hard-coded paths,
+/// allowing tests to run on any platform.
+///
+/// Note that this should only be used with an in-memory filesystem, as the
+/// path it returns is a root path that does not actually exist on Linux.
+class FakePathProviderLinux extends PathProviderPlatform
+    implements PathProviderLinux {
+  @override
+  Future<String?> getApplicationSupportPath() async => r'/appsupport';
+
+  @override
+  Future<String?> getTemporaryPath() async => null;
+
+  @override
+  Future<String?> getLibraryPath() async => null;
+
+  @override
+  Future<String?> getApplicationDocumentsPath() async => null;
+
+  @override
+  Future<String?> getDownloadsPath() async => null;
+}
diff --git a/packages/shared_preferences/shared_preferences_macos/CHANGELOG.md b/packages/shared_preferences/shared_preferences_macos/CHANGELOG.md
index 7a2e3ab..1f586a2 100644
--- a/packages/shared_preferences/shared_preferences_macos/CHANGELOG.md
+++ b/packages/shared_preferences/shared_preferences_macos/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.0.3
 
+* Switches to an in-package method channel implementation.
 * Fixes newly enabled analyzer options.
 
 ## 2.0.2
diff --git a/packages/shared_preferences/shared_preferences_macos/lib/shared_preferences_macos.dart b/packages/shared_preferences/shared_preferences_macos/lib/shared_preferences_macos.dart
new file mode 100644
index 0000000..a97fe13
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_macos/lib/shared_preferences_macos.dart
@@ -0,0 +1,53 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:flutter/services.dart';
+import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
+
+const MethodChannel _kChannel =
+    MethodChannel('plugins.flutter.io/shared_preferences_macos');
+
+/// The macOS implementation of [SharedPreferencesStorePlatform].
+///
+/// This class implements the `package:shared_preferences` functionality for macOS.
+class SharedPreferencesMacOS extends SharedPreferencesStorePlatform {
+  /// Registers this class as the default instance of [SharedPreferencesStorePlatform].
+  static void registerWith() {
+    SharedPreferencesStorePlatform.instance = SharedPreferencesMacOS();
+  }
+
+  @override
+  Future<bool> remove(String key) async {
+    return (await _kChannel.invokeMethod<bool>(
+      'remove',
+      <String, dynamic>{'key': key},
+    ))!;
+  }
+
+  @override
+  Future<bool> setValue(String valueType, String key, Object value) async {
+    return (await _kChannel.invokeMethod<bool>(
+      'set$valueType',
+      <String, dynamic>{'key': key, 'value': value},
+    ))!;
+  }
+
+  @override
+  Future<bool> clear() async {
+    return (await _kChannel.invokeMethod<bool>('clear'))!;
+  }
+
+  @override
+  Future<Map<String, Object>> getAll() async {
+    final Map<String, Object>? preferences =
+        await _kChannel.invokeMapMethod<String, Object>('getAll');
+
+    if (preferences == null) {
+      return <String, Object>{};
+    }
+    return preferences;
+  }
+}
diff --git a/packages/shared_preferences/shared_preferences_macos/macos/Classes/SharedPreferencesPlugin.swift b/packages/shared_preferences/shared_preferences_macos/macos/Classes/SharedPreferencesPlugin.swift
index 2cf345c..91b4244 100644
--- a/packages/shared_preferences/shared_preferences_macos/macos/Classes/SharedPreferencesPlugin.swift
+++ b/packages/shared_preferences/shared_preferences_macos/macos/Classes/SharedPreferencesPlugin.swift
@@ -8,7 +8,7 @@
 public class SharedPreferencesPlugin: NSObject, FlutterPlugin {
   public static func register(with registrar: FlutterPluginRegistrar) {
     let channel = FlutterMethodChannel(
-      name: "plugins.flutter.io/shared_preferences",
+      name: "plugins.flutter.io/shared_preferences_macos",
       binaryMessenger: registrar.messenger)
     let instance = SharedPreferencesPlugin()
     registrar.addMethodCallDelegate(instance, channel: channel)
diff --git a/packages/shared_preferences/shared_preferences_macos/pubspec.yaml b/packages/shared_preferences/shared_preferences_macos/pubspec.yaml
index 4f06c52..0873696 100644
--- a/packages/shared_preferences/shared_preferences_macos/pubspec.yaml
+++ b/packages/shared_preferences/shared_preferences_macos/pubspec.yaml
@@ -2,11 +2,11 @@
 description: macOS implementation of the shared_preferences plugin.
 repository: https://github.com/flutter/plugins/tree/main/packages/shared_preferences/shared_preferences_macos
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22
-version: 2.0.2
+version: 2.0.3
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
-  flutter: ">=2.0.0"
+  flutter: ">=2.5.0"
 
 flutter:
   plugin:
@@ -14,6 +14,7 @@
     platforms:
       macos:
         pluginClass: SharedPreferencesPlugin
+        dartPluginClass: SharedPreferencesMacOS
 
 dependencies:
   flutter:
@@ -21,4 +22,5 @@
   shared_preferences_platform_interface: ^2.0.0
 
 dev_dependencies:
-  pedantic: ^1.10.0
+  flutter_test:
+    sdk: flutter
diff --git a/packages/shared_preferences/shared_preferences_macos/test/shared_preferences_macos_test.dart b/packages/shared_preferences/shared_preferences_macos/test/shared_preferences_macos_test.dart
new file mode 100644
index 0000000..cd858f4
--- /dev/null
+++ b/packages/shared_preferences/shared_preferences_macos/test/shared_preferences_macos_test.dart
@@ -0,0 +1,117 @@
+// Copyright 2013 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/services.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:shared_preferences_macos/shared_preferences_macos.dart';
+import 'package:shared_preferences_platform_interface/method_channel_shared_preferences.dart';
+import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart';
+
+void main() {
+  TestWidgetsFlutterBinding.ensureInitialized();
+
+  group(MethodChannelSharedPreferencesStore, () {
+    const MethodChannel channel = MethodChannel(
+      'plugins.flutter.io/shared_preferences_macos',
+    );
+
+    const Map<String, Object> kTestValues = <String, Object>{
+      'flutter.String': 'hello world',
+      'flutter.Bool': true,
+      'flutter.Int': 42,
+      'flutter.Double': 3.14159,
+      'flutter.StringList': <String>['foo', 'bar'],
+    };
+    // Create a dummy in-memory implementation to back the mocked method channel
+    // API to simplify validation of the expected calls.
+    late InMemorySharedPreferencesStore testData;
+
+    final List<MethodCall> log = <MethodCall>[];
+    late SharedPreferencesStorePlatform store;
+
+    setUp(() async {
+      testData = InMemorySharedPreferencesStore.empty();
+
+      channel.setMockMethodCallHandler((MethodCall methodCall) async {
+        log.add(methodCall);
+        if (methodCall.method == 'getAll') {
+          return await testData.getAll();
+        }
+        if (methodCall.method == 'remove') {
+          final String key = (methodCall.arguments['key'] as String?)!;
+          return await testData.remove(key);
+        }
+        if (methodCall.method == 'clear') {
+          return await testData.clear();
+        }
+        final RegExp setterRegExp = RegExp(r'set(.*)');
+        final Match? match = setterRegExp.matchAsPrefix(methodCall.method);
+        if (match?.groupCount == 1) {
+          final String valueType = match!.group(1)!;
+          final String key = (methodCall.arguments['key'] as String?)!;
+          final Object value = (methodCall.arguments['value'] as Object?)!;
+          return await testData.setValue(valueType, key, value);
+        }
+        fail('Unexpected method call: ${methodCall.method}');
+      });
+      log.clear();
+    });
+
+    test('registers instance', () {
+      SharedPreferencesMacOS.registerWith();
+      expect(SharedPreferencesStorePlatform.instance,
+          isA<SharedPreferencesMacOS>());
+    });
+
+    test('getAll', () async {
+      store = SharedPreferencesMacOS();
+      testData = InMemorySharedPreferencesStore.withData(kTestValues);
+      expect(await store.getAll(), kTestValues);
+      expect(log.single.method, 'getAll');
+    });
+
+    test('remove', () async {
+      store = SharedPreferencesMacOS();
+      testData = InMemorySharedPreferencesStore.withData(kTestValues);
+      expect(await store.remove('flutter.String'), true);
+      expect(await store.remove('flutter.Bool'), true);
+      expect(await store.remove('flutter.Int'), true);
+      expect(await store.remove('flutter.Double'), true);
+      expect(await testData.getAll(), <String, dynamic>{
+        'flutter.StringList': <String>['foo', 'bar'],
+      });
+
+      expect(log, hasLength(4));
+      for (final MethodCall call in log) {
+        expect(call.method, 'remove');
+      }
+    });
+
+    test('setValue', () async {
+      store = SharedPreferencesMacOS();
+      expect(await testData.getAll(), isEmpty);
+      for (final String key in kTestValues.keys) {
+        final Object value = kTestValues[key]!;
+        expect(await store.setValue(key.split('.').last, key, value), true);
+      }
+      expect(await testData.getAll(), kTestValues);
+
+      expect(log, hasLength(5));
+      expect(log[0].method, 'setString');
+      expect(log[1].method, 'setBool');
+      expect(log[2].method, 'setInt');
+      expect(log[3].method, 'setDouble');
+      expect(log[4].method, 'setStringList');
+    });
+
+    test('clear', () async {
+      store = SharedPreferencesMacOS();
+      testData = InMemorySharedPreferencesStore.withData(kTestValues);
+      expect(await testData.getAll(), isNotEmpty);
+      expect(await store.clear(), true);
+      expect(await testData.getAll(), isEmpty);
+      expect(log.single.method, 'clear');
+    });
+  });
+}
diff --git a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md
index 18ae9d1..6c96681 100644
--- a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md
+++ b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.1.0
+
+* Deprecated `SharedPreferencesWindows.instance` in favor of `SharedPreferencesStorePlatform.instance`.
+
 ## 2.0.4
 
 * Removes dependency on `meta`.
diff --git a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart
index ac13866..92a34fc 100644
--- a/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart
+++ b/packages/shared_preferences/shared_preferences_windows/example/integration_test/shared_preferences_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'dart:async';
-
 import 'package:flutter_test/flutter_test.dart';
 import 'package:integration_test/integration_test.dart';
 import 'package:shared_preferences_windows/shared_preferences_windows.dart';
@@ -28,17 +26,9 @@
       'flutter.List': <String>['baz', 'quox'],
     };
 
-    late SharedPreferencesWindows preferences;
-
-    setUp(() async {
-      preferences = SharedPreferencesWindows.instance;
-    });
-
-    tearDown(() {
-      preferences.clear();
-    });
-
     testWidgets('reading', (WidgetTester _) async {
+      final SharedPreferencesWindows preferences = SharedPreferencesWindows();
+      preferences.clear();
       final Map<String, Object> values = await preferences.getAll();
       expect(values['String'], isNull);
       expect(values['bool'], isNull);
@@ -48,16 +38,16 @@
     });
 
     testWidgets('writing', (WidgetTester _) async {
-      await Future.wait(<Future<bool>>[
-        preferences.setValue(
-            'String', 'String', kTestValues2['flutter.String']!),
-        preferences.setValue('Bool', 'bool', kTestValues2['flutter.bool']!),
-        preferences.setValue('Int', 'int', kTestValues2['flutter.int']!),
-        preferences.setValue(
-            'Double', 'double', kTestValues2['flutter.double']!),
-        preferences.setValue(
-            'StringList', 'List', kTestValues2['flutter.List']!)
-      ]);
+      final SharedPreferencesWindows preferences = SharedPreferencesWindows();
+      preferences.clear();
+      await preferences.setValue(
+          'String', 'String', kTestValues2['flutter.String']!);
+      await preferences.setValue('Bool', 'bool', kTestValues2['flutter.bool']!);
+      await preferences.setValue('Int', 'int', kTestValues2['flutter.int']!);
+      await preferences.setValue(
+          'Double', 'double', kTestValues2['flutter.double']!);
+      await preferences.setValue(
+          'StringList', 'List', kTestValues2['flutter.List']!);
       final Map<String, Object> values = await preferences.getAll();
       expect(values['String'], kTestValues2['flutter.String']);
       expect(values['bool'], kTestValues2['flutter.bool']);
@@ -67,6 +57,8 @@
     });
 
     testWidgets('removing', (WidgetTester _) async {
+      final SharedPreferencesWindows preferences = SharedPreferencesWindows();
+      preferences.clear();
       const String key = 'testKey';
       await preferences.setValue('String', key, kTestValues['flutter.String']!);
       await preferences.setValue('Bool', key, kTestValues['flutter.bool']!);
@@ -80,6 +72,8 @@
     });
 
     testWidgets('clearing', (WidgetTester _) async {
+      final SharedPreferencesWindows preferences = SharedPreferencesWindows();
+      preferences.clear();
       await preferences.setValue(
           'String', 'String', kTestValues['flutter.String']!);
       await preferences.setValue('Bool', 'bool', kTestValues['flutter.bool']!);
diff --git a/packages/shared_preferences/shared_preferences_windows/example/lib/main.dart b/packages/shared_preferences/shared_preferences_windows/example/lib/main.dart
index 423a727..40a9159 100644
--- a/packages/shared_preferences/shared_preferences_windows/example/lib/main.dart
+++ b/packages/shared_preferences/shared_preferences_windows/example/lib/main.dart
@@ -31,7 +31,7 @@
 }
 
 class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
-  final SharedPreferencesWindows prefs = SharedPreferencesWindows.instance;
+  final SharedPreferencesWindows prefs = SharedPreferencesWindows();
   late Future<int> _counter;
 
   Future<void> _incrementCounter() async {
diff --git a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart
index e3551d2..a60d2ed 100644
--- a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart
+++ b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart
@@ -16,14 +16,14 @@
 ///
 /// This class implements the `package:shared_preferences` functionality for Windows.
 class SharedPreferencesWindows extends SharedPreferencesStorePlatform {
-  /// The default instance of [SharedPreferencesWindows] to use.
-  // TODO(egarciad): Remove when the Dart plugin registrant lands on Flutter stable.
-  // https://github.com/flutter/flutter/issues/81421
+  /// Deprecated instance of [SharedPreferencesWindows].
+  /// Use [SharedPreferencesStorePlatform.instance] instead.
+  @Deprecated('Use `SharedPreferencesStorePlatform.instance` instead.')
   static SharedPreferencesWindows instance = SharedPreferencesWindows();
 
   /// Registers the Windows implementation.
   static void registerWith() {
-    SharedPreferencesStorePlatform.instance = instance;
+    SharedPreferencesStorePlatform.instance = SharedPreferencesWindows();
   }
 
   /// File system used to store to disk. Exposed for testing only.
diff --git a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml
index a3938ba..6dcb599 100644
--- a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml
+++ b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml
@@ -2,11 +2,11 @@
 description: Windows implementation of shared_preferences
 repository: https://github.com/flutter/plugins/tree/main/packages/shared_preferences/shared_preferences_windows
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22
-version: 2.0.4
+version: 2.1.0
 
 environment:
   sdk: '>=2.12.0 <3.0.0'
-  flutter: ">=2.0.0"
+  flutter: ">=2.5.0"
 
 flutter:
   plugin:
@@ -27,4 +27,3 @@
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  pedantic: ^1.10.0
