[google_sign_in] Fix Android Java warnings (#3762)

Removes lint-baseline.xml, and fixes all resulting warnings. Also fixes some warnings that only show up in the AS linter as opportunistic fixes.

All anonymous object->lambda conversions were auto-generated by the AS auto-fix for those warnings.

Fixed an edge case bug found during warning fixes; the Dart `getTokens` call has an argument that was (I assume accidentally) declared as `bool? shouldRecoverAuth = true` instead of `bool shouldRecoverAuth = true`, which means that while it defaults to `true` if not passed, it can be explicitly passed `null` and will keep that value. This was being passed directly into the method channel, and on the Java side was extracted as a `boolean` which would throw an exception on null.

Part of https://github.com/flutter/flutter/issues/88011
diff --git a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
index a419d90..4f4f6dd 100644
--- a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
+++ b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 6.1.11
+
+* Fixes Java warnings.
+
 ## 6.1.10
 
 * Sets an explicit Java compatibility version.
diff --git a/packages/google_sign_in/google_sign_in_android/android/build.gradle b/packages/google_sign_in/google_sign_in_android/android/build.gradle
index d6872d5..ae2abf5 100644
--- a/packages/google_sign_in/google_sign_in_android/android/build.gradle
+++ b/packages/google_sign_in/google_sign_in_android/android/build.gradle
@@ -37,7 +37,6 @@
         checkAllWarnings true
         warningsAsErrors true
         disable 'AndroidGradlePluginVersion', 'InvalidPackage', 'GradleDependency'
-        baseline file("lint-baseline.xml")
     }
 
 
