ToggLit SDK (Flutter / Dart)

A lightweight Dart SDK for fetching configuration from ToggLit with fallback support.

Installation

Add the package to your pubspec.yaml:

dependencies:
  togglit_sdk: ^0.0.3

Then run:

flutter pub get

Quick Start

import 'package:togglit_sdk/togglit_sdk.dart';

void main() async {
  final config = await TogglitConfig.getConfig(
    apiKey: "tk_live_xxxxxxx",
    projectId: "togglit-demo",
    env: "production",
    version: 1,
    fallback: {
      "feature_flag": false,
      "api_url": "https://api.fallback.com",
    },
  );

  print(config);
}

API Reference

TogglitConfig.getConfig

Fetches configuration from ToggLit with automatic fallback support and comprehensive error handling.

Parameters

ParameterTypeRequiredDescription
apiKeyStringYour Togglit API key
projectIdStringYour project identifier
envStringEnvironment name (e.g., 'production', 'dev')
versionint?Specific configuration version to fetch
fallbackMap<String, dynamic>?Fallback configuration object (default: )

Returns

Future<Map<String, dynamic>> - The configuration object or fallback if request fails.

Usage Examples

Basic Usage

final config = await TogglitConfig.getConfig(
  apiKey: "tk_live_xxxxxxx",
  projectId: "my-app",
  env: "production",
);

With Fallback Configuration

final config = await TogglitConfig.getConfig(
  apiKey: "tk_live_xxxxxxx",
  projectId: "my-app",
  env: "production",
  fallback: {
    "enableBetaFeatures": false,
    "maintenanceMode": false,
    "apiUrl": "https://fallback.example.com",
    "timeout": 5000,
  },
);

Feature Flags

final config = await TogglitConfig.getConfig(
  apiKey: "tk_live_xxxxxxx",
  projectId: "my-app",
  env: "production",
  fallback: {
    "enableBetaFeatures": false,
    "enableDarkMode": true,
    "showOnboarding": true,
  },
);

// Use feature flags in your app
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: config["enableDarkMode"] ? ThemeData.dark() : ThemeData.light(),
      home: config["showOnboarding"] ? OnboardingScreen() : HomeScreen(),
    );
  }
}

Flutter FutureBuilder Pattern

class ConfiguredApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder<Map<String, dynamic>>(
      future: TogglitConfig.getConfig(
        apiKey: "tk_live_xxxxxxx",
        projectId: "my-app",
        env: "production",
        fallback: {"loading": false},
      ),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        }

        final config = snapshot.data ?? {};
        return MyApp(config: config);
      },
    );
  }
}

Error Handling

The SDK includes comprehensive error handling to ensure your app continues to function even when configuration fetching fails:

  • Network errors: Graceful handling of connectivity issues
  • Authentication errors: Clear error messages for invalid API keys
  • Configuration errors: Validation of project and environment parameters
  • Automatic fallback: Returns fallback configuration when primary fetch fails
final config = await TogglitConfig.getConfig(
  apiKey: "invalid-key",
  projectId: "my-app",
  env: "production",
  fallback: {
    "feature_flag": false,
    "retry_limit": 3,
    "maintenance_mode": false,
  },
);

// Even with invalid API key, config will contain the fallback values
// Your app continues to work with sensible defaults
Made with ❤️ By @gunaa_dev