diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index cc05f18..d05d23a 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -800,7 +800,9 @@
     var element = parameter.enclosingElement;
     if (element is ConstructorElement) {
       if (Flutter.instance.isWidget(element.enclosingElement)) {
-        var defaultValue = getDefaultStringParameterValue(parameter);
+        // Don't bother with nullability. It won't affect default list values.
+        var defaultValue =
+            getDefaultStringParameterValue(parameter, withNullability: false);
         // TODO(devoncarew): Should we remove the check here? We would then
         // suggest values for param types like closures.
         if (defaultValue != null && defaultValue.text == '[]') {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
index 8063ce5..0568dba 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -15,6 +15,7 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol
     show Element, ElementKind;
+import 'package:meta/meta.dart';
 
 /// The name of the type `dynamic`;
 const DYNAMIC = 'dynamic';
@@ -169,7 +170,8 @@
 }
 
 /// Return a default argument value for the given [parameter].
-DefaultArgument getDefaultStringParameterValue(ParameterElement parameter) {
+DefaultArgument getDefaultStringParameterValue(ParameterElement parameter,
+    {@required bool withNullability}) {
   if (parameter != null) {
     var type = parameter.type;
     if (type is InterfaceType) {
@@ -182,7 +184,8 @@
       }
     } else if (type is FunctionType) {
       var params = type.parameters
-          .map((p) => '${getTypeString(p.type)}${p.name}')
+          .map((p) =>
+              '${getTypeString(p.type, withNullability: withNullability)}${p.name}')
           .join(', ');
       // TODO(devoncarew): Support having this method return text with newlines.
       var text = '($params) {  }';
@@ -209,11 +212,11 @@
   return content.substring(lineStartOffset, notWhitespaceOffset);
 }
 
-String getTypeString(DartType type) {
+String getTypeString(DartType type, {@required bool withNullability}) {
   if (type.isDynamic) {
     return '';
   } else {
-    return type.getDisplayString(withNullability: false) + ' ';
+    return type.getDisplayString(withNullability: withNullability) + ' ';
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
index ee07bf4..40e8f6f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
@@ -78,7 +78,9 @@
           }
         }
       }
-      var defaultValue = getDefaultStringParameterValue(missingParameter);
+      var defaultValue = getDefaultStringParameterValue(missingParameter,
+          withNullability: libraryElement.isNonNullableByDefault &&
+              missingParameter.library.isNonNullableByDefault);
 
       await builder.addDartFileEdit(file, (builder) {
         builder.addInsertion(offset, (builder) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
index fb1e129..2eb4fa8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
@@ -250,6 +250,99 @@
 ''');
   }
 
+  Future<void> test_constructor_single_closure_nnbd() async {
+    createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
+    addMetaPackage();
+    addSource('/home/test/lib/a.dart', r'''
+import 'package:meta/meta.dart';
+
+typedef int Callback(int? a);
+
+class A {
+  A({@required Callback callback}) {}
+}
+''');
+    await resolveTestUnit('''
+import 'package:test/a.dart';
+
+main() {
+  A a = new A();
+  print(a);
+}
+''');
+    await assertHasFix('''
+import 'package:test/a.dart';
+
+main() {
+  A a = new A(callback: (int? a) {  });
+  print(a);
+}
+''');
+  }
+
+  Future<void> test_constructor_single_closure_nnbd_from_legacy() async {
+    createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
+    addMetaPackage();
+    addSource('/home/test/lib/a.dart', r'''
+// @dart = 2.8
+import 'package:meta/meta.dart';
+
+typedef int Callback(int a);
+
+class A {
+  A({@required Callback callback}) {}
+}
+''');
+    await resolveTestUnit('''
+import 'package:test/a.dart';
+
+main() {
+  A a = new A();
+  print(a);
+}
+''');
+    await assertHasFix('''
+import 'package:test/a.dart';
+
+main() {
+  A a = new A(callback: (int a) {  });
+  print(a);
+}
+''');
+  }
+
+  Future<void> test_constructor_single_closure_nnbd_into_legacy() async {
+    createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
+    addMetaPackage();
+    addSource('/home/test/lib/a.dart', r'''
+import 'package:meta/meta.dart';
+
+typedef int Callback(int? a);
+
+class A {
+  A({@required Callback callback}) {}
+}
+''');
+    await resolveTestUnit('''
+// @dart = 2.8
+import 'package:test/a.dart';
+
+main() {
+  A a = new A();
+  print(a);
+}
+''');
+    await assertHasFix('''
+// @dart = 2.8
+import 'package:test/a.dart';
+
+main() {
+  A a = new A(callback: (int a) {  });
+  print(a);
+}
+''');
+  }
+
   Future<void> test_constructor_single_list() async {
     addMetaPackage();
     addSource('/home/test/lib/a.dart', r'''
diff --git a/tests/language/variance/variance_downwards_inference_test.dart b/tests/language/variance/variance_downwards_inference_test.dart
index b6cd329..6e531b1 100644
--- a/tests/language/variance/variance_downwards_inference_test.dart
+++ b/tests/language/variance/variance_downwards_inference_test.dart
@@ -10,7 +10,7 @@
   final T _x;
   A(T x):_x = x;
   T get x => _x;
-  void set x(Object value) {}
+  void set x(Object? value) {}
 }
 
 class B<in T> {
@@ -22,7 +22,7 @@
   final T _x;
   C(T x, S y):_x = x;
   T get x => _x;
-  void set x(Object value) {}
+  void set x(Object? value) {}
   void set y(S _value) {}
 }
 
diff --git a/tools/VERSION b/tools/VERSION
index 52e320d..287371e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 10
 PATCH 0
-PRERELEASE 137
+PRERELEASE 138
 PRERELEASE_PATCH 0
\ No newline at end of file
