FunctionCallManager Flutter Plugin
A powerful Flutter utility for managing concurrent function/execution calls with cancellation and queuing strategies.
Overview
FunctionCallManager
helps handle multiple asynchronous calls keyed by unique identifiers and supports 3 execution strategies:
- singleExecution: Ensures only one function executes for a given key at a time. Further requests with the same key are skipped until the active one finishes.
- cancelAll: Cancels all active requests for a key before running the new request.
- forceCall: Allows multiple requests for the same key to be run in parallel or queued per the implementation.
This is useful for debouncing, request cancellation, avoiding duplicate API calls, or queuing calls in Flutter apps.
Features
- Manage simultaneous async calls per unique keys.
- Cancel ongoing requests gracefully.
- Prevent redundant or overlapping request execution.
- Support queuing and forced multiple call processing.
- Uses
CancelableOperation
frompackage:async
for better cancellation handling.
Installation
Add to your pubspec.yaml
:
dependencies: async: ^2.10.0
function_call_manager_plugin: ^0.0.1 # Replace with actual plugin name and version
Run:
flutter pub get
Usage
import 'package:function_call_manager_plugin/function_call_manager_plugin.dart';
final manager = FunctionCallManager();
Future<String> fetchData() async {
// Simulate network delay
await Future.delayed(Duration(seconds: 2));
return "Data fetched";
}
void example() async {
// Run with singleExecution (skip duplicates)
try {
String result = await manager.execute<String>(
function: fetchData,
type: RequestType.singleExecution,
key: 'fetchData',
);
print(result);
} catch(e) {
print('Request skipped: $e');
}
// Run with cancelAll (cancel previous calls before new call)
String result2 = await manager.execute<String>(
function: fetchData,
type: RequestType.cancelAll,
key: 'fetchData',
);
print(result2);
// Run with forceCall (allow multiple simultaneous calls)
String result3 = await manager.execute<String>(
function: fetchData,
type: RequestType.forceCall,
key: 'fetchData',
);
print(result3);
}
API
Future<T> execute<T>({required Future<T> Function() function, RequestType type = RequestType.singleExecution, required String key})
Runs the given async function with the specified execution strategy under the provided key.
License
MIT License
Contributing
Contributions and bug reports are welcome via GitHub.
Thank you for using FunctionCallManager!