diff --git a/packages/google_sign_in/google_sign_in_android/android/lint-baseline.xml b/packages/google_sign_in/google_sign_in_android/android/lint-baseline.xml
deleted file mode 100644
index c59558a..0000000
--- a/packages/google_sign_in/google_sign_in_android/android/lint-baseline.xml
+++ /dev/null
@@ -1,730 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.1" type="baseline" client="gradle" name="AGP (7.0.1)" variant="all" version="7.0.1">
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` member of class `UiThreadExecutor` requires synthetic accessor"
-        errorLine1="    return new UiThreadExecutor();"
-        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/Executors.java"
-            line="30"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `onSignInResult` of class `Delegate` requires synthetic accessor"
-        errorLine1="                onSignInResult(task);"
-        errorLine2="                ~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="415"
-            column="17"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `finishWithSuccess` of class `Delegate` requires synthetic accessor"
-        errorLine1="                    finishWithSuccess(null);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="451"
-            column="21"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `finishWithError` of class `Delegate` requires synthetic accessor"
-        errorLine1="                    finishWithError(ERROR_REASON_STATUS, &quot;Failed to signout.&quot;);"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="453"
-            column="21"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `finishWithSuccess` of class `Delegate` requires synthetic accessor"
-        errorLine1="                    finishWithSuccess(null);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="471"
-            column="21"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `finishWithError` of class `Delegate` requires synthetic accessor"
-        errorLine1="                    finishWithError(ERROR_REASON_STATUS, &quot;Failed to disconnect.&quot;);"
-        errorLine2="                    ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="473"
-            column="21"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `context` of class `Delegate` requires synthetic accessor"
-        errorLine1="              GoogleAuthUtil.clearToken(context, token);"
-        errorLine2="                                        ~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="587"
-            column="41"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `requestedScopes` of class `Delegate` requires synthetic accessor"
-        errorLine1="              String scopesStr = &quot;oauth2:&quot; + Joiner.on(&apos; &apos;).join(requestedScopes);"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="629"
-            column="66"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `context` of class `Delegate` requires synthetic accessor"
-        errorLine1="              return GoogleAuthUtil.getToken(context, account, scopesStr);"
-        errorLine2="                                             ~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="630"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` field `pendingOperation` of class `Delegate` requires synthetic accessor"
-        errorLine1="                  if (shouldRecoverAuth &amp;&amp; pendingOperation == null) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="649"
-            column="44"/>
-    </issue>
-
-    <issue
-        id="SyntheticAccessor"
-        message="Access to `private` method `checkAndSetPendingOperation` of class `Delegate` requires synthetic accessor"
-        errorLine1="                      checkAndSetPendingOperation(METHOD_GET_TOKENS, result, email);"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="658"
-            column="23"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    void run(Future&lt;T> future);"
-        errorLine2="             ~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
-            line="34"
-            column="14"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public &lt;T> void runInBackground(Callable&lt;T> task, final Callback&lt;T> callback) {"
-        errorLine2="                                  ~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
-            line="56"
-            column="35"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public &lt;T> void runInBackground(Callable&lt;T> task, final Callback&lt;T> callback) {"
-        errorLine2="                                                          ~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
-            line="56"
-            column="59"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public &lt;T> ListenableFuture&lt;T> runInBackground(final Callable&lt;T> task) {"
-        errorLine2="             ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
-            line="75"
-            column="14"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public &lt;T> ListenableFuture&lt;T> runInBackground(final Callable&lt;T> task) {"
-        errorLine2="                                                       ~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java"
-            line="75"
-            column="56"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public static Executor uiThreadExecutor() {"
-        errorLine2="                ~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/Executors.java"
-            line="29"
-            column="17"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="65"
-            column="35"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="      BinaryMessenger messenger, Context context, GoogleSignInWrapper googleSignInWrapper) {"
-        errorLine2="      ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="73"
-            column="7"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="      BinaryMessenger messenger, Context context, GoogleSignInWrapper googleSignInWrapper) {"
-        errorLine2="                                 ~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="73"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="      BinaryMessenger messenger, Context context, GoogleSignInWrapper googleSignInWrapper) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="73"
-            column="51"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public void setUpRegistrar(PluginRegistry.Registrar registrar) {"
-        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="81"
-            column="30"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="115"
-            column="36"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) {"
-        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="125"
-            column="54"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public void onMethodCall(MethodCall call, Result result) {"
-        errorLine2="                           ~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="135"
-            column="28"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="  public void onMethodCall(MethodCall call, Result result) {"
-        errorLine2="                                            ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="135"
-            column="45"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        Result result,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="203"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        String signInOption,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="204"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        List&lt;String> requestedScopes,"
-        errorLine2="        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="205"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        String hostedDomain,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="206"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        String clientId,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="207"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        String serverClientId,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="208"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void signInSilently(Result result);"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="215"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void signIn(Result result);"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="221"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void getTokens(final Result result, final String email, final boolean shouldRecoverAuth);"
-        errorLine2="                                ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="230"
-            column="33"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void getTokens(final Result result, final String email, final boolean shouldRecoverAuth);"
-        errorLine2="                                                     ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="230"
-            column="54"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void clearAuthCache(final Result result, final String token);"
-        errorLine2="                                     ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="236"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void clearAuthCache(final Result result, final String token);"
-        errorLine2="                                                          ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="236"
-            column="59"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void signOut(Result result);"
-        errorLine2="                        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="242"
-            column="25"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void disconnect(Result result);"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="245"
-            column="28"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void isSignedIn(Result result);"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="248"
-            column="28"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestScopes(final Result result, final List&lt;String> scopes);"
-        errorLine2="                                    ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="251"
-            column="37"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestScopes(final Result result, final List&lt;String> scopes);"
-        errorLine2="                                                         ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="251"
-            column="58"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Delegate(Context context, GoogleSignInWrapper googleSignInWrapper) {"
-        errorLine2="                    ~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="294"
-            column="21"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Delegate(Context context, GoogleSignInWrapper googleSignInWrapper) {"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="294"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setUpRegistrar(PluginRegistry.Registrar registrar) {"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="300"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void setActivity(Activity activity) {"
-        errorLine2="                            ~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="305"
-            column="29"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Activity getActivity() {"
-        errorLine2="           ~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="310"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        Result result,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="332"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        String signInOption,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="333"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        List&lt;String> requestedScopes,"
-        errorLine2="        ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="334"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        String hostedDomain,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="335"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        String clientId,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="336"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        String serverClientId,"
-        errorLine2="        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="337"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void signInSilently(Result result) {"
-        errorLine2="                               ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="404"
-            column="32"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void signIn(Result result) {"
-        errorLine2="                       ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="426"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void signOut(Result result) {"
-        errorLine2="                        ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="441"
-            column="25"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void disconnect(Result result) {"
-        errorLine2="                           ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="461"
-            column="28"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void isSignedIn(final Result result) {"
-        errorLine2="                                 ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="481"
-            column="34"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestScopes(Result result, List&lt;String> scopes) {"
-        errorLine2="                              ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="487"
-            column="31"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void requestScopes(Result result, List&lt;String> scopes) {"
-        errorLine2="                                             ~~~~~~~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="487"
-            column="46"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void clearAuthCache(final Result result, final String token) {"
-        errorLine2="                                     ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="582"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void clearAuthCache(final Result result, final String token) {"
-        errorLine2="                                                          ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="582"
-            column="59"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        final Result result, final String email, final boolean shouldRecoverAuth) {"
-        errorLine2="              ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="618"
-            column="15"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="        final Result result, final String email, final boolean shouldRecoverAuth) {"
-        errorLine2="                                   ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="618"
-            column="36"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public boolean onActivityResult(int requestCode, int resultCode, Intent data) {"
-        errorLine2="                                                                     ~~~~~~">
-        <location
-            file="src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java"
-            line="678"
-            column="70"/>
-    </issue>
-
-</issues>
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java
index b13ec7e..4fc0afa 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/BackgroundTaskRunner.java
@@ -4,6 +4,7 @@
 
 package io.flutter.plugins.googlesignin;
 
+import androidx.annotation.NonNull;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
 import java.util.concurrent.BlockingQueue;
@@ -31,7 +32,7 @@
      * the future is guaranteed not to block). If the future completed with an exception, then
      * {@code get()} will throw an {@code ExecutionException}.
      */
-    void run(Future<T> future);
+    void run(@NonNull Future<T> future);
   }
 
   private final ThreadPoolExecutor executor;
@@ -53,16 +54,9 @@
    *
    * <p>The callback will be notified on the UI thread.
    */
-  public <T> void runInBackground(Callable<T> task, final Callback<T> callback) {
+  public <T> void runInBackground(@NonNull Callable<T> task, final @NonNull Callback<T> callback) {
     final ListenableFuture<T> future = runInBackground(task);
-    future.addListener(
-        new Runnable() {
-          @Override
-          public void run() {
-            callback.run(future);
-          }
-        },
-        Executors.uiThreadExecutor());
+    future.addListener(() -> callback.run(future), Executors.uiThreadExecutor());
   }
 
   /**
@@ -72,19 +66,16 @@
    * <p>Note: the future will be notified on the background thread. To be notified on the UI thread,
    * use {@link #runInBackground(Callable,Callback)}.
    */
-  public <T> ListenableFuture<T> runInBackground(final Callable<T> task) {
+  public @NonNull <T> ListenableFuture<T> runInBackground(final @NonNull Callable<T> task) {
     final SettableFuture<T> future = SettableFuture.create();
 
     executor.execute(
-        new Runnable() {
-          @Override
-          public void run() {
-            if (!future.isCancelled()) {
-              try {
-                future.set(task.call());
-              } catch (Throwable t) {
-                future.setException(t);
-              }
+        () -> {
+          if (!future.isCancelled()) {
+            try {
+              future.set(task.call());
+            } catch (Throwable t) {
+              future.setException(t);
             }
           }
         });
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/Executors.java b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/Executors.java
index 824c6da..89f5c22 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/Executors.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/Executors.java
@@ -6,6 +6,7 @@
 
 import android.os.Handler;
 import android.os.Looper;
+import androidx.annotation.NonNull;
 import java.util.concurrent.Executor;
 
 /**
@@ -16,7 +17,7 @@
  */
 public final class Executors {
 
-  private static final class UiThreadExecutor implements Executor {
+  static final class UiThreadExecutor implements Executor {
     private static final Handler UI_THREAD = new Handler(Looper.getMainLooper());
 
     @Override
@@ -26,7 +27,7 @@
   }
 
   /** Returns an {@code Executor} that will post commands to the UI thread. */
-  public static Executor uiThreadExecutor() {
+  public static @NonNull Executor uiThreadExecutor() {
     return new UiThreadExecutor();
   }
 
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
index 8963a51..d27cd5e 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
@@ -5,11 +5,13 @@
 package io.flutter.plugins.googlesignin;
 
 import android.accounts.Account;
+import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.util.Log;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import com.google.android.gms.auth.GoogleAuthUtil;
 import com.google.android.gms.auth.UserRecoverableAuthException;
@@ -21,7 +23,6 @@
 import com.google.android.gms.common.api.ApiException;
 import com.google.android.gms.common.api.CommonStatusCodes;
 import com.google.android.gms.common.api.Scope;
-import com.google.android.gms.tasks.OnCompleteListener;
 import com.google.android.gms.tasks.RuntimeExecutionException;
 import com.google.android.gms.tasks.Task;
 import com.google.common.base.Joiner;
@@ -39,9 +40,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
 
 /** Google sign-in plugin for Flutter. */
 public class GoogleSignInPlugin implements MethodCallHandler, FlutterPlugin, ActivityAware {
@@ -62,7 +63,8 @@
   private ActivityPluginBinding activityPluginBinding;
 
   @SuppressWarnings("deprecation")
-  public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
+  public static void registerWith(
+      @NonNull io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
     GoogleSignInPlugin instance = new GoogleSignInPlugin();
     instance.initInstance(registrar.messenger(), registrar.context(), new GoogleSignInWrapper());
     instance.setUpRegistrar(registrar);
@@ -70,7 +72,9 @@
 
   @VisibleForTesting
   public void initInstance(
-      BinaryMessenger messenger, Context context, GoogleSignInWrapper googleSignInWrapper) {
+      @NonNull BinaryMessenger messenger,
+      @NonNull Context context,
+      @NonNull GoogleSignInWrapper googleSignInWrapper) {
     channel = new MethodChannel(messenger, CHANNEL_NAME);
     delegate = new Delegate(context, googleSignInWrapper);
     channel.setMethodCallHandler(this);
@@ -78,7 +82,7 @@
 
   @VisibleForTesting
   @SuppressWarnings("deprecation")
-  public void setUpRegistrar(PluginRegistry.Registrar registrar) {
+  public void setUpRegistrar(@NonNull PluginRegistry.Registrar registrar) {
     delegate.setUpRegistrar(registrar);
   }
 
@@ -112,7 +116,7 @@
   }
 
   @Override
-  public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) {
+  public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) {
     attachToActivity(activityPluginBinding);
   }
 
@@ -122,7 +126,8 @@
   }
 
   @Override
-  public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) {
+  public void onReattachedToActivityForConfigChanges(
+      @NonNull ActivityPluginBinding activityPluginBinding) {
     attachToActivity(activityPluginBinding);
   }
 
@@ -132,15 +137,16 @@
   }
 
   @Override
-  public void onMethodCall(MethodCall call, Result result) {
+  public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
     switch (call.method) {
       case METHOD_INIT:
-        String signInOption = call.argument("signInOption");
-        List<String> requestedScopes = call.argument("scopes");
+        String signInOption = Objects.requireNonNull(call.argument("signInOption"));
+        List<String> requestedScopes = Objects.requireNonNull(call.argument("scopes"));
         String hostedDomain = call.argument("hostedDomain");
         String clientId = call.argument("clientId");
         String serverClientId = call.argument("serverClientId");
-        boolean forceCodeForRefreshToken = call.argument("forceCodeForRefreshToken");
+        boolean forceCodeForRefreshToken =
+            Objects.requireNonNull(call.argument("forceCodeForRefreshToken"));
         delegate.init(
             result,
             signInOption,
@@ -160,8 +166,8 @@
         break;
 
       case METHOD_GET_TOKENS:
-        String email = call.argument("email");
-        boolean shouldRecoverAuth = call.argument("shouldRecoverAuth");
+        String email = Objects.requireNonNull(call.argument("email"));
+        boolean shouldRecoverAuth = Objects.requireNonNull(call.argument("shouldRecoverAuth"));
         delegate.getTokens(result, email, shouldRecoverAuth);
         break;
 
@@ -170,7 +176,7 @@
         break;
 
       case METHOD_CLEAR_AUTH_CACHE:
-        String token = call.argument("token");
+        String token = Objects.requireNonNull(call.argument("token"));
         delegate.clearAuthCache(result, token);
         break;
 
@@ -183,7 +189,7 @@
         break;
 
       case METHOD_REQUEST_SCOPES:
-        List<String> scopes = call.argument("scopes");
+        List<String> scopes = Objects.requireNonNull(call.argument("scopes"));
         delegate.requestScopes(result, scopes);
         break;
 
@@ -199,26 +205,26 @@
    */
   public interface IDelegate {
     /** Initializes this delegate so that it is ready to perform other operations. */
-    public void init(
-        Result result,
-        String signInOption,
-        List<String> requestedScopes,
-        String hostedDomain,
-        String clientId,
-        String serverClientId,
+    void init(
+        @NonNull Result result,
+        @NonNull String signInOption,
+        @NonNull List<String> requestedScopes,
+        @Nullable String hostedDomain,
+        @Nullable String clientId,
+        @Nullable String serverClientId,
         boolean forceCodeForRefreshToken);
 
     /**
      * Returns the account information for the user who is signed in to this app. If no user is
      * signed in, tries to sign the user in without displaying any user interface.
      */
-    public void signInSilently(Result result);
+    void signInSilently(@NonNull Result result);
 
     /**
      * Signs the user in via the sign-in user interface, including the OAuth consent flow if scopes
      * were requested.
      */
-    public void signIn(Result result);
+    void signIn(@NonNull Result result);
 
     /**
      * Gets an OAuth access token with the scopes that were specified during initialization for the
@@ -227,28 +233,29 @@
      * <p>If shouldRecoverAuth is set to true and user needs to recover authentication for method to
      * complete, the method will attempt to recover authentication and rerun method.
      */
-    public void getTokens(final Result result, final String email, final boolean shouldRecoverAuth);
+    void getTokens(
+        final @NonNull Result result, final @NonNull String email, final boolean shouldRecoverAuth);
 
     /**
      * Clears the token from any client cache forcing the next {@link #getTokens} call to fetch a
      * new one.
      */
-    public void clearAuthCache(final Result result, final String token);
+    void clearAuthCache(final @NonNull Result result, final @NonNull String token);
 
     /**
      * Signs the user out. Their credentials may remain valid, meaning they'll be able to silently
      * sign back in.
      */
-    public void signOut(Result result);
+    void signOut(@NonNull Result result);
 
     /** Signs the user out, and revokes their credentials. */
-    public void disconnect(Result result);
+    void disconnect(@NonNull Result result);
 
     /** Checks if there is a signed in user. */
-    public void isSignedIn(Result result);
+    void isSignedIn(@NonNull Result result);
 
     /** Prompts the user to grant an additional Oauth scopes. */
-    public void requestScopes(final Result result, final List<String> scopes);
+    void requestScopes(final @NonNull Result result, final @NonNull List<String> scopes);
   }
 
   /**
@@ -278,12 +285,12 @@
     private static final String DEFAULT_SIGN_IN = "SignInOption.standard";
     private static final String DEFAULT_GAMES_SIGN_IN = "SignInOption.games";
 
-    private final Context context;
+    private final @NonNull Context context;
     // Only set registrar for v1 embedder.
     @SuppressWarnings("deprecation")
     private PluginRegistry.Registrar registrar;
     // Only set activity for v2 embedder. Always access activity from getActivity() method.
-    private Activity activity;
+    private @Nullable Activity activity;
     private final BackgroundTaskRunner backgroundTaskRunner = new BackgroundTaskRunner(1);
     private final GoogleSignInWrapper googleSignInWrapper;
 
@@ -291,23 +298,23 @@
     private List<String> requestedScopes;
     private PendingOperation pendingOperation;
 
-    public Delegate(Context context, GoogleSignInWrapper googleSignInWrapper) {
+    public Delegate(@NonNull Context context, @NonNull GoogleSignInWrapper googleSignInWrapper) {
       this.context = context;
       this.googleSignInWrapper = googleSignInWrapper;
     }
 
     @SuppressWarnings("deprecation")
-    public void setUpRegistrar(PluginRegistry.Registrar registrar) {
+    public void setUpRegistrar(@NonNull PluginRegistry.Registrar registrar) {
       this.registrar = registrar;
       registrar.addActivityResultListener(this);
     }
 
-    public void setActivity(Activity activity) {
+    public void setActivity(@Nullable Activity activity) {
       this.activity = activity;
     }
 
     // Only access activity with this method.
-    public Activity getActivity() {
+    public @Nullable Activity getActivity() {
       return registrar != null ? registrar.activity() : activity;
     }
 
@@ -329,12 +336,12 @@
      */
     @Override
     public void init(
-        Result result,
-        String signInOption,
-        List<String> requestedScopes,
-        String hostedDomain,
-        String clientId,
-        String serverClientId,
+        @NonNull Result result,
+        @NonNull String signInOption,
+        @NonNull List<String> requestedScopes,
+        @Nullable String hostedDomain,
+        @Nullable String clientId,
+        @Nullable String serverClientId,
         boolean forceCodeForRefreshToken) {
       try {
         GoogleSignInOptions.Builder optionsBuilder;
@@ -369,6 +376,7 @@
           // by the google-services Gradle script.
           // TODO(jackson): Perhaps we should provide a mechanism to override this
           // behavior.
+          @SuppressLint("DiscouragedApi")
           int webClientIdIdentifier =
               context
                   .getResources()
@@ -401,20 +409,14 @@
      * signed in, tries to sign the user in without displaying any user interface.
      */
     @Override
-    public void signInSilently(Result result) {
+    public void signInSilently(@NonNull Result result) {
       checkAndSetPendingOperation(METHOD_SIGN_IN_SILENTLY, result);
       Task<GoogleSignInAccount> task = signInClient.silentSignIn();
       if (task.isComplete()) {
         // There's immediate result available.
         onSignInResult(task);
       } else {
-        task.addOnCompleteListener(
-            new OnCompleteListener<GoogleSignInAccount>() {
-              @Override
-              public void onComplete(Task<GoogleSignInAccount> task) {
-                onSignInResult(task);
-              }
-            });
+        task.addOnCompleteListener(this::onSignInResult);
       }
     }
 
@@ -423,7 +425,7 @@
      * were requested.
      */
     @Override
-    public void signIn(Result result) {
+    public void signIn(@NonNull Result result) {
       if (getActivity() == null) {
         throw new IllegalStateException("signIn needs a foreground activity");
       }
@@ -438,53 +440,47 @@
      * sign back in.
      */
     @Override
-    public void signOut(Result result) {
+    public void signOut(@NonNull Result result) {
       checkAndSetPendingOperation(METHOD_SIGN_OUT, result);
 
       signInClient
           .signOut()
           .addOnCompleteListener(
-              new OnCompleteListener<Void>() {
-                @Override
-                public void onComplete(Task<Void> task) {
-                  if (task.isSuccessful()) {
-                    finishWithSuccess(null);
-                  } else {
-                    finishWithError(ERROR_REASON_STATUS, "Failed to signout.");
-                  }
+              task -> {
+                if (task.isSuccessful()) {
+                  finishWithSuccess(null);
+                } else {
+                  finishWithError(ERROR_REASON_STATUS, "Failed to signout.");
                 }
               });
     }
 
     /** Signs the user out, and revokes their credentials. */
     @Override
-    public void disconnect(Result result) {
+    public void disconnect(@NonNull Result result) {
       checkAndSetPendingOperation(METHOD_DISCONNECT, result);
 
       signInClient
           .revokeAccess()
           .addOnCompleteListener(
-              new OnCompleteListener<Void>() {
-                @Override
-                public void onComplete(Task<Void> task) {
-                  if (task.isSuccessful()) {
-                    finishWithSuccess(null);
-                  } else {
-                    finishWithError(ERROR_REASON_STATUS, "Failed to disconnect.");
-                  }
+              task -> {
+                if (task.isSuccessful()) {
+                  finishWithSuccess(null);
+                } else {
+                  finishWithError(ERROR_REASON_STATUS, "Failed to disconnect.");
                 }
               });
     }
 
     /** Checks if there is a signed in user. */
     @Override
-    public void isSignedIn(final Result result) {
+    public void isSignedIn(final @NonNull Result result) {
       boolean value = GoogleSignIn.getLastSignedInAccount(context) != null;
       result.success(value);
     }
 
     @Override
-    public void requestScopes(Result result, List<String> scopes) {
+    public void requestScopes(@NonNull Result result, @NonNull List<String> scopes) {
       checkAndSetPendingOperation(METHOD_REQUEST_SCOPES, result);
 
       GoogleSignInAccount account = googleSignInWrapper.getLastSignedInAccount(context);
@@ -549,7 +545,6 @@
         case GoogleSignInStatusCodes.SIGN_IN_FAILED:
         case CommonStatusCodes.INVALID_ACCOUNT:
         case CommonStatusCodes.INTERNAL_ERROR:
-          return ERROR_REASON_SIGN_IN_FAILED;
         default:
           return ERROR_REASON_SIGN_IN_FAILED;
       }
@@ -579,29 +574,24 @@
 
     /** Clears the token kept in the client side cache. */
     @Override
-    public void clearAuthCache(final Result result, final String token) {
+    public void clearAuthCache(final @NonNull Result result, final @NonNull String token) {
       Callable<Void> clearTokenTask =
-          new Callable<Void>() {
-            @Override
-            public Void call() throws Exception {
-              GoogleAuthUtil.clearToken(context, token);
-              return null;
-            }
+          () -> {
+            GoogleAuthUtil.clearToken(context, token);
+            return null;
           };
 
       backgroundTaskRunner.runInBackground(
           clearTokenTask,
-          new BackgroundTaskRunner.Callback<Void>() {
-            @Override
-            public void run(Future<Void> clearTokenFuture) {
-              try {
-                result.success(clearTokenFuture.get());
-              } catch (ExecutionException e) {
-                result.error(ERROR_REASON_EXCEPTION, e.getCause().getMessage(), null);
-              } catch (InterruptedException e) {
-                result.error(ERROR_REASON_EXCEPTION, e.getMessage(), null);
-                Thread.currentThread().interrupt();
-              }
+          clearTokenFuture -> {
+            try {
+              result.success(clearTokenFuture.get());
+            } catch (ExecutionException e) {
+              @Nullable Throwable cause = e.getCause();
+              result.error(ERROR_REASON_EXCEPTION, cause == null ? null : cause.getMessage(), null);
+            } catch (InterruptedException e) {
+              result.error(ERROR_REASON_EXCEPTION, e.getMessage(), null);
+              Thread.currentThread().interrupt();
             }
           });
     }
@@ -615,20 +605,14 @@
      */
     @Override
     public void getTokens(
-        final Result result, final String email, final boolean shouldRecoverAuth) {
-      if (email == null) {
-        result.error(ERROR_REASON_EXCEPTION, "Email is null", null);
-        return;
-      }
-
+        @NonNull final Result result,
+        @NonNull final String email,
+        final boolean shouldRecoverAuth) {
       Callable<String> getTokenTask =
-          new Callable<String>() {
-            @Override
-            public String call() throws Exception {
-              Account account = new Account(email, "com.google");
-              String scopesStr = "oauth2:" + Joiner.on(' ').join(requestedScopes);
-              return GoogleAuthUtil.getToken(context, account, scopesStr);
-            }
+          () -> {
+            Account account = new Account(email, "com.google");
+            String scopesStr = "oauth2:" + Joiner.on(' ').join(requestedScopes);
+            return GoogleAuthUtil.getToken(context, account, scopesStr);
           };
 
       // Background task runner has a single thread effectively serializing
@@ -636,46 +620,45 @@
       // getToken calls are coming in.
       backgroundTaskRunner.runInBackground(
           getTokenTask,
-          new BackgroundTaskRunner.Callback<String>() {
-            @Override
-            public void run(Future<String> tokenFuture) {
-              try {
-                String token = tokenFuture.get();
-                HashMap<String, String> tokenResult = new HashMap<>();
-                tokenResult.put("accessToken", token);
-                result.success(tokenResult);
-              } catch (ExecutionException e) {
-                if (e.getCause() instanceof UserRecoverableAuthException) {
-                  if (shouldRecoverAuth && pendingOperation == null) {
-                    Activity activity = getActivity();
-                    if (activity == null) {
-                      result.error(
-                          ERROR_USER_RECOVERABLE_AUTH,
-                          "Cannot recover auth because app is not in foreground. "
-                              + e.getLocalizedMessage(),
-                          null);
-                    } else {
-                      checkAndSetPendingOperation(METHOD_GET_TOKENS, result, email);
-                      Intent recoveryIntent =
-                          ((UserRecoverableAuthException) e.getCause()).getIntent();
-                      activity.startActivityForResult(recoveryIntent, REQUEST_CODE_RECOVER_AUTH);
-                    }
+          tokenFuture -> {
+            try {
+              String token = tokenFuture.get();
+              HashMap<String, String> tokenResult = new HashMap<>();
+              tokenResult.put("accessToken", token);
+              result.success(tokenResult);
+            } catch (ExecutionException e) {
+              if (e.getCause() instanceof UserRecoverableAuthException) {
+                if (shouldRecoverAuth && pendingOperation == null) {
+                  Activity activity = getActivity();
+                  if (activity == null) {
+                    result.error(
+                        ERROR_USER_RECOVERABLE_AUTH,
+                        "Cannot recover auth because app is not in foreground. "
+                            + e.getLocalizedMessage(),
+                        null);
                   } else {
-                    result.error(ERROR_USER_RECOVERABLE_AUTH, e.getLocalizedMessage(), null);
+                    checkAndSetPendingOperation(METHOD_GET_TOKENS, result, email);
+                    Intent recoveryIntent =
+                        ((UserRecoverableAuthException) e.getCause()).getIntent();
+                    activity.startActivityForResult(recoveryIntent, REQUEST_CODE_RECOVER_AUTH);
                   }
                 } else {
-                  result.error(ERROR_REASON_EXCEPTION, e.getCause().getMessage(), null);
+                  result.error(ERROR_USER_RECOVERABLE_AUTH, e.getLocalizedMessage(), null);
                 }
-              } catch (InterruptedException e) {
-                result.error(ERROR_REASON_EXCEPTION, e.getMessage(), null);
-                Thread.currentThread().interrupt();
+              } else {
+                @Nullable Throwable cause = e.getCause();
+                result.error(
+                    ERROR_REASON_EXCEPTION, cause == null ? null : cause.getMessage(), null);
               }
+            } catch (InterruptedException e) {
+              result.error(ERROR_REASON_EXCEPTION, e.getMessage(), null);
+              Thread.currentThread().interrupt();
             }
           });
     }
 
     @Override
-    public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
+    public boolean onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
       if (pendingOperation == null) {
         return false;
       }
diff --git a/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java b/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java
index cbd2e40..627ac40 100644
--- a/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java
+++ b/packages/google_sign_in/google_sign_in_android/android/src/test/java/io/flutter/plugins/googlesignin/GoogleSignInTest.java
@@ -75,7 +75,9 @@
 
   @Test
   public void requestScopes_ResultErrorIfAccountIsNull() {
-    MethodCall methodCall = new MethodCall("requestScopes", null);
+    HashMap<String, List<String>> arguments = new HashMap<>();
+    arguments.put("scopes", Collections.singletonList("requestedScope"));
+    MethodCall methodCall = new MethodCall("requestScopes", arguments);
     when(mockGoogleSignIn.getLastSignedInAccount(mockContext)).thenReturn(null);
     plugin.onMethodCall(methodCall, result);
     verify(result).error("sign_in_required", "No account to grant scopes.", null);
diff --git a/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart b/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart
index 5a2ccab..ce651d7 100644
--- a/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart
+++ b/packages/google_sign_in/google_sign_in_android/lib/google_sign_in_android.dart
@@ -70,7 +70,7 @@
     return channel
         .invokeMapMethod<String, dynamic>('getTokens', <String, dynamic>{
       'email': email,
-      'shouldRecoverAuth': shouldRecoverAuth,
+      'shouldRecoverAuth': shouldRecoverAuth ?? true,
     }).then((Map<String, dynamic>? result) => getTokenDataFromMap(result!));
   }
 
diff --git a/packages/google_sign_in/google_sign_in_android/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/pubspec.yaml
index b6e892f..921e7f1 100644
--- a/packages/google_sign_in/google_sign_in_android/pubspec.yaml
+++ b/packages/google_sign_in/google_sign_in_android/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Android implementation of the google_sign_in plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_android
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
-version: 6.1.10
+version: 6.1.11
 
 environment:
   sdk: ">=2.17.0 <4.0.0"
diff --git a/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart b/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart
index b70d2e7..671d768 100644
--- a/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart
+++ b/packages/google_sign_in/google_sign_in_android/test/google_sign_in_android_test.dart
@@ -103,6 +103,17 @@
         }));
   });
 
+  test('getTokens will not pass null for shouldRecoverAuth', () async {
+    await googleSignIn.getTokens(
+        email: 'example@example.com', shouldRecoverAuth: null);
+    expect(
+        log[0],
+        isMethodCall('getTokens', arguments: <String, dynamic>{
+          'email': 'example@example.com',
+          'shouldRecoverAuth': true,
+        }));
+  });
+
   test('Other functions pass through arguments to the channel', () async {
     final Map<void Function(), Matcher> tests = <void Function(), Matcher>{
       () {