one_time_executor 0.0.1 copy "one_time_executor: ^0.0.1" to clipboard
one_time_executor: ^0.0.1 copied to clipboard

패키지는 사용자가 특정 작업을 앱 라이프사이클 중 한 번만 실행하도록 보장하는 기능을 제공합니다.

OneTimeExecutor #

A Flutter package that ensures specific tasks are executed only once during the app lifecycle.

Features #

  • Guarantees that tasks identified by specific keys run only once
  • Supports various storage adapters
  • Easy to use with a simple API
  • Allows custom storage adapter implementation
  • External storage dependencies are separated for extensibility

Getting Started #

Add the dependency to your pubspec.yaml file:

dependencies:
  one_time_executor: ^0.0.1

Also add the required storage adapter package:

dependencies:
  one_time_executor: ^0.0.1
  # Choose one or more of the adapters below
  one_time_executor_shared_preferences: ^0.0.1
  one_time_executor_hive: ^0.0.1
  one_time_executor_secure_storage: ^0.0.1

Then import the package:

import 'package:one_time_executor/one_time_executor.dart';
// Also import the adapter you want to use
import 'package:one_time_executor_shared_preferences/one_time_executor_shared_preferences.dart';

Usage #

Initialization #

Initialize the OneTimeExecutor when your app starts:

// Using SharedPreferences adapter (requires additional package)
import 'package:one_time_executor_shared_preferences/one_time_executor_shared_preferences.dart';
await OneTimeExecutor.init(SharedPreferencesAdapter());

// Or using Hive adapter (requires additional package)
import 'package:one_time_executor_hive/one_time_executor_hive.dart';
await OneTimeExecutor.init(HiveAdapter());

// Or using SecureStorage adapter (requires additional package)
import 'package:one_time_executor_secure_storage/one_time_executor_secure_storage.dart';
await OneTimeExecutor.init(SecureStorageAdapter());

// Using InMemory adapter for testing (included in the core package)
await OneTimeExecutor.init(InMemoryAdapter());

Defining Tasks to Run Once #

// Ensure a task runs only once with the key "tutorial_shown"
await OneTimeExecutor.run("tutorial_shown", () async {
  // Show tutorial or perform other task
  await showTutorial();
});

// Check if a task has already been executed
bool hasShownOnboarding = await OneTimeExecutor.isExecuted("onboarding_shown");

// Reset the execution state of a task
await OneTimeExecutor.reset("feature_announcement");

Advanced Usage #

Run with specific options:

// Force execution even if the task has been run before by setting forceExecution to true
await OneTimeExecutor.run(
  "daily_notification",
  () async {
    await showNotification();
  },
  forceExecution: true,
);

// Skip if already executed but don't store execution record
await OneTimeExecutor.run(
  "temporary_banner",
  () async {
    await showBanner();
  },
  skipIfExecuted: true,
  forceExecution: true,
);

Custom Adapter Implementation #

You can implement your own storage adapter:

class CustomStorageAdapter implements OneTimeStorageAdapter {
  @override
  Future<void> init() async {
    // Initialization code
  }

  @override
  Future<bool?> read(String key) async {
    // Read implementation
  }

  @override
  Future<void> remove(String key) async {
    // Remove implementation
  }

  @override
  Future<void> write(String key, bool value) async {
    // Write implementation
  }
}

// Initialize with custom adapter
await OneTimeExecutor.init(CustomStorageAdapter());

Storage Adapters #

This package separates dependencies for different storage backends for extensibility. The following separate adapter packages are available:

  • InMemoryAdapter: Included in the core package, mainly for testing
  • SharedPreferencesAdapter: In the one_time_executor_shared_preferences package
  • HiveAdapter: In the one_time_executor_hive package
  • SecureStorageAdapter: In the one_time_executor_secure_storage package

For detailed usage of each adapter package, refer to the README of the respective package.

Examples #

See the /example folder for a complete example.

License #

MIT

1
likes
145
points
64
downloads

Publisher

unverified uploader

Weekly Downloads

패키지는 사용자가 특정 작업을 앱 라이프사이클 중 한 번만 실행하도록 보장하는 기능을 제공합니다.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on one_time_executor