diff --git a/lib/src/rules/avoid_redundant_argument_values.dart b/lib/src/rules/avoid_redundant_argument_values.dart
index 0da8062..265becf 100644
--- a/lib/src/rules/avoid_redundant_argument_values.dart
+++ b/lib/src/rules/avoid_redundant_argument_values.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
-import 'package:analyzer/dart/element/element.dart';
 
 import '../analyzer.dart';
 
@@ -62,15 +61,19 @@
 
   _Visitor(this.rule, this.context);
 
-  void check(ArgumentList argumentList, List<ParameterElement> parameters) {
-    if (argumentList.arguments.isEmpty || parameters == null) {
+  void check(ArgumentList argumentList) {
+    final arguments = argumentList.arguments;
+    if (arguments.isEmpty) {
       return;
     }
 
-    for (var arg in argumentList.arguments) {
+    for (var i = arguments.length - 1; i >= 0; --i) {
+      var arg = arguments[i];
       final param = arg.staticParameterElement;
-      if (param == null || param.hasRequired) {
+      if (param == null || param.hasRequired || param.isRequiredNamed) {
         continue;
+      } else if (param.isRequiredPositional) {
+        break;
       }
       final value = param.constantValue;
       if (value != null) {
@@ -82,25 +85,19 @@
           rule.reportLint(arg);
         }
       }
+      if (param.isOptionalPositional) {
+        break;
+      }
     }
   }
 
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
-    check(node.argumentList, node.staticElement?.parameters);
+    check(node.argumentList);
   }
 
   @override
   void visitMethodInvocation(MethodInvocation node) {
-    final element = node.staticInvokeType.element;
-    List<ParameterElement> parameters;
-    if (element is MethodElement) {
-      parameters = element.parameters;
-    }
-    if (element is FunctionElement) {
-      parameters = element.parameters;
-    }
-
-    check(node.argumentList, parameters);
+    check(node.argumentList);
   }
 }
diff --git a/test/rules/avoid_redundant_argument_values.dart b/test/rules/avoid_redundant_argument_values.dart
index 9c215c7..b07942e 100644
--- a/test/rules/avoid_redundant_argument_values.dart
+++ b/test/rules/avoid_redundant_argument_values.dart
@@ -19,6 +19,10 @@
 void g({@required bool valWithDefault = true, bool val}) {}
 
 void gg(int x, [int y = 0]) {}
+void ggg([int a = 1, int b = 2]) {}
+void gggg([int a = 0, int b]) {}
+
+void h([int a, int b = 1]) {}
 
 void main() {
   A(valWithDefault: true); //LINT
@@ -56,4 +60,15 @@
   gg(1, 0); //LINT
   gg(1, 1); //OK
   gg(1); //OK
+
+  ggg(
+      1, // OK the  - first argument is required so that we can provide the second argument.
+      3);
+  ggg(1,
+      2); // LINT
+
+  gggg(0, 1); //OK
+
+  h(0,
+      1); //LINT
 }
