Flutter Personal Loans Mobile SDK Integration Guide
Overview
This documentation covers installation, required prerequisites, configuration properties currently surfaced (channel, zone, experience, isDev), and a basic usage example.
Getting Started
You’ll need the correct channel and zone values for your integration. Ask your Partner Manager to provide these values for Flutter Personal Loans.
Use isDev: true while you test. Set isDev: false before releasing to production.
Prerequisites
Flutter 3.0.0 or higher
Dart 3.10.7 or higher
Installation
Add the dependency to your pubspec.yaml:
dependencies:engine_mobile_flutter_sdk:^0.0.3
Then install the dependency:
flutterpubget
Initializing the SDK
Add the following import to any Dart file where you want to use the SDK:
Basic Example
Place the EngineSDK widget anywhere in your widget tree to render the Personal Loan flow.
Properties
Pass these properties to EngineSDK:
channel (String, required)
Identifies your integration in Engine. Provided by your Partner Manager.
Example: 'direct'
zone (String, required)
Identifies the placement or distribution surface for the SDK. Provided by your Partner Manager.
Example: 'marketplace'
experience (String, required)
Selects the product flow variant. Use 'search' for Personal Loans unless instructed otherwise.
Example: 'search'
isDev (bool, optional, default: false)
Enables development/testing mode. Keep false in production releases.
Example: true
User Experience Demo
The SDK renders a complete Personal Loans journey inside your app. It collects any missing user inputs, submits the lead, and then displays offers.
Typical flow:
Landing screen
Loan and personal details form
Review / confirm details
Offer results
Landing Screen
Loan Details
Personal Details
Personal Details
Personal Details
Personal Details
Client Tags for Reporting
The Engine Flutter SDK supports adding your unique Client Tags to track performance of specific campaigns or users. All Client Tag data is attributed to the lead level.
Client Tags can be added by including a clientTags attribute at the top level of the EngineSDK widget, where the value is a Map<String, List<String>>.
We strongly recommend including only one element per list for ease of reporting and attribution—if you want two separate tags, include the second tag under a different key. There is no limit to the number of keys in the clientTags map
Example
Note: Client Tags are only sent when both prefilledData and bearerToken are provided.
Supported Client Tag Keys for Reporting
If you plan for the Engine team to set up reporting (i.e., you do not plan to hit the Analytics API), these are the only keys that are currently fully supported. If a different key is needed, please reach out to your partner manager—we may be able to accommodate, but adding nonstandard keys will increase the time it takes Engine to report Client Tag values back to you and is therefore not recommended.
agentId
campaignId
clientId
deviceid
medium
sourceId
subid
subid1
subid2
subid3
target
trafficsource
userid
See the GET Lead Client Tags endpoint for information on attributing lead analytics to your own client tags, if you decide to hit the Analytics API for reporting.
Prefilling Lead Data
This sections describes how to prefill any user data you already have into your Flutter SDK implementation.
PrefilledData Example
Here is a full code snippet of how you might implement the Flutter SDK into your app, with all prefilledData fields populated:
The prefilledData object should include any fields you want the user to not have to answer themselves, if you already have that info available. You may prefill as many of these fields as desired.
Important: Do not prefill any fields that are empty or otherwise unavailable. If you do not have info for a particular field, omit that field from your prefilledData object.
For example, the following is incorrect:
This is correct:
PrefilledData Type Definitions
The data should follow the class/type schema described below in Dart:
Enums/Accepted Values for Certain Fields
Certain fields must use one of the predefined Dart enum values. Here are those values:
PrefilledData Sanitization
Prefilled data must align with the type definitions above, and any fields with an accepted-value enum must use a valid enum value. If you prefill user data and any type/value is invalid, that attribute will be stripped and the lead will have to enter it again manually.
LeadPrefillData(
firstName: 'Bob',
lastName: 'Dylan',
email: '[email protected]',
address: const Address(),
// Empty Address is prefilled, which prevents the user from submitting complete info
)
LeadPrefillData(
firstName: 'Bob',
lastName: 'Dylan',
email: '[email protected]',
// Address is omitted, forcing the user to input their address in the UI
)
class LeadPrefillData {
final String? firstName;
final String? lastName;
final String? email;
final int? loanAmount; // whole numbers only
final LoanPurpose? purpose; // enum below
final DateTime? dateOfBirth;
final Address? address; // class below
final String? primaryPhone; // leading 1 is fine, no "+" or "-" chars
final String? ssn; // 9 digits with or without hyphens
final CreditRating? creditRating; // enum below
final PropertyStatus? propertyStatus; // enum below
final EducationLevel? educationLevel; // enum below
final EmploymentStatus? employmentStatus; // enum below
final int? annualIncome; // raw integer value (e.g. 20000, 60000)
final bool? phoneConsent;
final bool? hasDirectDeposit;
final String? bankRoutingNumber; // must be exactly 9 digits
final String? bankAccountNumber;
final PayFrequency? payFrequency; // enum below