Skip to content

Fix firebase analytics type assertion #19

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 26 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ If you need any plugins you can add them too:
Now, in your Dart code, you can import the library as follows:

```dart
import 'package:analytics/client.dart';
import 'package:analytics/analytics.dart';
```

### Permissions
Expand All @@ -101,11 +101,11 @@ In your app's `AndroidManifest.xml` add the below line between the `<manifest>`

### Setting up the client

The package exposes a method called `createClient` which we can use to create the Segment Analytics client. This central client manages all our tracking events. It is recommended you add this as a property on your main app's state class.
Call the `Analytics.init` method to create default segment client. **DO NOT** call `Analytics.internal`, it is for development purposes only.

```dart
const writeKey = 'SEGMENT_API_KEY';
final analytics = createClient(Configuration(writeKey));
Analytics.init(Configuration(writeKey));
```

You must pass at least the `writeKey`. Additional configuration options are listed below:
Expand Down Expand Up @@ -145,7 +145,7 @@ Future track(String event: string, {Map<String, dynamic>? properties});
Example usage:

```dart
analytics.track("View Product", properties: {
Analytics.instance.track("View Product", properties: {
"productId": 123,
"productName": "Striped trousers"
});
Expand All @@ -164,7 +164,7 @@ Future screen(String name: string, {Map<String, dynamic>? properties});
Example usage:

```dart
analytics.screen("ScreenName", properties: {
Analytics.instance.screen("ScreenName", properties: {
"productSlug": "example-product-123",
});
```
Expand All @@ -184,7 +184,7 @@ Future identify({String? userId, UserTraits? userTraits});
Example usage:

```dart
analytics.identify(userId: "testUserId", userTraits: UserTraits(
Analytics.instance.identify(userId: "testUserId", userTraits: UserTraits(
username: "MisterWhiskers",
email: "[email protected]",
custom: {
Expand All @@ -206,7 +206,7 @@ Future group(String groupId, {GroupTraits? groupTraits});
Example usage:

```dart
analytics.group("some-company", groupTraits: GroupTraits(
Analytics.instance.group("some-company", groupTraits: GroupTraits(
name: 'Segment',
custom: {
"region": "UK"
Expand All @@ -227,7 +227,7 @@ Future alias(String newUserId);
Example usage:

```dart
analytics.alias("user-123");
Analytics.instance.alias("user-123");
```

### Reset
Expand All @@ -245,7 +245,7 @@ void reset();
Example usage:

```dart
analytics.reset();
Analytics.instance.reset();
```

### Flush
Expand All @@ -261,21 +261,21 @@ Future flush();
Example usage:

```dart
analytics.flush();
Analytics.instance.flush();
```

### (Advanced) Cleanup

You probably don't need this!

In case you need to reinitialize the client, that is, you've called `createClient` more than once for the same client in your application lifecycle, use this method _on the old client_ to clear any subscriptions and timers first.
In case you need to reinitialize the client, that is, you've called `Analytics.init` more than once for the same client in your application lifecycle, use this method _on the old client_ to clear any subscriptions and timers first.

```dart
var analytics = createClient(Configuration(writeKey));
Analytics.init(Configuration(writeKey));

analytics.cleanup();
Analytics.instance.cleanup();

analytics = createClient(Configuration(writeKey));
Analytics.init(Configuration(writeKey));
```

If you don't do this, the old client instance would still exist and retain the timers, making all your events fire twice.
Expand Down Expand Up @@ -321,7 +321,7 @@ Or if you prefer, you can pass `autoAddSegmentDestination = false` in the option
You can add a plugin at any time through the `add()` method.

```dart
import 'package:analytics/client.dart';
import 'package:analytics/analytics.dart';
import 'package:analytics/event.dart';
import 'package:analytics/state.dart';
import 'package:analytics_plugin_advertising_id/plugin_advertising_id.dart';
Expand All @@ -332,17 +332,17 @@ import 'package:analytics_plugin_firebase/plugin_firebase.dart'
const writeKey = 'SEGMENT_API_KEY';

class _MyAppState extends State<MyApp> {
final analytics = createClient(Configuration(writeKey));
Analytics.init(Configuration(writeKey));

@override
void initState() {
super.initState();
initPlatformState();

analytics
Analytics.instance.
.addPlugin(FirebaseDestination(DefaultFirebaseOptions.currentPlatform));
analytics.addPlugin(PluginAdvertisingId());
analytics.addPlugin(PluginIdfa());
Analytics.instance..addPlugin(PluginAdvertisingId());
Analytics.instance..addPlugin(PluginIdfa());
}
}
```
Expand Down Expand Up @@ -415,7 +415,7 @@ To make use of flush policies you can set them in the configuration of the clien
import 'package:analytics/flush_policies/count_flush_policy.dart';
import 'package:analytics/flush_policies/timer_flush_policy.dart';

final analytics = createClient(Configuration(/*...*/, flushPolicies: [
Analytics.init(Configuration(/*...*/, flushPolicies: [
CountFlushPolicy(10),
TimerFlushPolicy(100000)
]));
Expand All @@ -438,9 +438,9 @@ For example you might want to disable flushes if you detect the user has no netw

```dart
if (isConnected) {
analytics.addFlushPolicy(policiesIfNetworkIsUp);
Analytics.instance.addFlushPolicy(policiesIfNetworkIsUp);
} else {
analytics.removeFlushPolicy(policiesIfNetworkIsUp)
Analytics.instance.removeFlushPolicy(policiesIfNetworkIsUp)
}
```

Expand Down Expand Up @@ -538,16 +538,16 @@ final flushPolicies = [CountFlushPolicy(5), TimerFlushPolicy(500)];
void errorHandler(Exception error) {
if (error is NetworkServerLimited) {
// Remove all flush policies
analytics.removeFlushPolicy(analytics.getFlushPolicies());
Analytics.instance.removeFlushPolicy(Analytics.instance.getFlushPolicies());
// Add less persistent flush policies
analytics.addFlushPolicy([
Analytics.instance.addFlushPolicy([
CountFlushPolicy(100),
TimerFlushPolicy(5000)
]);
}
}

final analytics = createClient(Configuration(writeKey),
Analytics.init(Configuration(writeKey),
errorHandler: errorHandler,
flushPolicies: flushPolicies);
```
Expand All @@ -564,7 +564,7 @@ import 'package:analytics/errors.dart';
try {
distinctId = await mixpanel.getDistinctId();
} catch (e) {
analytics.error(
Analytics.instance.error(
PluginError('Error: Mixpanel error calling getDistinctId', e)
);
}
Expand Down
35 changes: 18 additions & 17 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import 'package:analytics/analytics.dart';
import 'package:analytics/event.dart';
import 'package:analytics/screen_observer.dart';
import 'package:analytics/state.dart';
import 'package:analytics_example/config.dart';
import 'package:analytics_plugin_advertising_id/plugin_advertising_id.dart';
import 'package:analytics_plugin_idfa/plugin_idfa.dart';
import 'package:analytics_example/firebase_options.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:analytics/client.dart';
import 'package:analytics_plugin_firebase/plugin_firebase.dart'
show FirebaseDestination;

Expand All @@ -22,18 +23,18 @@ class MyApp extends MaterialApp {
}

class _MyAppState extends State<MyApp> {
final analytics = createClient(Configuration(writeKey,
debug: true, trackApplicationLifecycleEvents: false));

@override
void initState() {
super.initState();
initPlatformState();

analytics
Analytics.init(Configuration(writeKey,
debug: true, trackApplicationLifecycleEvents: false));

Analytics.instance
.addPlugin(FirebaseDestination(DefaultFirebaseOptions.currentPlatform));
analytics.addPlugin(PluginAdvertisingId());
analytics.addPlugin(PluginIdfa());
Analytics.instance.addPlugin(PluginAdvertisingId());
Analytics.instance.addPlugin(PluginIdfa());
}

// Platform messages are asynchronous, so we initialize in an async method.
Expand Down Expand Up @@ -64,16 +65,16 @@ class _MyAppState extends State<MyApp> {
),
TextButton(
onPressed: () {
analytics
Analytics.instance
.track("Test Event", properties: {"prop1": "value1"});
},
child: const Text('Track Product Viewed'),
),
TextButton(
onPressed: () {
analytics.track('Products Searched',
Analytics.instance.track('Products Searched',
properties: {"query": 'blue roses'});
analytics.track('Product List Viewed', properties: {
Analytics.instance.track('Product List Viewed', properties: {
"list_id": 'hot_deals_1',
"category": 'Deals',
"products": [
Expand All @@ -97,13 +98,13 @@ class _MyAppState extends State<MyApp> {
}
]
});
analytics.track('Promotion Viewed', properties: {
Analytics.instance.track('Promotion Viewed', properties: {
"promotion_id": 'promo_1',
"creative": 'top_banner_2',
"name": '75% store-wide shoe sale',
"position": 'home_banner_top'
});
analytics.track('Product Clicked', properties: {
Analytics.instance.track('Product Clicked', properties: {
"product_id": '507f1f77bcf86cd799439011',
"sku": 'G-32',
"category": 'Games',
Expand All @@ -117,7 +118,7 @@ class _MyAppState extends State<MyApp> {
"url": 'https://www.example.com/product/path',
"image_url": 'https://www.example.com/product/path.jpg'
});
analytics.track('Product Shared', properties: {
Analytics.instance.track('Product Shared', properties: {
"share_via": 'email',
"share_message": 'Hey, check out this item',
"recipient": '[email protected]',
Expand All @@ -131,7 +132,7 @@ class _MyAppState extends State<MyApp> {
"url": 'https://www.example.com/product/path',
"image_url": 'https://www.example.com/product/path.jpg'
});
analytics.track('Cart Shared', properties: {
Analytics.instance.track('Cart Shared', properties: {
"share_via": 'email',
"share_message": 'Hey, check out this item',
"recipient": '[email protected]',
Expand All @@ -146,13 +147,13 @@ class _MyAppState extends State<MyApp> {
),
TextButton(
onPressed: () {
analytics.reset();
Analytics.instance.reset();
},
child: const Text('Reset'),
),
TextButton(
onPressed: () {
analytics.flush();
Analytics.instance.flush();
},
child: const Text('Flush'),
),
Expand All @@ -173,7 +174,7 @@ class _MyAppState extends State<MyApp> {
),
TextButton(
onPressed: () {
analytics.identify(
Analytics.instance.identify(
userId: "testUserId",
userTraits: UserTraits(name: "Test User"));
},
Expand Down
Loading