splitio 0.2.0 copy "splitio: ^0.2.0" to clipboard
splitio: ^0.2.0 copied to clipboard

Official plugin for split.io, the platform for controlled rollouts, which serves features to your users via feature flags to manage your complete customer experience.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:splitio/splitio.dart';

/// Replace these with valid values
const String _sdkKey = 'sdk-key';
const String _matchingKey = 'user-id';

void main() {
  runApp(const SplitioExampleApp());
}

/// Splitio example home widget
class SplitioExampleApp extends StatefulWidget {
  /// Default Constructor
  const SplitioExampleApp({Key? key}) : super(key: key);

  @override
  State<SplitioExampleApp> createState() {
    return _SplitioExampleAppState();
  }
}

class _SplitioExampleAppState extends State<SplitioExampleApp> {
  String _featureFlagName = '';
  bool _sdkReady = false;
  bool _sdkReadyFromCache = false;
  late SplitClient _client;

  final Splitio _split = Splitio(_sdkKey, _matchingKey,
      configuration: SplitConfiguration(
        trafficType: "user",
      ));

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

  void _initClients() {
    _client = _split.client(
        matchingKey: _matchingKey,
        onReady: (client) {
          setState(() {
            _sdkReady = true;
          });
        });

    _client.whenReadyFromCache().then((value) {
      setState(() {
        _sdkReadyFromCache = true;
      });
    });

    _client.setAttributes({
      'name': 'splitio',
      'age': 1,
      'available': true,
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('split.io example app'),
        ),
        body: SingleChildScrollView(
            child: Padding(
          padding: const EdgeInsets.all(8),
          child: Center(
              child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Text(
                'SDK ready: $_sdkReady',
                style:
                    const TextStyle(fontWeight: FontWeight.bold, fontSize: 24),
              ),
              Text(
                'SDK ready from cache: $_sdkReadyFromCache',
                style:
                    const TextStyle(fontWeight: FontWeight.bold, fontSize: 24),
              ),
              Padding(
                padding: const EdgeInsets.fromLTRB(32, 8, 32, 8),
                child: TextField(
                  decoration: const InputDecoration(
                      hintText: 'Enter feature flag name'),
                  onChanged: (text) {
                    setState(() {
                      _featureFlagName = text;
                    });
                  },
                ),
              ),
              Visibility(
                visible: _featureFlagName != '',
                child: ElevatedButton(
                    onPressed: performEvaluation,
                    child: Text('Evaluate: $_featureFlagName')),
              ),
              Visibility(
                  visible: _sdkReady || _sdkReadyFromCache,
                  child: Column(
                    children: [
                      ElevatedButton(
                          onPressed: track, child: const Text('Track event')),
                      ElevatedButton(
                          onPressed: getAttributes,
                          child: const Text('Get attributes')),
                      ElevatedButton(
                          onPressed: removeAttribute,
                          child: const Text('Remove age attribute')),
                      ElevatedButton(
                          onPressed: flush, child: const Text('Flush')),
                      ElevatedButton(
                          onPressed: destroy, child: const Text('Destroy')),
                    ],
                  )),
              Visibility(
                  visible: !(_sdkReady || _sdkReadyFromCache),
                  child: const CircularProgressIndicator())
            ],
          )),
        )),
      ),
    );
  }

  void performEvaluation() async {
    _client.getTreatment(_featureFlagName).then(
        (value) => {print('Evaluation value for $_featureFlagName is $value')});
  }

  void track() {
    _client.track("event-type", trafficType: "account", value: 25, properties: {
      "age": 50
    }).then((value) => print('Track result is: ' + value.toString()));
  }

  void getAttributes() async {
    var attributes = await _client.getAttributes();

    print('Attribute values: ' + attributes.toString());
  }

  void removeAttribute() async {
    _client.removeAttribute('age');
  }

  void flush() async {
    _client.flush();
  }

  void destroy() async {
    _client.destroy();
  }

  @override
  void dispose() {
    destroy();
    super.dispose();
  }
}
9
likes
140
points
20.6k
downloads

Publisher

verified publishersplit.io

Weekly Downloads

Official plugin for split.io, the platform for controlled rollouts, which serves features to your users via feature flags to manage your complete customer experience.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

unknown (license)

Dependencies

flutter, splitio_android, splitio_ios, splitio_platform_interface

More

Packages that depend on splitio