diff --git a/lib/intl.dart b/lib/intl.dart
index fc52acb..17c3c14 100644
--- a/lib/intl.dart
+++ b/lib/intl.dart
@@ -196,9 +196,12 @@
   ///
   /// Note that null is interpreted as meaning the default locale, so if
   /// [newLocale] is null the default locale will be returned.
-  static String verifiedLocale(
+  ///
+  /// Can return `null` only if verification fails and `onFailure` returns
+  /// null. Otherwise, throws instead.
+  static String? verifiedLocale(
           String? newLocale, bool Function(String) localeExists,
-          {String Function(String)? onFailure}) =>
+          {String? Function(String)? onFailure}) =>
       helpers.verifiedLocale(newLocale, localeExists, onFailure);
 
   /// Return the short version of a locale name, e.g. 'en_US' => 'en'
diff --git a/lib/message_lookup_by_library.dart b/lib/message_lookup_by_library.dart
index 734033c..ce35041 100644
--- a/lib/message_lookup_by_library.dart
+++ b/lib/message_lookup_by_library.dart
@@ -114,7 +114,7 @@
   }
 
   /// Evaluate the translated message and return the translated string.
-  String evaluateMessage(translation, List<dynamic> args) {
+  String? evaluateMessage(translation, List<dynamic> args) {
     return Function.apply(translation, args);
   }
 
diff --git a/lib/src/intl/compact_number_format.dart b/lib/src/intl/compact_number_format.dart
index 03108d3..32c94ab 100644
--- a/lib/src/intl/compact_number_format.dart
+++ b/lib/src/intl/compact_number_format.dart
@@ -188,7 +188,7 @@
       bool isForCurrency = false}) {
     // Initialization copied from `NumberFormat` constructor.
     // TODO(davidmorgan): deduplicate.
-    locale = helpers.verifiedLocale(locale, NumberFormat.localeExists, null);
+    locale = helpers.verifiedLocale(locale, NumberFormat.localeExists, null)!;
     var symbols = numberFormatSymbols[locale] as NumberSymbols;
     var localeZero = symbols.ZERO_DIGIT.codeUnitAt(0);
     var zeroOffset = localeZero - constants.asciiZeroCodeUnit;
diff --git a/lib/src/intl/date_format.dart b/lib/src/intl/date_format.dart
index 8065b4e..4ba4137 100644
--- a/lib/src/intl/date_format.dart
+++ b/lib/src/intl/date_format.dart
@@ -263,7 +263,7 @@
   /// If [locale] does not exist in our set of supported locales then an
   /// [ArgumentError] is thrown.
   DateFormat([String? newPattern, String? locale])
-      : _locale = helpers.verifiedLocale(locale, localeExists, null) {
+      : _locale = helpers.verifiedLocale(locale, localeExists, null)! {
     // TODO(alanknight): It should be possible to specify multiple skeletons eg
     // date, time, timezone all separately. Adding many or named parameters to
     // the constructor seems awkward, especially with the possibility of
diff --git a/lib/src/intl/number_format.dart b/lib/src/intl/number_format.dart
index 811646d..9a3a8f2 100644
--- a/lib/src/intl/number_format.dart
+++ b/lib/src/intl/number_format.dart
@@ -309,7 +309,7 @@
       int? decimalDigits,
       bool lookupSimpleCurrencySymbol = false,
       bool isForCurrency = false}) {
-    locale = helpers.verifiedLocale(locale, localeExists, null);
+    locale = helpers.verifiedLocale(locale, localeExists, null)!;
     var symbols = numberFormatSymbols[locale] as NumberSymbols;
     var localeZero = symbols.ZERO_DIGIT.codeUnitAt(0);
     var zeroOffset = localeZero - constants.asciiZeroCodeUnit;
diff --git a/lib/src/intl_helpers.dart b/lib/src/intl_helpers.dart
index dfc6c63..542c730 100644
--- a/lib/src/intl_helpers.dart
+++ b/lib/src/intl_helpers.dart
@@ -145,8 +145,8 @@
   return '${aLocale[0]}${aLocale[1]}_$region';
 }
 
-String verifiedLocale(String? newLocale, bool Function(String) localeExists,
-    String Function(String)? onFailure) {
+String? verifiedLocale(String? newLocale, bool Function(String) localeExists,
+    String? Function(String)? onFailure) {
 // TODO(alanknight): Previously we kept a single verified locale on the Intl
 // object, but with different verification for different uses, that's more
 // difficult. As a result, we call this more often. Consider keeping
