| // Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file |
| // for details. 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:unified_analytics/unified_analytics.dart'; |
| |
| // Globally instantiate the analytics class at the entry |
| // point of the tool |
| // |
| // Development constructor used here so we don't push |
| // to production when running |
| final Analytics analytics = Analytics.development( |
| tool: DashTool.flutterTool, |
| flutterChannel: 'ey-test-channel', |
| flutterVersion: 'Flutter 3.6.0-7.0.pre.47', |
| clientIde: 'VSCode', |
| dartVersion: 'Dart 2.19.0', |
| // This can be set to true while testing to validate |
| // against GA4 usage limitations (character limits, etc.) |
| enableAsserts: false, |
| enabledFeatures: 'feature-1,feature-2', |
| ); |
| |
| // Timing a process and sending the event |
| void main() async { |
| final start = DateTime.now(); |
| |
| // Each client using this package will have it's own |
| // method to show the message but the below is a trivial |
| // example of how to properly initialize the analytics instance |
| if (analytics.shouldShowMessage) { |
| // Simulates displaying the message, this will vary from |
| // client to client; ie. stdout, popup in IDE, etc. |
| print(analytics.getConsentMessage); |
| |
| // After receiving confirmation that the message has been |
| // displayed, invoking the below method will successfully |
| // onboard the tool into the config file and allow for |
| // events to be sent on the next creation of the analytics |
| // instance |
| // |
| // The rest of the example below assumes that the tool has |
| // already been onboarded in a previous run |
| analytics.clientShowedMessage(); |
| } |
| |
| print('Current user ${analytics.clientId} ' |
| 'is opted in: ${analytics.telemetryEnabled}'); |
| |
| // Example of long running process |
| await Future<void>.delayed(const Duration(milliseconds: 100)); |
| |
| // Calculate the metric to send |
| final runTime = DateTime.now().difference(start).inMilliseconds; |
| |
| // Create the event that will be sent for the hot reload time |
| // as an example |
| final hotReloadEvent = Event.hotReloadTime(timeMs: runTime); |
| |
| // Make a call to the [Analytics] api to send the data |
| analytics.send(hotReloadEvent); |
| |
| // Close the client connection on exit |
| await analytics.close(); |
| } |