Migration to 4.X

Overview

This guide will assist developers to move from Flagship 3.X to Flagship 4.X.

The main breaking changes are:

  • Consent Management
  • Visitor Status

See the full change log on Github.

Consent Management

The version 4.X introduces a required consent parameter when creating a Visitor instance:

*VisitorBuilder newVisitor({required String visitorId, required bool hasConsented, Instance instanceType = Instance.SINGLE_INSTANCE})

// 1-  In the version 4.X we added a label for visitorId parameter and introduce required consent parameter.
// 2-  Remove from the builder .hasConsented function.
   var  visitor = Flagship.newVisitor(visitorId: "visitorId", hasConsented: true).withContext({"isVip": true}).build();
import Flagship
// When omitted default consent value was true.
Visitor visitor1 = Flagship.newVisitor("visitor_1").withContext({"isVip": true}).hasConsented(true).isAuthenticated(true).build();

Flagship SDK Status

Status Listener

The withStatusListener renamed to onSdkStatusChanged and the type of parameter from Status to FSSdkStatus_

  • ConfigBuilder onSdkStatusChanged(SdkStatusChanged pSdkStatusChanged)
// Define a custom configuration 
FlagshipConfig customConfig = ConfigBuilder()
        .withMode(Mode.DECISION_API)
        .onSdkStatusChanged((newStatus) {
      // Do things when status change ...
    }).build();
// Define a custom configuration 
FlagshipConfig customConfig = ConfigBuilder()
    .withMode(Mode.DECISION_API)
    .withStatusListener((newStatus) {
      // Do things when status change ...
    }).build();

Get Status

// Get the current flagship sdk
FSSdkStatus currentStatus = Flagship.getStatus();
// Get the current flagship sdk
Status currentStatus = Flagship.getStatus()

Status Values

FSSdkStatusDescription
SDK_NOT_INITIALIZEDThe SDK has not been started
SDK_INITIALIZINGThe SDK still starting, in bucketing mode the sdk needs to download the ressources (bucketing file) before start. if the file exist already this status is skipped
SDK_INITIALIZEDThe SDK is ready to use.
SDK_PANICThe SDK is ready but is running in Panic mode: All visitor's features are disabled except 'fetchFlags' which refreshes this status.

Flag

The defaultValue in 4.X is provided at the reading value method through the flag instance and not as 3.X which is provided at getFlag method.

Get Flag

You can retrieve Flag by using the following functions from the Visitor instance:

  • Flag getFlag<T>(String key)
import 'package:flagship/flagship.dart';
import 'package:flagship/model/flag.dart';

// Create visitor "visitor" and fetch flags
//Get flag for vip feature
Flag flag = visitor.getFlag("displayVipFeature");
import 'package:flagship/flagship.dart';
import 'package:flagship/model/flag.dart';

// Create visitor "visitor" and fetch flags

// Get flag for vip feature with default value 
Flag flag = visitor.getFlag("displayVipFeature", false);

Reading Flag Value

To read the current flag's value, simply call value() method of the Flag object.

  • dynamic value<T>(T? defaultValue, {bool visitorExposed = true})
import 'package:flagship/flagship.dart';
import 'package:flagship/model/flag.dart';

// Create visitor "visitor" and fetch flags

// Ex: get flag for vip feature
Flag flag = currentVisitor.getFlag("displayVipFeature");

// Read the value for flag and provide a default at the same call 
bool shouldDisplayVipFeature = flag.value(false);

import 'package:flagship/flagship.dart';
import 'package:flagship/model/flag.dart';

// Create visitor "visitor" and fetch flags

// Ex: get flag for vip feature
Flag flag = currentVisitor.getFlag("displayVipFeature", false);
/
/ Use this flag value to enable displaying the vip feature
bool shouldDisplayVipFeature = flag.value();