Search code examples
flutterdartriverpodflutter-riverpod

Flutter Riverpod: how to pass 3 arguments in family?


i am trying to pass 3 aruguments to family of riverpod. i can only make 2 arugument but i want to make it 3.

here is what i am trying to archieved

final allEmployeeOfVenodrsOfaParticularVenderUser = FutureProvider.family<
    List<AllEmployeeOfVendorParticularVenUser>, String, String>(
  (ref, vendocode) {
    return ref
        .read(apiProvider)
        .getAllEmployeeOfaparticluarVendorUser(vendorCode: vendocode);
  },
);

using two arugument but i want to pass 3 arugment


Solution

  • As per the riverpod documentation you can't pass 3 arguments to the family, But what you can do is pass 2 arguments but the second argument you can pass as Map<String, dynamic> or an Object(Model class).

    You will find both of the examples below

    1)

    final allEmployeeOfVenodrsOfaParticularVenderUser = FutureProvider.family<
        List<AllEmployeeOfVendorParticularVenUser>, Map<String, dynamic>>(
      (ref, vendocode) {
        var arg1 = vendocode['arg1'];
        var arg2 = vendocode['arg2'];
        return ref
            .read(apiProvider)
            .getAllEmployeeOfaparticluarVendorUser(vendorCode: vendocode);
      },
    );
    

    2)

    final allEmployeeOfVenodrsOfaParticularVenderUser = FutureProvider.family<
        List<AllEmployeeOfVendorParticularVenUser>, argsModel >(
      (ref, vendocode) {
        var arg1 = vendocode.arg1;
        var arg2 = vendocode.arg2;
        return ref
            .read(apiProvider)
            .getAllEmployeeOfaparticluarVendorUser(vendorCode: vendocode);
      },
    );
    
    @immutable
    class argsModel extends Equatable {
      final String arg1;
      final String arg2;
    
      const argsModel(this. arg1, this. arg2);
    
      @override
      List<Object?> get props => [arg1, arg2];
    }