diff --git a/.github/workflows/google_api_availability_android.yaml b/.github/workflows/google_api_availability_android.yaml
index 98e5f89..3471c88 100644
--- a/.github/workflows/google_api_availability_android.yaml
+++ b/.github/workflows/google_api_availability_android.yaml
@@ -23,7 +23,7 @@ jobs:
env:
source-directory: ./google_api_availability_android
- example-directory: ./google_api_availability/example
+ example-directory: ./google_api_availability_android/example
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
diff --git a/google_api_availability_android/CHANGELOG.md b/google_api_availability_android/CHANGELOG.md
index 3af33e5..4cdab60 100644
--- a/google_api_availability_android/CHANGELOG.md
+++ b/google_api_availability_android/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 1.1.0
+
+ * Fixes compile errors for Flutter 3.29.0 (and above)
+ * Updates compileSDKversion to 35
+
## 1.0.1
* Adds support for the namespace property to support Android Gradle Plugin (AGP) 8.
diff --git a/google_api_availability_android/android/build.gradle b/google_api_availability_android/android/build.gradle
index 5b6a3e7..8cb6142 100644
--- a/google_api_availability_android/android/build.gradle
+++ b/google_api_availability_android/android/build.gradle
@@ -1,17 +1,6 @@
group 'com.baseflow.googleapiavailability'
version '1.0-SNAPSHOT'
-buildscript {
- repositories {
- google()
- mavenCentral()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:4.1.0'
- }
-}
-
rootProject.allprojects {
repositories {
google()
@@ -27,7 +16,7 @@ android {
namespace 'com.baseflow.googleapiavailability'
}
- compileSdkVersion 31
+ compileSdkVersion 35
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
diff --git a/google_api_availability_android/android/gradle/wrapper/gradle-wrapper.properties b/google_api_availability_android/android/gradle/wrapper/gradle-wrapper.properties
index 69a9715..59bc51a 100644
--- a/google_api_availability_android/android/gradle/wrapper/gradle-wrapper.properties
+++ b/google_api_availability_android/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/google_api_availability_android/android/settings.gradle b/google_api_availability_android/android/settings.gradle
index f5ff5d0..29608ad 100644
--- a/google_api_availability_android/android/settings.gradle
+++ b/google_api_availability_android/android/settings.gradle
@@ -1 +1,24 @@
-rootProject.name = 'google_api_availability'
+pluginManagement {
+ def flutterSdkPath = {
+ def properties = new Properties()
+ file("local.properties").withInputStream { properties.load(it) }
+ def flutterSdkPath = properties.getProperty("flutter.sdk")
+ assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+ return flutterSdkPath
+ }()
+
+ includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
+
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+ }
+
+plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "8.1.0" apply false
+}
+
+ include ":app"
\ No newline at end of file
diff --git a/google_api_availability_android/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java b/google_api_availability_android/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java
index aef880b..72bbb43 100644
--- a/google_api_availability_android/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java
+++ b/google_api_availability_android/android/src/main/java/com/baseflow/googleapiavailability/GoogleApiAvailabilityPlugin.java
@@ -8,9 +8,6 @@
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MethodChannel;
-import io.flutter.plugin.common.PluginRegistry.Registrar;
-import io.flutter.plugin.common.PluginRegistry.ViewDestroyListener;
-import io.flutter.view.FlutterNativeView;
/**
* GoogleApiAvailabilityPlugin
@@ -26,49 +23,43 @@ public GoogleApiAvailabilityPlugin() {
}
@Override
- public void onAttachedToActivity(ActivityPluginBinding binding) {
- methodCallHandler.setActivity(binding.getActivity());
- }
+ public void onAttachedToActivity(ActivityPluginBinding binding) {
+ if (methodCallHandler != null) {
+ methodCallHandler.setActivity(binding.getActivity());
+ }
+ }
- @Override
- public void onDetachedFromActivity() {
- methodCallHandler.setActivity(null);
- }
+ @Override
+ public void onDetachedFromActivity() {
+ if (methodCallHandler != null) {
+ methodCallHandler.setActivity(null);
+ }
+ }
- @Override
- public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
- methodCallHandler.setActivity(binding.getActivity());
- }
+ @Override
+ public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
+ if (methodCallHandler != null) {
+ methodCallHandler.setActivity(binding.getActivity());
+ }
+ }
- @Override
- public void onDetachedFromActivityForConfigChanges() {
- methodCallHandler.setActivity(null);
- }
+ @Override
+ public void onDetachedFromActivityForConfigChanges() {
+ if (methodCallHandler != null) {
+ methodCallHandler.setActivity(null);
+ }
+ }
- @Override
- public void onAttachedToEngine(FlutterPluginBinding binding) {
- registerPlugin(binding.getApplicationContext(), binding.getBinaryMessenger());
- }
+ @Override
+ public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
+ registerPlugin(binding.getApplicationContext(), binding.getBinaryMessenger());
+ }
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
unregisterPlugin();
}
- public static void registerWith(Registrar registrar) {
- final GoogleApiAvailabilityPlugin plugin = new GoogleApiAvailabilityPlugin();
- plugin.registerPlugin(registrar.context(), registrar.messenger());
- plugin.methodCallHandler.setActivity(registrar.activity());
-
- registrar.addViewDestroyListener(new ViewDestroyListener() {
- @Override
- public boolean onViewDestroy(FlutterNativeView view) {
- plugin.unregisterPlugin();
- return false;
- }
- });
- }
-
private void registerPlugin(Context context, BinaryMessenger messenger) {
methodCallHandler = new MethodCallHandlerImpl(context, googleApiAvailabilityManager);
channel = new MethodChannel(messenger, "flutter.baseflow.com/google_api_availability_android/methods");
@@ -76,7 +67,9 @@ private void registerPlugin(Context context, BinaryMessenger messenger) {
}
private void unregisterPlugin() {
- channel.setMethodCallHandler(null);
- channel = null;
+ if (channel != null) {
+ channel.setMethodCallHandler(null);
+ channel = null;
+ }
}
}
\ No newline at end of file
diff --git a/google_api_availability_android/example/.gitignore b/google_api_availability_android/example/.gitignore
new file mode 100644
index 0000000..07488ba
--- /dev/null
+++ b/google_api_availability_android/example/.gitignore
@@ -0,0 +1,70 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# Visual Studio Code related
+.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+.dart_tool/
+.flutter-plugins
+.packages
+.pub-cache/
+.pub/
+/build/
+
+# Android related
+**/android/**/gradle-wrapper.jar
+**/android/.gradle
+**/android/captures/
+**/android/gradlew
+**/android/gradlew.bat
+**/android/local.properties
+**/android/**/GeneratedPluginRegistrant.java
+
+# iOS/XCode related
+**/ios/**/*.mode1v3
+**/ios/**/*.mode2v3
+**/ios/**/*.moved-aside
+**/ios/**/*.pbxuser
+**/ios/**/*.perspectivev3
+**/ios/**/*sync/
+**/ios/**/.sconsign.dblite
+**/ios/**/.tags*
+**/ios/**/.vagrant/
+**/ios/**/DerivedData/
+**/ios/**/Icon?
+**/ios/**/Pods/
+**/ios/**/.symlinks/
+**/ios/**/profile
+**/ios/**/xcuserdata
+**/ios/.generated/
+**/ios/Flutter/App.framework
+**/ios/Flutter/Flutter.framework
+**/ios/Flutter/Generated.xcconfig
+**/ios/Flutter/app.flx
+**/ios/Flutter/app.zip
+**/ios/Flutter/flutter_assets/
+**/ios/ServiceDefinitions.json
+**/ios/Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!**/ios/**/default.mode1v3
+!**/ios/**/default.mode2v3
+!**/ios/**/default.pbxuser
+!**/ios/**/default.perspectivev3
+!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
diff --git a/google_api_availability_android/example/.metadata b/google_api_availability_android/example/.metadata
new file mode 100644
index 0000000..66fe509
--- /dev/null
+++ b/google_api_availability_android/example/.metadata
@@ -0,0 +1,10 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: 035e0765cc575c3b455689c2402cce073d564fce
+ channel: master
+
+project_type: app
diff --git a/google_api_availability_android/example/README.md b/google_api_availability_android/example/README.md
new file mode 100644
index 0000000..e767248
--- /dev/null
+++ b/google_api_availability_android/example/README.md
@@ -0,0 +1,16 @@
+# google_api_availability_example
+
+Demonstrates how to use the google_api_availability plugin.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://flutter.io/docs/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://flutter.io/docs/cookbook)
+
+For help getting started with Flutter, view our
+[online documentation](https://flutter.io/docs), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/google_api_availability_android/example/android/.gitignore b/google_api_availability_android/example/android/.gitignore
new file mode 100644
index 0000000..65b7315
--- /dev/null
+++ b/google_api_availability_android/example/android/.gitignore
@@ -0,0 +1,10 @@
+*.iml
+*.class
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
+/captures
+GeneratedPluginRegistrant.java
diff --git a/google_api_availability_android/example/android/.settings/org.eclipse.buildship.core.prefs b/google_api_availability_android/example/android/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 0000000..9851512
--- /dev/null
+++ b/google_api_availability_android/example/android/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,13 @@
+arguments=
+auto.sync=false
+build.scans.enabled=false
+connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
+connection.project.dir=
+eclipse.preferences.version=1
+gradle.user.home=
+java.home=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
+jvm.arguments=
+offline.mode=false
+override.workspace.settings=true
+show.console.view=true
+show.executions.view=true
diff --git a/google_api_availability_android/example/android/app/.classpath b/google_api_availability_android/example/android/app/.classpath
new file mode 100644
index 0000000..eb19361
--- /dev/null
+++ b/google_api_availability_android/example/android/app/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/google_api_availability_android/example/android/app/.settings/org.eclipse.buildship.core.prefs b/google_api_availability_android/example/android/app/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 0000000..b1886ad
--- /dev/null
+++ b/google_api_availability_android/example/android/app/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,2 @@
+connection.project.dir=..
+eclipse.preferences.version=1
diff --git a/google_api_availability_android/example/android/app/build.gradle b/google_api_availability_android/example/android/app/build.gradle
new file mode 100644
index 0000000..b466482
--- /dev/null
+++ b/google_api_availability_android/example/android/app/build.gradle
@@ -0,0 +1,64 @@
+plugins {
+ id "com.android.application"
+ id "dev.flutter.flutter-gradle-plugin"
+}
+
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader('UTF-8') { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+if (flutterVersionCode == null) {
+ flutterVersionCode = '1'
+}
+
+def flutterVersionName = localProperties.getProperty('flutter.versionName')
+if (flutterVersionName == null) {
+ flutterVersionName = '1.0'
+}
+
+android {
+ namespace 'com.baseflow.googleapiavailabilityexample'
+ compileSdkVersion flutter.compileSdkVersion
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ lintOptions {
+ disable 'InvalidPackage'
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId "com.baseflow.googleapiavailabilityexample"
+ minSdkVersion flutter.minSdkVersion
+ targetSdkVersion flutter.targetSdkVersion
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ // TODO: Add your own signing config for the release build.
+ // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig signingConfigs.debug
+ }
+ }
+}
+
+flutter {
+ source '../..'
+}
+
+dependencies {
+ androidTestImplementation 'androidx.test:runner:1.2.0'
+ androidTestImplementation 'androidx.test:rules:1.2.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+}
\ No newline at end of file
diff --git a/google_api_availability_android/example/android/app/src/main/AndroidManifest.xml b/google_api_availability_android/example/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..c887de4
--- /dev/null
+++ b/google_api_availability_android/example/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/google_api_availability_android/example/android/app/src/main/res/drawable/launch_background.xml b/google_api_availability_android/example/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 0000000..304732f
--- /dev/null
+++ b/google_api_availability_android/example/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/google_api_availability_android/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/google_api_availability_android/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..db77bb4
Binary files /dev/null and b/google_api_availability_android/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/google_api_availability_android/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/google_api_availability_android/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..17987b7
Binary files /dev/null and b/google_api_availability_android/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/google_api_availability_android/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/google_api_availability_android/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..09d4391
Binary files /dev/null and b/google_api_availability_android/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/google_api_availability_android/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/google_api_availability_android/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..d5f1c8d
Binary files /dev/null and b/google_api_availability_android/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/google_api_availability_android/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/google_api_availability_android/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..4d6372e
Binary files /dev/null and b/google_api_availability_android/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/google_api_availability_android/example/android/app/src/main/res/values/styles.xml b/google_api_availability_android/example/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..00fa441
--- /dev/null
+++ b/google_api_availability_android/example/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/google_api_availability_android/example/android/build.gradle b/google_api_availability_android/example/android/build.gradle
new file mode 100644
index 0000000..bc157bd
--- /dev/null
+++ b/google_api_availability_android/example/android/build.gradle
@@ -0,0 +1,18 @@
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.buildDir = '../build'
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+}
+subprojects {
+ project.evaluationDependsOn(':app')
+}
+
+tasks.register("clean", Delete) {
+ delete rootProject.buildDir
+}
diff --git a/google_api_availability_android/example/android/gradle.properties b/google_api_availability_android/example/android/gradle.properties
new file mode 100644
index 0000000..75e8721
--- /dev/null
+++ b/google_api_availability_android/example/android/gradle.properties
@@ -0,0 +1,4 @@
+android.enableJetifier=true
+android.useAndroidX=true
+android.enableR8=true
+org.gradle.jvmargs=-Xmx1536M
\ No newline at end of file
diff --git a/google_api_availability_android/example/android/gradle/wrapper/gradle-wrapper.properties b/google_api_availability_android/example/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..f7fafcd
--- /dev/null
+++ b/google_api_availability_android/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Apr 01 07:57:11 BST 2020
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-all.zip
diff --git a/google_api_availability_android/example/android/settings.gradle b/google_api_availability_android/example/android/settings.gradle
new file mode 100644
index 0000000..29a0efb
--- /dev/null
+++ b/google_api_availability_android/example/android/settings.gradle
@@ -0,0 +1,24 @@
+pluginManagement {
+ def flutterSdkPath = {
+ def properties = new Properties()
+ file("local.properties").withInputStream { properties.load(it) }
+ def flutterSdkPath = properties.getProperty("flutter.sdk")
+ assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+ return flutterSdkPath
+ }()
+
+ includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
+
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+ }
+
+ plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "8.1.0" apply false
+ }
+
+ include ":app"
\ No newline at end of file
diff --git a/google_api_availability_android/example/lib/main.dart b/google_api_availability_android/example/lib/main.dart
new file mode 100644
index 0000000..aa4ca7c
--- /dev/null
+++ b/google_api_availability_android/example/lib/main.dart
@@ -0,0 +1,194 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:google_api_availability_android/google_api_availability_android.dart';
+import 'package:google_api_availability_platform_interface/google_api_availability_platform_interface.dart';
+
+void main() => runApp(const MyApp());
+
+///Creates the mutable state for this widget.
+class MyApp extends StatefulWidget {
+ /// Named [key] parameter to identify a widget.
+ const MyApp({Key? key}) : super(key: key);
+
+ @override
+ // ignore: library_private_types_in_public_api
+ _MyAppState createState() => _MyAppState();
+}
+
+class _MyAppState extends State {
+ GooglePlayServicesAvailability _playStoreAvailability =
+ GooglePlayServicesAvailability.unknown;
+ String _errorString = 'unknown';
+ bool _isUserResolvable = false;
+ bool _errorDialogFragmentShown = false;
+
+ // Platform messages are asynchronous, so we initialize in an async method.
+ Future checkPlayServices([bool showDialog = false]) async {
+ GooglePlayServicesAvailability playStoreAvailability;
+ // Platform messages may fail, so we use a try/catch PlatformException.
+ try {
+ playStoreAvailability = await GoogleApiAvailabilityAndroid()
+ .checkGooglePlayServicesAvailability(showDialog);
+ } on PlatformException {
+ playStoreAvailability = GooglePlayServicesAvailability.unknown;
+ }
+
+ // If the widget was removed from the tree while the asynchronous platform
+ // message was in flight, we want to discard the reply rather than calling
+ // setState to update our non-existent appearance.
+ if (!mounted) {
+ return;
+ }
+
+ setState(() {
+ _playStoreAvailability = playStoreAvailability;
+ });
+ }
+
+ Future makeGooglePlayServicesAvailable() async {
+ try {
+ await GoogleApiAvailabilityAndroid().makeGooglePlayServicesAvailable();
+ } on PlatformException {
+ return;
+ }
+
+ if (!mounted) {
+ return;
+ }
+ }
+
+ Future getErrorString() async {
+ String errorString;
+
+ try {
+ errorString = await GoogleApiAvailabilityAndroid().getErrorString();
+ } on PlatformException {
+ errorString = 'Not available on non Android devices';
+ }
+
+ if (!mounted) {
+ return;
+ }
+
+ setState(() {
+ _errorString = errorString;
+ });
+ }
+
+ Future isUserResolvable() async {
+ bool isUserResolvable;
+
+ try {
+ isUserResolvable =
+ await GoogleApiAvailabilityAndroid().isUserResolvable();
+ } on PlatformException {
+ isUserResolvable = false;
+ }
+
+ if (!mounted) {
+ return;
+ }
+
+ setState(() {
+ _isUserResolvable = isUserResolvable;
+ });
+ }
+
+ Future showErrorNotification() async {
+ try {
+ await GoogleApiAvailabilityAndroid().showErrorNotification();
+ } on PlatformException {
+ return;
+ }
+
+ if (!mounted) {
+ return;
+ }
+ }
+
+ Future showErrorDialogFragment() async {
+ bool errorDialogFragmentShown;
+
+ try {
+ errorDialogFragmentShown =
+ await GoogleApiAvailabilityAndroid().showErrorDialogFragment();
+ } on PlatformException {
+ errorDialogFragmentShown = false;
+ }
+
+ if (!mounted) {
+ return;
+ }
+
+ setState(() {
+ _errorDialogFragmentShown = errorDialogFragmentShown;
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ home: Scaffold(
+ appBar: AppBar(
+ title: const Text('Plugin example app'),
+ ),
+ body: ListView(
+ children: [
+ MaterialButton(
+ onPressed: () => checkPlayServices(),
+ color: Colors.red,
+ child: const Text('Get PlayServices availability'),
+ ),
+ Center(
+ child: Text(
+ 'Google Play Store status: ${_playStoreAvailability.toString().split('.').last}\n')),
+ MaterialButton(
+ onPressed: () => checkPlayServices(true),
+ color: Colors.redAccent,
+ child:
+ const Text('Get PlayServices availability with fix dialog'),
+ ),
+ Center(
+ child: Text(
+ 'Google Play Store status: ${_playStoreAvailability.toString().split('.').last}\n')),
+ MaterialButton(
+ onPressed: () => makeGooglePlayServicesAvailable(),
+ color: Colors.red,
+ child: const Text('Make Google Play Service available'),
+ ),
+ const SizedBox(height: 30),
+ MaterialButton(
+ onPressed: () => getErrorString(),
+ color: Colors.red,
+ child: const Text('Get string of the error code'),
+ ),
+ Center(child: Text('Error string: $_errorString\n')),
+ MaterialButton(
+ onPressed: () => isUserResolvable(),
+ color: Colors.red,
+ child: const Text('Error resolvable by user'),
+ ),
+ Center(
+ child:
+ Text('Error resolvable by user: $_isUserResolvable\n')),
+ MaterialButton(
+ onPressed: () => showErrorNotification(),
+ color: Colors.red,
+ child: const Text('Show error notification'),
+ ),
+ const SizedBox(height: 30),
+ MaterialButton(
+ onPressed: () => showErrorDialogFragment(),
+ color: Colors.red,
+ child: const Text('Show error dialog fragment'),
+ ),
+ Center(
+ child:
+ Text('Error dialog shown: $_errorDialogFragmentShown\n')),
+ ],
+ )),
+ );
+ }
+}
diff --git a/google_api_availability_android/example/pubspec.yaml b/google_api_availability_android/example/pubspec.yaml
new file mode 100644
index 0000000..54512b5
--- /dev/null
+++ b/google_api_availability_android/example/pubspec.yaml
@@ -0,0 +1,20 @@
+name: google_api_availability_example
+description: Demonstrates how to use the google_api_availability plugin.
+version: 1.0.0+1
+publish_to: none
+
+environment:
+ sdk: ">=2.15.0 <3.0.0"
+
+dependencies:
+ flutter:
+ sdk: flutter
+ google_api_availability_android:
+ path: ../
+ google_api_availability_platform_interface: ^1.0.1
+
+dev_dependencies:
+ flutter_lints: 1.0.4
+
+flutter:
+ uses-material-design: true
diff --git a/google_api_availability_android/pubspec.yaml b/google_api_availability_android/pubspec.yaml
index 7c9056e..786fed8 100644
--- a/google_api_availability_android/pubspec.yaml
+++ b/google_api_availability_android/pubspec.yaml
@@ -3,7 +3,7 @@ description: An Android implementation for the google_api_availability plugin.
repository: https://github.com/baseflow/flutter-google-api-availability/tree/main/google_api_availability_android
# NOTE: We strongly prefer non-breaking changes, even at the expense of a
# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
-version: 1.0.1
+version: 1.1.0
flutter:
plugin:
diff --git a/google_api_availability_android/test/method_channel_mock.dart b/google_api_availability_android/test/method_channel_mock.dart
index ad85720..2b5da96 100644
--- a/google_api_availability_android/test/method_channel_mock.dart
+++ b/google_api_availability_android/test/method_channel_mock.dart
@@ -13,7 +13,7 @@ class MethodChannelMock {
this.result,
this.delay = Duration.zero,
}) : methodChannel = MethodChannel(channelName) {
- TestDefaultBinaryMessengerBinding.instance!.defaultBinaryMessenger
+ TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(methodChannel, _handler);
}