[android_intent] Migrate to nnbd (#3328)
diff --git a/packages/android_intent/CHANGELOG.md b/packages/android_intent/CHANGELOG.md
index f353498..65c991c 100644
--- a/packages/android_intent/CHANGELOG.md
+++ b/packages/android_intent/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.0-nullsafety
+
+* Migrate to null safety.
+
## 0.3.7+8
* Update Flutter SDK constraint.
diff --git a/packages/android_intent/lib/android_intent.dart b/packages/android_intent/lib/android_intent.dart
index 9d70197..0ab2d7b 100644
--- a/packages/android_intent/lib/android_intent.dart
+++ b/packages/android_intent/lib/android_intent.dart
@@ -36,7 +36,7 @@
this.arguments,
this.package,
this.componentName,
- Platform platform,
+ Platform? platform,
this.type,
}) : assert(action != null || componentName != null,
'action or component (or both) must be specified'),
@@ -47,8 +47,8 @@
/// app code, it may break without warning.
@visibleForTesting
AndroidIntent.private({
- @required Platform platform,
- @required MethodChannel channel,
+ required Platform platform,
+ required MethodChannel channel,
this.action,
this.flags,
this.category,
@@ -66,47 +66,47 @@
/// includes constants like `ACTION_VIEW`.
///
/// See https://developer.android.com/reference/android/content/Intent.html#intent-structure.
- final String action;
+ final String? action;
/// Constants that can be set on an intent to tweak how it is finally handled.
/// Some of the constants are mirrored to Dart via [Flag].
///
/// See https://developer.android.com/reference/android/content/Intent.html#setFlags(int).
- final List<int> flags;
+ final List<int>? flags;
/// An optional additional constant qualifying the given [action].
///
/// See https://developer.android.com/reference/android/content/Intent.html#intent-structure.
- final String category;
+ final String? category;
/// The Uri that the [action] is pointed towards.
///
/// See https://developer.android.com/reference/android/content/Intent.html#intent-structure.
- final String data;
+ final String? data;
/// The equivalent of `extras`, a generic `Bundle` of data that the Intent can
/// carry. This is a slot for extraneous data that the listener may use.
///
/// See https://developer.android.com/reference/android/content/Intent.html#intent-structure.
- final Map<String, dynamic> arguments;
+ final Map<String, dynamic>? arguments;
/// Sets the [data] to only resolve within this given package.
///
/// See https://developer.android.com/reference/android/content/Intent.html#setPackage(java.lang.String).
- final String package;
+ final String? package;
/// Set the exact `ComponentName` that should handle the intent. If this is
/// set [package] should also be non-null.
///
/// See https://developer.android.com/reference/android/content/Intent.html#setComponent(android.content.ComponentName).
- final String componentName;
+ final String? componentName;
final MethodChannel _channel;
final Platform _platform;
/// Set an explicit MIME data type.
///
/// See https://developer.android.com/reference/android/content/Intent.html#intent-structure.
- final String type;
+ final String? type;
bool _isPowerOfTwo(int x) {
/* First x in the below expression is for the case when x is 0 */
@@ -146,17 +146,18 @@
return false;
}
- return await _channel.invokeMethod<bool>(
+ final result = await _channel.invokeMethod<bool>(
'canResolveActivity',
_buildArguments(),
);
+ return result!;
}
/// Constructs the map of arguments which is passed to the plugin.
Map<String, dynamic> _buildArguments() {
return {
if (action != null) 'action': action,
- if (flags != null) 'flags': convertFlags(flags),
+ if (flags != null) 'flags': convertFlags(flags!),
if (category != null) 'category': category,
if (data != null) 'data': data,
if (arguments != null) 'arguments': arguments,
diff --git a/packages/android_intent/pubspec.yaml b/packages/android_intent/pubspec.yaml
index 1b63371..aec7ad0 100644
--- a/packages/android_intent/pubspec.yaml
+++ b/packages/android_intent/pubspec.yaml
@@ -1,10 +1,7 @@
name: android_intent
description: Flutter plugin for launching Android Intents. Not supported on iOS.
homepage: https://github.com/flutter/plugins/tree/master/packages/android_intent
-# 0.3.y+z is compatible with 1.0.0, if you land a breaking change bump
-# the version to 2.0.0.
-# See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0
-version: 0.3.7+8
+version: 2.0.0-nullsafety
flutter:
plugin:
@@ -16,15 +13,15 @@
dependencies:
flutter:
sdk: flutter
- platform: ">=2.0.0 <4.0.0"
- meta: ^1.0.5
+ platform: ^3.0.0-nullsafety.4
+ meta: ^1.3.0-nullsafety.6
dev_dependencies:
- test: ^1.3.0
- mockito: ^3.0.0
+ test: ^1.16.0-nullsafety.13
+ mockito: ^4.1.3
flutter_test:
sdk: flutter
- pedantic: ^1.8.0
+ pedantic: ^1.10.0-nullsafety.1
environment:
- sdk: ">=2.3.0 <3.0.0"
+ sdk: ">=2.12.0-0 <3.0.0"
flutter: ">=1.12.13+hotfix.5"
diff --git a/packages/android_intent/test/android_intent_test.dart b/packages/android_intent/test/android_intent_test.dart
index 3116288..b0fa48e 100644
--- a/packages/android_intent/test/android_intent_test.dart
+++ b/packages/android_intent/test/android_intent_test.dart
@@ -11,9 +11,11 @@
void main() {
AndroidIntent androidIntent;
- MockMethodChannel mockChannel;
+ late MockMethodChannel mockChannel;
setUp(() {
mockChannel = MockMethodChannel();
+ when(mockChannel.invokeMethod<bool>('canResolveActivity', any))
+ .thenAnswer((realInvocation) async => true);
});
group('AndroidIntent', () {
diff --git a/script/nnbd_plugins.sh b/script/nnbd_plugins.sh
index 5e671c2..0cab28a 100644
--- a/script/nnbd_plugins.sh
+++ b/script/nnbd_plugins.sh
@@ -5,6 +5,7 @@
# null-safe is available on stable.
readonly NNBD_PLUGINS_LIST=(
+ "android_intent"
"connectivity"
"device_info"
"flutter_plugin_android_lifecycle"