RelatedDigital Flutter SDK

Overview

pub package

Table of Contents

Introduction

This library is the official Flutter SDK of Related Digital.

Requirements

  • iOS 11.0 or later
  • Android API level 21 or later

Installation

  • Edit your project's pubspec.yaml file:
dependencies:
    relateddigital_flutter: ^0.4.0
  • Run flutter pub get

  • Import the package:

import 'package:relateddigital_flutter/relateddigital_flutter.dart';

Platform-Integration

Android

  • Add the following lines to the repositories section in project/build.gradle
maven {url 'https://jitpack.io'}
maven {
    url 'http://developer.huawei.com/repo/'
    allowInsecureProtocol(true)
}// skip if your app does not support HMS
  • Add the following lines to the dependencies section in project/build.gradle
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.huawei.agconnect:agcp:1.4.1.300' // skip if your app does not support HMS
  • Add the following lines to the end of app/build.gradle
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.huawei.agconnect' // skip if your app does not support HMS
  • Change your minSdkVersion to 21.

  • Add the following services to your AndroidManifest.xml, within the <application></application> tags.

<service
   android:name="euromsg.com.euromobileandroid.service.EuroFirebaseMessagingService"
   android:exported="false">
   <intent-filter>
       <action android:name="com.google.firebase.MESSAGING_EVENT" />
   </intent-filter>
</service>
<!-- skip if your app does not support HMS  -->
<service
   android:name="euromsg.com.euromobileandroid.service.EuroHuaweiMessagingService"
   android:exported="false">
   <intent-filter>
       <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
   </intent-filter>
</service>
  • Add below meta-data parameters in your AndroidManifest.xml
<meta-data android:name="GoogleAppAlias" android:value="google-app-alias" />
<meta-data android:name="HuaweiAppAlias" android:value="huawei-app-alias" />

<meta-data android:name="VisilabsOrganizationID" android:value="VisilabsOrganizationID" />
<meta-data android:name="VisilabsSiteID" android:value="VisilabsSiteID" />
<meta-data android:name="VisilabsSegmentURL" android:value="http://lgr.visilabs.net" />
<meta-data android:name="VisilabsDataSource" android:value="VisilabsDataSource" />
<meta-data android:name="VisilabsRealTimeURL" android:value="http://rt.visilabs.net" />
<meta-data android:name="VisilabsChannel" android:value="Android" />
<meta-data android:name="VisilabsGeofenceURL" android:value="http://s.visilabs.net/geojson" />
<meta-data android:name="VisilabsGeofenceEnabled" android:value="true" />

<!-- Parameters below are optional -->

<meta-data android:name="VisilabsRequestTimeoutInSeconds" android:value="30" />
<meta-data android:name="VisilabsRESTURL" android:value="VisilabsRESTURL" />
<meta-data android:name="VisilabsEncryptedDataSource" android:value="VisilabsEncryptedDataSource" />
<meta-data android:name="VisilabsTargetURL" android:value="http://s.visilabs.net/json" />
<meta-data android:name="VisilabsActionURL" android:value="http://s.visilabs.net/actjson" />
  • Add google-services.json file to your application’s app directory.

  • If your app supports HMS add agconnect-services.json file to your application’s app directory.

iOS

  • Change the ios platform version to 11.0 or higher in Podfile
platform :ios, '11.0'
  • In your project directory, open the file ios/Runner.xcworkspace with Xcode.

  • Enable Push Notifications and Background Modes->Remote Notifications capabilities.

Xcode Push Capability

  • In Xcode, add a new Notification Service Extension target and name it NotificationService. NotificationServiceExtension allows your iOS application to receive rich notifications with images, videos, and badges. It's also required for Related Digital's analytics features and to store and access notification payloads of the last 30 days.

  • In your podfile, add below section and then run pod install.

target 'NotificationService' do
	use_frameworks!
	pod 'Euromsg'
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
		config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'No'
	end
  end
