diff --git a/pkgs/unified_analytics/lib/src/initializer.dart b/pkgs/unified_analytics/lib/src/initializer.dart
index 650388b..1e0ece1 100644
--- a/pkgs/unified_analytics/lib/src/initializer.dart
+++ b/pkgs/unified_analytics/lib/src/initializer.dart
@@ -77,14 +77,14 @@
   required Directory homeDirectory,
   required FileSystem fs,
 }) {
-  var firstRun = false;
+  var firstAnalyticsRun = false;
 
   // When the config file doesn't exist, initialize it with the default tools
   // and the current date
   final configFile = fs.file(
       p.join(homeDirectory.path, kDartToolDirectoryName, kConfigFileName));
   if (!configFile.existsSync()) {
-    firstRun = true;
+    firstAnalyticsRun = true;
     createConfigFile(
       configFile: configFile,
       fs: fs,
@@ -120,5 +120,5 @@
     createDismissedSurveyFile(dismissedSurveyFile: dismissedSurveyFile);
   }
 
-  return firstRun;
+  return firstAnalyticsRun;
 }
diff --git a/pkgs/unified_analytics/test/unified_analytics_test.dart b/pkgs/unified_analytics/test/unified_analytics_test.dart
index 2e78df4..4f369b2 100644
--- a/pkgs/unified_analytics/test/unified_analytics_test.dart
+++ b/pkgs/unified_analytics/test/unified_analytics_test.dart
@@ -1272,4 +1272,81 @@
       expect(parseDartSDKVersion(originalVersion), '3.3.0');
     });
   });
+  
+  otherTest();
 }
+
+
+void otherTest() {
+  late MemoryFileSystem fs;
+  late Directory home;
+
+  const homeDirName = 'home';
+  const toolsMessageVersion = 1;
+  const toolsMessage = 'toolsMessage';
+  const flutterChannel = 'flutterChannel';
+  const flutterVersion = 'flutterVersion';
+  const dartVersion = 'dartVersion';
+  const platform = DevicePlatform.macos;
+
+  setUp(() {
+    // Setup the filesystem with the home directory
+    final fsStyle =
+        io.Platform.isWindows ? FileSystemStyle.windows : FileSystemStyle.posix;
+    fs = MemoryFileSystem.test(style: fsStyle);
+    home = fs.directory(homeDirName);
+
+  });
+
+  test(
+      'running a second tool for the first time does not re-enable analytics',
+      () async {
+    // This is the first analytics instance that will be used to demonstrate
+    // that events will not be sent with the first run of analytics
+    final firstDartToolAnalytics = Analytics.fake(
+      tool: DashTool.dartTool,
+      homeDirectory: home,
+      flutterChannel: flutterChannel,
+      toolsMessageVersion: toolsMessageVersion,
+      toolsMessage: toolsMessage,
+      flutterVersion: flutterVersion,
+      dartVersion: dartVersion,
+      fs: fs,
+      platform: platform,
+    );
+    expect(firstDartToolAnalytics.shouldShowMessage, true);
+    expect(firstDartToolAnalytics.okToSend, isFalse);
+    firstDartToolAnalytics.clientShowedMessage();
+    expect(firstDartToolAnalytics.shouldShowMessage, false);
+
+    final secondDartToolAnalytics = Analytics.fake(
+      tool: DashTool.dartTool,
+      homeDirectory: home,
+      flutterChannel: flutterChannel,
+      toolsMessageVersion: toolsMessageVersion,
+      toolsMessage: toolsMessage,
+      flutterVersion: flutterVersion,
+      dartVersion: dartVersion,
+      fs: fs,
+      platform: platform,
+    );
+    expect(secondDartToolAnalytics.okToSend, isTrue);
+
+    await secondDartToolAnalytics.setTelemetry(false);
+
+    final flutterToolAnalytics = Analytics.fake(
+      tool: DashTool.flutterTool,
+      homeDirectory: home,
+      flutterChannel: flutterChannel,
+      toolsMessageVersion: toolsMessageVersion,
+      toolsMessage: toolsMessage,
+      flutterVersion: flutterVersion,
+      dartVersion: dartVersion,
+      fs: fs,
+      platform: platform,
+    );
+
+    expect(flutterToolAnalytics.shouldShowMessage, isTrue);
+    expect(flutterToolAnalytics.okToSend, isFalse);
+  });
+}
\ No newline at end of file
