ZipRequest<T> constructor
ZipRequest<T> ({
- required ZipRequestFunction<
T> request, - String? tag,
- Map<
Symbol, dynamic> ? params,
Creates a ZipRequest with explicit type parameter T.
This is the primary constructor for creating concurrent request wrappers.
The type parameter T must match the result type of the wrapped method.
Pattern 1: Closure Wrapper (Recommended)
Provides full control and type safety:
ZipRequest<UserInfo>(
request: ({success, failure, completed}) {
getUserAsync(
userId: '123',
phone: '13800138000',
success: success,
failure: failure,
completed: completed,
);
},
tag: 'user',
)
Pattern 2: Method Reference with Params
Uses Symbol keys for parameters:
ZipRequest<UserInfo>(
request: getUserAsync,
params: {#userId: '123', #phone: '13800138000'},
tag: 'user',
)
Adding Custom Logic (Logging, Analytics, etc.)
To add logging or other side effects, wrap the callbacks in the request closure:
ZipRequest<UserInfo>(
request: ({success, failure, completed}) {
getUserAsync(
userId: '123',
success: (data, source) {
// Custom logic: logging, analytics, etc.
print('User loaded from $source');
analytics.track('user_loaded');
// Forward to zipRequest's internal handler
success?.call(data, source);
},
failure: (error) {
print('Failed: $error');
analytics.trackError(error);
failure?.call(error);
},
completed: () {
print('Request completed');
completed?.call();
},
);
},
tag: 'user',
)
Parameters:
request: The callback-based method or closuretag: Optional identifier for named result accessparams: Optional parameters (for method reference pattern)
See also:
- withParams for simplified parameter passing
- from for type inference from method signature
Implementation
ZipRequest({
required this.request,
this.tag,
this.params,
});