ZipRequest<T> constructor

ZipRequest<T>({
  1. required ZipRequestFunction<T> request,
  2. String? tag,
  3. 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.

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 closure
  • tag: Optional identifier for named result access
  • params: 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,
});