diff --git a/lib/src/pub_embeddable_command.dart b/lib/src/pub_embeddable_command.dart
index 0403d17..c1fa863 100644
--- a/lib/src/pub_embeddable_command.dart
+++ b/lib/src/pub_embeddable_command.dart
@@ -31,9 +31,15 @@
 class PubAnalytics {
   /// Name of the custom dimension of the dependency kind.
   final String dependencyKindCustomDimensionName;
-  final Analytics analytics;
-  PubAnalytics(this.analytics,
-      {required this.dependencyKindCustomDimensionName});
+
+  final Analytics? Function() _analyticsGetter;
+
+  Analytics? get analytics => _analyticsGetter();
+
+  PubAnalytics(
+    this._analyticsGetter, {
+    required this.dependencyKindCustomDimensionName,
+  });
 }
 
 /// Exposes the `pub` commands as a command to be embedded in another command
diff --git a/lib/src/solver/result.dart b/lib/src/solver/result.dart
index ee5cdc8..8d4e891 100644
--- a/lib/src/solver/result.dart
+++ b/lib/src/solver/result.dart
@@ -129,8 +129,10 @@
   }
 
   /// Send analytics about the package resolution.
-  void sendAnalytics(PubAnalytics analytics) {
-    ArgumentError.checkNotNull(analytics);
+  void sendAnalytics(PubAnalytics pubAnalytics) {
+    ArgumentError.checkNotNull(pubAnalytics);
+    final analytics = pubAnalytics.analytics;
+    if (analytics == null) return;
 
     for (final package in packages) {
       final source = package.source;
@@ -143,21 +145,21 @@
           DependencyType.direct: 'direct',
           DependencyType.none: 'transitive'
         }[_root.dependencyType(package.name)]!;
-        analytics.analytics.sendEvent(
+        analytics.sendEvent(
           'pub-get',
           package.name,
           label: package.version.canonicalizedVersion,
           value: 1,
           parameters: {
             'ni': '1', // We consider a pub-get a non-interactive event.
-            analytics.dependencyKindCustomDimensionName: dependencyKind,
+            pubAnalytics.dependencyKindCustomDimensionName: dependencyKind,
           },
         );
         log.fine(
             'Sending analytics hit for "pub-get" of ${package.name} version ${package.version} as dependency-kind $dependencyKind');
       }
     }
-    analytics.analytics.sendTiming(
+    analytics.sendTiming(
       'resolution',
       resolutionTime.inMilliseconds,
       category: 'pub-get',
diff --git a/tool/test-bin/pub_command_runner.dart b/tool/test-bin/pub_command_runner.dart
index 810c925..52eaf73 100644
--- a/tool/test-bin/pub_command_runner.dart
+++ b/tool/test-bin/pub_command_runner.dart
@@ -14,12 +14,14 @@
 import 'package:pub/src/log.dart' as log;
 import 'package:usage/usage.dart';
 
+final _LoggingAnalytics loggingAnalytics = _LoggingAnalytics();
+
 class Runner extends CommandRunner<int> {
   ArgResults _options;
 
   Runner() : super('pub_command_runner', 'Tests the embeddable pub command.') {
     final analytics = Platform.environment['_PUB_LOG_ANALYTICS'] == 'true'
-        ? PubAnalytics(_LoggingAnalytics(),
+        ? PubAnalytics(() => loggingAnalytics,
             dependencyKindCustomDimensionName: 'cd1')
         : null;
     addCommand(pubCommand(analytics: analytics));
