Skip to content

Commit

Permalink
Add analytics token support
Browse files Browse the repository at this point in the history
  • Loading branch information
adimiz1 committed Oct 22, 2023
1 parent 1f07fc9 commit 5a15dbf
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 11 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ The `Cloudinary` class is the main entry point for using the library. Your `clou
Here’s an example of setting configuration parameters in your Flutter application:

```dart
CloudinaryContext.cloudinary = Cloudinary.fromCloudName(cloudName: 'demo');
Cloudinary cloudinary = CloudinaryObject.fromCloudName(cloudName: 'demo');
```

### Transform and Optimize Assets
Expand Down
9 changes: 5 additions & 4 deletions example/main.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import 'package:cloudinary_url_gen/cloudinary.dart';
import 'package:cloudinary_flutter/image/cld_image.dart';
import 'package:cloudinary_flutter/cloudinary_context.dart';
import 'package:cloudinary_flutter/cloudinary_object.dart';
import 'package:flutter/material.dart';

late CloudinaryObject cloudinary;

void main() {
CloudinaryContext.cloudinary =
Cloudinary.fromCloudName(cloudName: "<your_cloud_name>");
cloudinary = CloudinaryObject.fromCloudName(cloudName: '<your_cloud_name>');
runApp(App());
}

Expand All @@ -19,6 +19,7 @@ class App extends StatelessWidget {
width: 200,
height: 140,
child: CldImageWidget(
cloudinary: cloudinary,
publicId: "dog",
),
),
Expand Down
2 changes: 2 additions & 0 deletions lib/cloudinary_context.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import 'package:cloudinary_flutter/image/cld_image.dart';
import 'package:cloudinary_url_gen/cloudinary.dart';

@Deprecated('Please use CloudinaryObject instead')

/// Helper class to help users define the Cloudinary object to be used with their [CldImageWidget]
class CloudinaryContext {
static Cloudinary cloudinary = Cloudinary();
Expand Down
22 changes: 22 additions & 0 deletions lib/cloudinary_object.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import 'dart:io';

import 'package:cloudinary_url_gen/analytics.dart';
import 'package:cloudinary_url_gen/cloudinary.dart';

/// Helper class to help users define the Cloudinary object to be used with their widgets
class CloudinaryObject extends Cloudinary {
CloudinaryObject.fromCloudName({required String cloudName})
: super.fromCloudName(cloudName: cloudName) {
var techVersion = Platform.version.split(" ")[0];
Analytics analytics =
Analytics.fromParameters('O', sdkVersion, techVersion, _getOsVersion());
super.setAnalytics(analytics);
}

String _getOsVersion() {
if (Platform.isAndroid || Platform.isIOS) {
return Platform.operatingSystemVersion;
}
return 'AA';
}
}
5 changes: 4 additions & 1 deletion lib/image/cld_image.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:cloudinary_url_gen/asset/cld_image.dart';
import 'package:cloudinary_url_gen/cloudinary.dart';
import 'package:cloudinary_url_gen/transformation/transformation.dart';
import 'package:cloudinary_flutter/image/no_disk_cache_manager.dart';
import 'package:flutter/cupertino.dart';
Expand All @@ -19,6 +20,7 @@ class CldImageWidget extends CachedNetworkImage {
{required String publicId,
super.key,
this.configuration,
Cloudinary? cloudinary,
String? version,
String? extension,
String? urlSuffix,
Expand Down Expand Up @@ -63,7 +65,8 @@ class CldImageWidget extends CachedNetworkImage {
fit: fit,
repeat: repeat,
matchTextDirection: matchTextDirection) {
cldImage = CloudinaryContext.cloudinary.image(publicId);
cloudinary ??= CloudinaryContext.cloudinary;
cldImage = cloudinary.image(publicId);
if (version != null) {
cldImage.version(version);
}
Expand Down
29 changes: 24 additions & 5 deletions test/cld_image_test.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
import 'dart:io';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:cloudinary_url_gen/cloudinary.dart';
import 'package:cloudinary_url_gen/analytics.dart';
import 'package:cloudinary_url_gen/transformation/resize/resize.dart';
import 'package:cloudinary_url_gen/transformation/transformation.dart';
import 'package:cloudinary_flutter/cloudinary_context.dart';
import 'package:cloudinary_flutter/cloudinary_object.dart';
import 'package:cloudinary_flutter/image/cld_image.dart';
import 'package:cloudinary_flutter/image/cld_image_widget_configuration.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
CloudinaryContext.cloudinary = Cloudinary.fromCloudName(cloudName: 'demo');
CloudinaryContext.cloudinary.config.urlConfig.analytics = false;
CloudinaryObject cloudinary =
CloudinaryObject.fromCloudName(cloudName: 'demo');
cloudinary.config.urlConfig.analytics = false;
setUpAll(() => HttpOverrides.global = null);

testWidgets('Test CldImageWidget has valid url', (widgetTester) async {
var widget = CldImageWidget(publicId: 'dog', width: 500, height: 100);
var widget = CldImageWidget(
cloudinary: cloudinary, publicId: 'dog', width: 500, height: 100);
await widgetTester.pumpWidget(widget);

final imageFinder = find.image(CachedNetworkImageProvider(
Expand All @@ -25,6 +27,7 @@ void main() {
testWidgets('Test CldImageWidget with version has valid url',
(widgetTester) async {
await widgetTester.pumpWidget(CldImageWidget(
cloudinary: cloudinary,
publicId: ('sample'),
version: "1",
));
Expand All @@ -35,6 +38,7 @@ void main() {
testWidgets('Test CldImageWidget with version and urlsuffix has valid url',
(widgetTester) async {
await widgetTester.pumpWidget(CldImageWidget(
cloudinary: cloudinary,
publicId: ('sample'),
version: "1",
urlSuffix: 'test',
Expand All @@ -47,6 +51,7 @@ void main() {
'Test CldImageWidget with version and transformation has valid url',
(widgetTester) async {
await widgetTester.pumpWidget(CldImageWidget(
cloudinary: cloudinary,
publicId: ('sample'),
version: "1",
urlSuffix: 'test',
Expand All @@ -58,6 +63,7 @@ void main() {
});
testWidgets('Test CldImageWidget without cache', (widgetTester) async {
var widget = CldImageWidget(
cloudinary: cloudinary,
publicId: 'dog',
configuration: CldImageWidgetConfiguration(cache: false),
width: 500,
Expand All @@ -68,4 +74,17 @@ void main() {
'https://res.cloudinary.com/demo/image/upload/dog'));
expect(imageFinder, findsOneWidget);
});

testWidgets('Test CldImageWidget has valid url with analytics',
(widgetTester) async {
cloudinary.analytics = Analytics.fromParameters("O", "1.0.0", "39.1", "");
cloudinary.config.urlConfig.analytics = true;
var widget = CldImageWidget(
cloudinary: cloudinary, publicId: 'dog', width: 500, height: 100);
await widgetTester.pumpWidget(widget);

final imageFinder = find.image(CachedNetworkImageProvider(
'https://res.cloudinary.com/demo/image/upload/dog?_a=CAOAABCLZAA0'));
expect(imageFinder, findsOneWidget);
});
}

0 comments on commit 5a15dbf

Please sign in to comment.