end
  • Set NotificationService target's deployment target to iOS 11.

  • Replace NotificationService.swift file content with the code below.

import UserNotifications
import Euromsg

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        Euromsg.configure(appAlias: "ios-app-alias", enableLog: true)
        Euromsg.didReceive(bestAttemptContent, withContentHandler: contentHandler)
    }

    override func serviceExtensionTimeWillExpire() {
        guard let contentHandler = self.contentHandler else {
            return;
        }
        guard let bestAttemptContent = self.bestAttemptContent else {
            return;
        }
        contentHandler(bestAttemptContent)
    }
}
  • Enable App Groups Capability for your targets. App Groups allow your app to execute code when a notification is recieved, even if your app is not active. This is required for Related Digital's analytics features and to store and access notification payloads of the last 30 days.

    • In your Main App Target go to Signing & Capabilities > All.
    • Click + Capability if you do not have App Groups in your app yet.
    • Select App Groups.
    • Under App Groups click the + button.
    • Set the App Groups container to be group.BUNDLE_ID.relateddigital where BUNDLE_ID is the same as set in Bundle Identifier.
    • Press OK.
    • In the NotificationServiceExtension Target
    • Go to Signing & Capabilities > All
    • Click + Capability if you do not have App Groups in your app yet.
    • Select App Groups
    • In the NotificationContentExtension Target go to Signing & Capabilities > All`.
    • Click + Capability.
    • Select App Groups
    • Under App Groups click the + button.
    • Set the App Groups container to be group.BUNDLE_ID.relateddigital where BUNDLE_ID is the same as your Main App Target Bundle Identifier. Do Not Include NotificationServiceExtension and NotificationContentExtension.
    • Press OK

App Groups

App Groups Name

  • If you want to use AdvertisingTrackingID with isIDFAEnabled parameter (see Usage below), you need to add this key to your Info.plist file for iOS 14 and above.
<key>NSUserTrackingUsageDescription</key>
<string>We use advertising identifier!</string>

Usage

Initializing

Import the library

import 'package:relateddigital_flutter/relateddigital_flutter.dart';
import 'package:relateddigital_flutter/request_models.dart';
import 'package:relateddigital_flutter/response_models.dart';

Initialize the library

final RelateddigitalFlutter relatedDigitalPlugin = RelateddigitalFlutter();

@override
void initState() {
  super.initState();
  initLib();
}

Future<void> initLib() async {
  var initRequest = RDInitRequestModel(
    appAlias: Platform.isIOS ? 'ios-app-alias' : 'android-app-alias',
    huaweiAppAlias: 'huawei-app-alias', // pass empty String if your app does not support HMS
    androidPushIntent: 'com.test.MainActivity', // Android only
    organizationId: 'ORG_ID',
    siteId: 'SITE_ID',
    dataSource: 'DATA_SOURCE',
    maxGeofenceCount: 20,  // iOS only
    geofenceEnabled: true,
    inAppNotificationsEnabled: true,
    logEnabled: true,
    isIDFAEnabled: true,  // iOS only
  );

  await relatedDigitalPlugin.init(initRequest, _readNotificationCallback);
}

void _readNotificationCallback(dynamic result) {
  print(result);
}

Push Notifications

Requesting Permission & Retrieving Token

Add the lines below to request push notification permission and retrieve token.

IOS

  • Instead of having to prompt the user for permission to send them push notifications, your app can request provisional authorization. In order to enable provisional authorization, you should set isProvisional parameter of requestPermission method to true.
String token = '-';

void _getTokenCallback(RDTokenResponseModel result) {
  if(result != null && result.deviceToken != null && result.deviceToken.isNotEmpty) {
    setState(() {
      token = result.deviceToken;
    });
  }
  else {
    setState(() {
      token = 'Token not retrieved';
    });
  }
}

Future<void> requestPermission() async {
  await relatedDigitalPlugin.requestPermission(_getTokenCallback, isProvisional: true);
}

Carousel Push Notifications

To be able to receive push notifications with carousel, follow the steps below.

IOS

  • In Xcode, add a new Notification Content Extension target and name it NotificationContent.
  • In your podfile, add below section and then run pod install.
target 'NotificationContent' do
	use_frameworks!
	pod 'Euromsg'
end
  • Set NotificationContent target's deployment target to iOS 11.
  • Delete MainInterface.storyboard and NotificationContent.swift files. Then create a swift file named EMNotificationViewController.swift under the NotificationContent folder.
  • Replace EMNotificationViewController.swift file content with the code below.
import UIKit
import UserNotifications
import UserNotificationsUI
import Euromsg

@objc(EMNotificationViewController)
class EMNotificationViewController: UIViewController, UNNotificationContentExtension {
    
    let carouselView = EMNotificationCarousel.initView()
    var completion: ((_ url: URL?, _ bestAttemptContent: UNMutableNotificationContent?) -> Void)?
    
    var notificationRequestIdentifier = ""
    
    func didReceive(_ notification: UNNotification) {
        notificationRequestIdentifier = notification.request.identifier
        Euromsg.configure(appAlias: "relateddigital-flutter-example-ios", launchOptions: nil, enableLog: true)
        carouselView.didReceive(notification)
    }
    func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {
        carouselView.didReceive(response, completionHandler: completion)

    }
    override func loadView() {
        completion = { [weak self] url, bestAttemptContent in
            if let identifier = self?.notificationRequestIdentifier {
                UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [identifier])
                UNUserNotificationCenter.current().getDeliveredNotifications(completionHandler: { notifications in
                    bestAttemptContent?.badge =  NSNumber(value: notifications.count)
                })
            }
            if let url = url {
                if #available(iOSApplicationExtension 12.0, *) {
                    self?.extensionContext?.dismissNotificationContentExtension()
                }
                self?.extensionContext?.open(url)
            } else {
                if #available(iOSApplicationExtension 12.0, *) {
                    self?.extensionContext?.performNotificationDefaultAction()
                }
            }
        }
        carouselView.completion = completion
        carouselView.delegate = self
        self.view = carouselView
    }
}

/**
 Add if you want to track which carousel element has been selected
 */
extension EMNotificationViewController: CarouselDelegate {
    
    func selectedItem(_ element: EMMessage.Element) {
        // Add your work...
        print("Selected element is => \(element)")
    }
    
}
  • In your NotificationContent/Info.plist add below section
<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>UNNotificationExtensionCategory</key>
        <string>carousel</string>
        <key>UNNotificationExtensionDefaultContentHidden</key>
        <false />
        <key>UNNotificationExtensionInitialContentSizeRatio</key>
        <real>1</real>
        <key>UNNotificationExtensionUserInteractionEnabled</key>
        <true />
    </dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.usernotifications.content-extension</string>
    <key>NSExtensionPrincipalClass</key>
    <string>NotificationContent.EMNotificationViewController</string>
</dict>

Set Push Permit

You can only call setNotificationPermission method to enable or disable push notifications for the application.

relatedDigitalPlugin.setNotificationPermission(true);

Get-Payload-List

You can access payload list of last 30 days if you have completed iOS NotificationServiceExtension and App Groups setup. Using getPushMessages method you can access these payloads

PayloadListResponse payloadListResponse = await relatedDigitalPlugin.getPushMessages();

Data Collection

Related Digital uses events to collect data from mobile applications. The developer needs to implement the methods provided by SDK. customEvent is a generic method to track user events. customEvent takes 2 parameters: pageName and properties.

  • pageName : The current page of your application. If your event is not related to a page view, you should pass a value related to the event. If you pass an empty String the event would be considered invalid and discarded.
  • parameters : A collection of key/value pairs related to the event. If your event does not have additional data apart from page name, passing an empty Map acceptable.

Some of the most common events:

Sign Up

String userId = 'userId';
// optional
Map<String, String> properties = {
  'OM.b_sgnp':'1'
};

await relatedDigitalPlugin.signUp(userId, properties: properties);

Login

String userId = 'userId';
// optional
Map<String, String> properties = {
  'OM.b_login':'1'
};

await relatedDigitalPlugin.login(userId, properties: properties);

Page View

Use the following implementation of customEvent method to record the page name the visitor is currently viewing. You may add extra parameters to properties Map or you may leave it empty.

String pageName = 'Page Name';
Map<String, String> parameters = {};
await relatedDigitalPlugin.customEvent(pageName, parameters);

Product View

Use the following implementation of customEvent when the user displays a product in the mobile app.

String pageName = 'Product View';
Map<String, String> parameters = {
  'OM.pv' : productCode, 
  'OM.pn' : productName, 
  'OM.ppr' : productPrice, 
  'OM.pv.1' : productBrand, 
  'OM.inv': inventory // Number of items in stock
};
relatedDigitalPlugin.customEvent(pageName, parameters);

Add to Cart

Use the following implementation of customEvent when the user adds items to the cart or removes.

String pageName = 'Cart';
Map<String, String> parameters = {
  'OM.pbid' : basketID, 
  'OM.pb' : 'Product1 Code;Product2 Code', 
  'OM.pu' : 'Product1 Quantity;Product2 Quantity', 
  'OM.ppr' : 'Product1 Price*Product1 Quantity;Product2 Price*Product2 Quantity'
};
relatedDigitalPlugin.customEvent(pageName, parameters);

Product Purchase

Use the following implementation of customEvent when the user buys one or more items.

String pageName = 'Purchase';
Map<String, String> parameters = {
  'OM.tid' : transactionID, 
  'OM.pp' : 'Product1 Code;Product2 Code', 
  'OM.pu' : 'Product1 Quantity;Product2 Quantity', 
  'OM.ppr' : 'Product1 Price*Product1 Quantity;Product2 Price*Product2 Quantity',
  'OM.exVisitorID' : userId
};
relatedDigitalPlugin.customEvent(pageName, parameters);

Product Category Page View

When the user views a category list page, use the following implementation of customEvent.

String pageName = 'Category View';
Map<String, String> parameters = {
  'OM.clist': '12345',
};
relatedDigitalPlugin.customEvent(pageName, parameters);

In App Search

If the mobile app has a search functionality available, use the following implementation of customEvent.

String pageName = 'In App Search';
Map<String, String> parameters = {
  'OM.OSS': searchKeyword,
  'OM.OSSR': searchResult.length,
};
relatedDigitalPlugin.customEvent(pageName, parameters);

Banner Click

You can monitor banner click data using the following implementation of customEvent.

String pageName = 'Banner Click';
Map<String, String> parameters = {
  'OM.OSB': 'Banner Name/Banner Code',
};
relatedDigitalPlugin.customEvent(pageName, parameters);;

Add To Favorites

When the user adds a product to their favorites, use the following implementation of customEvent.

String pageName = 'Add To Favorites';
Map<String, String> parameters = {
  'OM.pf' : productCode, 
  'OM.pfu' : '1',
};
relatedDigitalPlugin.customEvent(pageName, parameters);

Remove from Favorites

When the user removes a product from their favorites, use the following implementation of customEvent.

String pageName = 'Add To Favorites';
Map<String, String> parameters = {
  'OM.pf' : productCode, 
  'OM.pfu' : '-1',
};
relatedDigitalPlugin.customEvent(pageName, parameters);

Logout

To remove all the user related data from local storage, use the method below.

await relatedDigitalPlugin.logout();

Targeting Actions

In-App Messaging

In-app messages are notifications to your users when they are directly active in your mobile app. To enable In-App Messaging feature you need to set the value of inAppNotificationsEnabled parameter to true when calling init to initialize the SDK.

The existence of a relevant in-app message for an event controlled by after each customEvent call. You can create and customize your in-app messages on https://intelligence.relateddigital.com/#Target/TargetingAction/TAList page of RMC administration panel.

There are 9 types of in-app messages:

Pop-up - Image, Header, Text & Button Mini-icon&text Full Screen-image
full mini full_image
Full Screen-image&button Pop-up - Image, Header, Text & Button Pop-up-Survey
image_button image_text_button smile_rating
Pop-up - NPS with Text & Button Native Alert & Actionsheet NPS with numbers
nps nps_with_numbers nps_with_numbers

Geofencing

IOS

  • In Xcode, add NSLocationAlwaysAndWhenInUseUsageDescription and NSLocationWhenInUseUsageDescription keys to the Info.plist file.
  • In Xcode, enable Background fetch and Location updates background modes.
  • When initializing plugin, set geofenceEnabled to true. Also provide a number for maxGeofenceCount parameter (max. 20 supported).

Android

  • Add below permissions in your AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
  • Add below service and receivers in your AndroidManifest.xml
<service android:name="com.visilabs.android.gps.geofence.GeofenceTransitionsIntentService"
    android:enabled="true"
    android:permission="android.permission.BIND_JOB_SERVICE" />

<receiver android:name="com.visilabs.android.gps.geofence.VisilabsAlarm" android:exported="false"/>

<receiver
    android:name="com.visilabs.android.gps.geofence.GeofenceBroadcastReceiver"
    android:enabled="true"
    android:exported="false"/>

Recommendation

Use getRecommendations method as below to retrieve product recommendations. This method takes mandatory zoneId and productCode parameters with optional filters parameter.

import 'package:relateddigital_flutter/recommendation_filter.dart';

Future<void> getRecommendations() async {
  String zoneId = '6';
  String productCode = '';

  // optional
  Map<String, Object> filter = {
    RDRecommendationFilter.attribute: RDRecommendationFilterAttribute.PRODUCTNAME,
    RDRecommendationFilter.filterType: RDRecommendationFilterType.like,
    RDRecommendationFilter.value: null
  };

  List filters = [
    filter
  ];

  List result = await widget.relatedDigitalPlugin.getRecommendations(zoneId, productCode);
  // List result = await relatedDigitalPlugin.getRecommendations(zoneId, productCode, filters: filters);
  print(result.toString());
}

App Tracking

(Android Only) Use sendTheListOfAppsInstalled method to track installed apps on android.

await widget.relatedDigitalPlugin.sendTheListOfAppsInstalled();

Add one of the sections below to your AndroidManifest.xml in order to use this feature.

Option 1

<manifest package="com.example.myApp">
    <queries>
        <package android:name="com.example.app1" />
        <package android:name="com.example.app2" />
    </queries>
</manifest>

Option 2

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" 
tools:ignore="QueryAllPackagesPermission" />
You might also like...

Flutter版微信SDK.WeChat SDK for flutter.

Fluwx 中文请移步此处 What's Fluwx Fluwx is flutter plugin for WeChatSDK which allows developers to call WeChatSDK native APIs. Join QQ Group now: 892398530。

Jan 3, 2023

Replaces Flutter's bundled Dart SDK with the macOS arm64 version

This script replaces Flutter's bundled Dart SDK with the macOS arm64 version Get

Oct 9, 2022

A flutter plugin to get facebook deep links and log app events using the latest Facebook SDK to include support for iOS 14

Facebook Sdk For Flutter LinkedIn GitHub facebook_sdk_flutter allows you to fetch deep links, deferred deep links and log facebook app events. This wa

Dec 17, 2022

Todo is an Simple Task Management App coded using Dart which is a peogramming language for Flutter SDK(2.5) supports Null Safety 📑🚩

Todo 📑 🚩 📌 Introduction Todo is an Simple Task Management App coded using Dart which is a peogramming language for Flutter SDK(2.5) supports Null S

Nov 5, 2022

A flutter plugin to get android version(SDK INT).

get_sdk_int A new flutter plugin project. Getting Started This project is a starting point for a Flutter plug-in package, a specialized package that i

Dec 28, 2021

A convenience wrapper for building Flutter apps with PDFTron mobile SDK.

A convenience wrapper for building Flutter apps with PDFTron mobile SDK.

About PDFTron Flutter PDFTron's Flutter PDF library brings smooth, flexible, and stand-alone document viewing and editing solutions using Flutter code

Dec 26, 2022

Expandable bottom app bar widget for Flutter SDK

Expandable bottom app bar widget for Flutter SDK

Expandable bottom app bar widget for Flutter SDK

Dec 28, 2022

Widgets for Digital Health - Use the Flutter(tm) SDK to build healthcare apps fast.

Widgets for Digital Health - Use the Flutter(tm) SDK to build healthcare apps fast.

Faiadashu™ FHIRDash — Widgets for Digital Health Mission Build beautiful healthcare apps fast — use the Flutter™ SDK and follow the HL7® FHIR® standar

Dec 19, 2022

A covid statistics app made with Flutter SDK

A covid statistics app made with Flutter SDK

Covid Tracker - A covid-19 statistics app Covid Tracker is an app made with Flutter framework to provide worldwide information related to Covid-19 pan

Dec 1, 2022
Comments
  • "getRecommendations" method return type is wrong

    https://github.com/relateddigital/relateddigital-flutter/blob/cede4a556c1a3a91e18dc1559286717cfed94ab2/lib/relateddigital_flutter.dart#L169

    ...
    I/flutter (14200): type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'
    I/flutter (14200): #0      RelateddigitalFlutter.getRecommendations (package:relateddigital_flutter/relateddigital_flutter.dart:169:12)
    ...
    
    opened by GeceGibi 0
  • Null safety support

    Null safety support

    Need to complete to null safety migration. https://dart.dev/null-safety/migration-guide

    After Dart 3 upgrade, Unsound Null Safety packages will be useless. https://medium.com/dartlang/the-road-to-dart-3-afdd580fbefa

    opened by GeceGibi 1
Releases(0.5.2)
  • 0.5.2(Oct 10, 2022)

  • 0.5.1(Aug 9, 2022)

    • (iOS & Android) New Optional Feature : You can add countdown timer to stories
    • (iOS & Android) New Optional Feature : You can define different links to different spin-to-win slices
    • (iOS & Android) Fix on SpinToWin UI
    • (Android) Fix for multiple transactional notifications (To show them all in the notification center)
    • (Android) Make the SDK compatible with Android API 32
    • (Android) Makes notification priority customizable via EuroMobileManager.setNotificationPriority() method
    • (iOS) The problem of saving the push message when there is no title has been fixed.
    • (iOS) Public getUser method add
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Jun 16, 2022)

  • 0.4.9(Mar 29, 2022)

  • 0.4.8(Mar 11, 2022)

  • 0.4.7(Mar 11, 2022)

    • Removed placeholder from feedback form
    • Added the ability to add title and message background color for 5. template
    • Added redirect feature to application settings when clicking the button for 5. template
    Source code(tar.gz)
    Source code(zip)
  • 0.4.6(Feb 24, 2022)

  • 0.4.5(Feb 11, 2022)

    • Spin to Win started to support custom font type
    • Scratch to Win started to support custom font type
    • Mail Subs Form started to support custom font type
    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Dec 3, 2021)

    • Push notification deliver requests convert to optional
    • requestIDFA method add
    • sendLocationPermission method add
    • Custom font for In-app messages add
    • Custom close button action for In-app messages add
    • Push permission parameter add
    • Product Stat Notifier Targeting Action add
    • Half-Screen In-app message type add
    • getStoryViewAsync method add
    • Add static codes to SpinToWin report request
    • Add remote config feature
    • Add trackRecommendationClick method
    • Add widgetTitle property to VisilabsRecommendationResponse class
    • Improvements for Android 12 compatibility
    • Huawei push notification suport add
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Sep 16, 2021)

    • Push notification deliver requests add.
    • getPushMessages method add to access payloads in the last 30 days
    • Graylog integration for debug purpose
    • SpinToWin result requests add.
    • SpinToWin swipe feature add.
    • OM.appVersion value add to Visilabs requests.
    Source code(tar.gz)
    Source code(zip)
  • 0.2.7(Aug 20, 2021)

  • 0.2.6(Aug 17, 2021)

  • 0.2.5(Jul 28, 2021)

  • 0.2.3(Jul 16, 2021)

  • 0.2.1(Jul 3, 2021)

    inapp notification background overlay ui fixed. pushNotificationHandler callback problem when app is terminated fixed. example project has been improved.

    Source code(tar.gz)
    Source code(zip)
  • 0.1.8(Jun 11, 2021)

  • 0.0.1(Apr 22, 2021)

Owner
Related Digital
All-in-one marketing automation and Customer Data Platform to attract, convert, grow and retain customers
Related Digital
Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter.

Official Flutter packages for Stream Chat Quick Links Register to get an API key for Stream Chat Flutter Chat SDK Tutorial Chat UI Kit Sample apps Thi

Stream 659 Dec 25, 2022
Flutter-Udemy - - A Udemy clone using Flutter sdk and dart.

udemy_clone A new Flutter project. Below are some images : Getting Started This project is a starting point for a Flutter application. A few resources

Priyam Soni 3 Apr 24, 2022
The LoginRadius Flutter SDK will let you integrate LoginRadius' customer identity platform with your Flutter application(s).

TODO: Put a short description of the package here that helps potential users know whether this package might be useful for them. Features TODO: List w

Ahmed Yusuf 4 Feb 3, 2022
Flutter Version Management: A simple cli to manage Flutter SDK versions.

fvm Flutter Version Management: A simple cli to manage Flutter SDK versions. Features: Configure Flutter SDK version per project or globally Ability t

于飞 242 Dec 18, 2022
[Flutter SDK V.2] - Youtube Video is a Flutter application built to demonstrate the use of Modern development tools with best practices implementation like Clean Architecture, Modularization, Dependency Injection, BLoC, etc.

[Flutter SDK V.2] - Youtube Video is a Flutter application built to demonstrate the use of Modern development tools with best practices implementation like Clean Architecture, Modularization, Dependency Injection, BLoC, etc.

R. Rifa Fauzi Komara 17 Jan 2, 2023
This is the UI of Furniture App made using Flutter SDK. The original design was made by someone else in dribble and I tried to create the screens of that UI using Flutter

Furniture App - Responsive Flutter UI Watch it on YouTube Responsive UI Fetch Data From API Custom Loading Indicator Packages we are using: flutter_sv

null 6 Dec 3, 2022
a flutter socket client sdk for ezyfox-server

ezyfox-server-flutter-client flutter client for ezyfox server Architecture Offical documentation https://youngmonkeys.org/ezyfox-flutter-client-sdk/ P

Young Monkeys 44 Dec 13, 2022
Avo Inspector SDK for Flutter

Avo Inspector for Flutter @Hacktoberfest Happy Hacktoberfest! This repo is participating, check out the issues we've prepared for you If you need any

Avo 10 Oct 25, 2022
Flutter guide + SDK. Check Community repository for common information.

freeRASP for Flutter freeRASP for Flutter is a part of security SDK for the app shielding and security monitoring. Learn more about provided features

Talsec 63 Dec 26, 2022
Bug reporting SDK for Flutter apps.

Shake for Flutter Flutter plugin for Shake. How to use Install Shake Add Shake to your pubspec.yaml file. dependencies: shake_flutter: ^15.0.0 I

Shake 13 Oct 18, 2022