configure-global-defaults

star 7

Set global default values for RetryConfig, ThrottleConfig, DebounceConfig, and other bloc_superpowers configurations

marcglasberg By marcglasberg schedule Updated 1/29/2026

name: configure-global-defaults description: Set global default values for RetryConfig, ThrottleConfig, DebounceConfig, and other bloc_superpowers configurations

Configure Global Defaults

This skill sets global default values for bloc_superpowers configuration classes.

What This Skill Does

Configures static defaults properties on configuration classes so that:

  • All mix() calls use your preferred defaults
  • You don't need to specify common settings repeatedly
  • The entire app has consistent behavior

Instructions

Step 1: Identify Desired Defaults

Ask the user what default values they want for:

  • RetryConfig: maxRetries, initialDelay, multiplier, maxDelay
  • ThrottleConfig: duration
  • DebounceConfig: duration
  • FreshConfig: freshFor duration
  • Other configs as needed

Step 2: Configure Defaults at App Startup

Set defaults in main() before runApp():

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

void main() {
  // Configure global defaults
  RetryConfig.defaults = retry(
    maxRetries: 5,
    initialDelay: 200.millis,
    multiplier: 2.0,
    maxDelay: 10.sec,
  );

  runApp(
    Superpowers(
      child: MyApp(),
    ),
  );
}

Step 3: Use Defaults Automatically

Now when you use retry: retry without parameters, it uses your defaults:

void loadData() => mix(
  key: this,
  retry: retry,  // Uses your 5 retries, 200ms delay, etc.
  () async {
    final data = await api.getData();
    emit(data);
  },
);

Available Configuration Classes

RetryConfig

RetryConfig.defaults = retry(
  maxRetries: 5,           // Default: 3
  initialDelay: 200.millis, // Default: 350ms
  multiplier: 2.0,          // Default: 2
  maxDelay: 10.sec,         // Default: 5 seconds
);

ThrottleConfig

ThrottleConfig.defaults = throttle(
  duration: 2.sec,  // Default: 1 second
);

DebounceConfig

DebounceConfig.defaults = debounce(
  duration: 500.millis,  // Default: 300ms
);

FreshConfig

FreshConfig.defaults = fresh(
  freshFor: 30.sec,  // Default: 1 second
);

CheckInternetConfig

CheckInternetConfig.defaults = checkInternet(
  maxRetryDelay: 2.sec,  // Default: 1 second
);

SequentialConfig

SequentialConfig.defaults = sequential(
  maxQueueSize: 50,      // Default: unlimited
  queueTimeout: 30.sec,  // Default: none
);

Complete Setup Example

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

void main() {
  _configureSuperpowersDefaults();

  runApp(
    Superpowers(
      child: MyApp(),
    ),
  );
}

void _configureSuperpowersDefaults() {
  // Retry: 5 attempts with faster initial retry
  RetryConfig.defaults = retry(
    maxRetries: 5,
    initialDelay: 200.millis,
    multiplier: 2.0,
    maxDelay: 10.sec,
  );

  // Throttle: 2 seconds between calls
  ThrottleConfig.defaults = throttle(
    duration: 2.sec,
  );

  // Debounce: 400ms wait for search
  DebounceConfig.defaults = debounce(
    duration: 400.millis,
  );

  // Fresh: Data valid for 30 seconds
  FreshConfig.defaults = fresh(
    freshFor: 30.sec,
  );

  // Sequential: Limit queue size
  SequentialConfig.defaults = sequential(
    maxQueueSize: 100,
    queueTimeout: 60.sec,
  );
}

How Defaults Work

Priority Order (lowest to highest)

  1. Built-in defaults (from bloc_superpowers)
  2. Your global defaults (set via Config.defaults)
  3. MixConfig values (passed via config:)
  4. Explicit parameters (passed directly to mix())

Example

// Built-in default: maxRetries = 3
// Your default: maxRetries = 5
RetryConfig.defaults = retry(maxRetries: 5);

// Uses your default (5)
mix(key: this, retry: retry, () async { ... });

// Overrides to 10
mix(key: this, retry: retry(maxRetries: 10), () async { ... });

When to Change Defaults

Good candidates for custom defaults:

  • Retry count based on your API reliability
  • Throttle duration based on API rate limits
  • Debounce duration based on typical user typing speed
  • Fresh duration based on how often your data changes

Consider your app's needs:

  • Unreliable network? Increase retry count and max delay
  • Strict API rate limits? Increase throttle duration
  • Fast-changing data? Decrease fresh duration
  • Slow typists? Increase debounce duration

Resetting Defaults

To reset to built-in defaults (useful in tests):

void setUp() {
  Superpowers.clear();  // Resets everything including defaults
}

Or reset individual configs:

RetryConfig.defaults = RetryConfig.builtInDefaults;
ThrottleConfig.defaults = ThrottleConfig.builtInDefaults;

User Preferences

Ask the user:

  1. What retry settings? (attempts, delays, based on network reliability)
  2. What throttle duration? (based on API rate limits)
  3. What debounce duration? (based on user interaction speed)
  4. What freshness period? (based on data update frequency)
Install via CLI
npx skills add https://github.com/marcglasberg/bloc_superpowers --skill configure-global-defaults
Repository Details
star Stars 7
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
marcglasberg
marcglasberg Explore all skills →