diff --git a/packages/path_provider/path_provider_platform_interface/CHANGELOG.md b/packages/path_provider/path_provider_platform_interface/CHANGELOG.md
index f96711b..051c0e5 100644
--- a/packages/path_provider/path_provider_platform_interface/CHANGELOG.md
+++ b/packages/path_provider/path_provider_platform_interface/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 2.1.0
 
+* Adds getApplicationCachePath() for storing app-specific cache files.
 * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18.
 * Aligns Dart and Flutter SDK constraints.
 
diff --git a/packages/path_provider/path_provider_platform_interface/lib/path_provider_platform_interface.dart b/packages/path_provider/path_provider_platform_interface/lib/path_provider_platform_interface.dart
index 517ac74..682d1ef 100644
--- a/packages/path_provider/path_provider_platform_interface/lib/path_provider_platform_interface.dart
+++ b/packages/path_provider/path_provider_platform_interface/lib/path_provider_platform_interface.dart
@@ -62,6 +62,12 @@
         'getApplicationDocumentsPath() has not been implemented.');
   }
 
+  /// Path to a directory where application specific cache data can be stored.
+  Future<String?> getApplicationCachePath() {
+    throw UnimplementedError(
+        'getApplicationCachePath() has not been implemented.');
+  }
+
   /// Path to a directory where the application may access top level storage.
   /// The current operating system should be determined before issuing this
   /// function call, as this functionality is only available on Android.
diff --git a/packages/path_provider/path_provider_platform_interface/lib/src/method_channel_path_provider.dart b/packages/path_provider/path_provider_platform_interface/lib/src/method_channel_path_provider.dart
index 991be55..02729f8 100644
--- a/packages/path_provider/path_provider_platform_interface/lib/src/method_channel_path_provider.dart
+++ b/packages/path_provider/path_provider_platform_interface/lib/src/method_channel_path_provider.dart
@@ -53,6 +53,11 @@
   }
 
   @override
+  Future<String?> getApplicationCachePath() {
+    return methodChannel.invokeMethod<String>('getApplicationCacheDirectory');
+  }
+
+  @override
   Future<String?> getExternalStoragePath() {
     if (!_platform.isAndroid) {
       throw UnsupportedError('Functionality only available on Android');
diff --git a/packages/path_provider/path_provider_platform_interface/pubspec.yaml b/packages/path_provider/path_provider_platform_interface/pubspec.yaml
index 193bb85..44eb59a 100644
--- a/packages/path_provider/path_provider_platform_interface/pubspec.yaml
+++ b/packages/path_provider/path_provider_platform_interface/pubspec.yaml
@@ -4,7 +4,7 @@
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+path_provider%22
 # NOTE: We strongly prefer non-breaking changes, even at the expense of a
 # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 2.0.6
+version: 2.1.0
 
 environment:
   sdk: ">=2.18.0 <4.0.0"
diff --git a/packages/path_provider/path_provider_platform_interface/test/method_channel_path_provider_test.dart b/packages/path_provider/path_provider_platform_interface/test/method_channel_path_provider_test.dart
index 035e7be..2c68ec5 100644
--- a/packages/path_provider/path_provider_platform_interface/test/method_channel_path_provider_test.dart
+++ b/packages/path_provider/path_provider_platform_interface/test/method_channel_path_provider_test.dart
@@ -14,6 +14,7 @@
   const String kApplicationSupportPath = 'applicationSupportPath';
   const String kLibraryPath = 'libraryPath';
   const String kApplicationDocumentsPath = 'applicationDocumentsPath';
+  const String kApplicationCachePath = 'applicationCachePath';
   const String kExternalCachePaths = 'externalCachePaths';
   const String kExternalStoragePaths = 'externalStoragePaths';
   const String kDownloadsPath = 'downloadsPath';
@@ -39,6 +40,8 @@
             return kLibraryPath;
           case 'getApplicationDocumentsDirectory':
             return kApplicationDocumentsPath;
+          case 'getApplicationCacheDirectory':
+            return kApplicationCachePath;
           case 'getExternalStorageDirectories':
             return <String>[kExternalStoragePaths];
           case 'getExternalCacheDirectories':
@@ -126,6 +129,18 @@
       expect(path, kApplicationDocumentsPath);
     });
 
+    test('getApplicationCachePath succeeds', () async {
+      final String? result =
+          await methodChannelPathProvider.getApplicationCachePath();
+      expect(
+        log,
+        <Matcher>[
+          isMethodCall('getApplicationCacheDirectory', arguments: null)
+        ],
+      );
+      expect(result, kApplicationCachePath);
+    });
+
     test('getExternalCachePaths android succeeds', () async {
       final List<String>? result =
           await methodChannelPathProvider.getExternalCachePaths();
diff --git a/packages/path_provider/path_provider_platform_interface/test/path_provider_platform_interface_test.dart b/packages/path_provider/path_provider_platform_interface/test/path_provider_platform_interface_test.dart
new file mode 100644
index 0000000..9d9bc85
--- /dev/null
+++ b/packages/path_provider/path_provider_platform_interface/test/path_provider_platform_interface_test.dart
@@ -0,0 +1,29 @@
+// 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_test/flutter_test.dart';
+import 'package:path_provider_platform_interface/path_provider_platform_interface.dart';
+import 'package:path_provider_platform_interface/src/method_channel_path_provider.dart';
+
+void main() {
+  TestWidgetsFlutterBinding.ensureInitialized();
+
+  group('$PathProviderPlatform', () {
+    test('$MethodChannelPathProvider is the default instance', () {
+      expect(PathProviderPlatform.instance, isA<MethodChannelPathProvider>());
+    });
+
+    test('getApplicationCachePath throws unimplemented error', () {
+      final ExtendsPathProviderPlatform pathProviderPlatform =
+          ExtendsPathProviderPlatform();
+
+      expect(
+        () => pathProviderPlatform.getApplicationCachePath(),
+        throwsUnimplementedError,
+      );
+    });
+  });
+}
+
+class ExtendsPathProviderPlatform extends PathProviderPlatform {}
