diff --git a/packages/device_info/CHANGELOG.md b/packages/device_info/device_info/CHANGELOG.md
similarity index 97%
rename from packages/device_info/CHANGELOG.md
rename to packages/device_info/device_info/CHANGELOG.md
index 97c1e1f52221..9af729780914 100644
--- a/packages/device_info/CHANGELOG.md
+++ b/packages/device_info/device_info/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.4.2+6
+
+* Moved everything from device_info to device_info/device_info
+
## 0.4.2+5
* Update package:e2e reference to use the local version in the flutter/plugins
diff --git a/packages/device_info/LICENSE b/packages/device_info/device_info/LICENSE
similarity index 100%
rename from packages/device_info/LICENSE
rename to packages/device_info/device_info/LICENSE
diff --git a/packages/device_info/README.md b/packages/device_info/device_info/README.md
similarity index 100%
rename from packages/device_info/README.md
rename to packages/device_info/device_info/README.md
diff --git a/packages/device_info/android/build.gradle b/packages/device_info/device_info/android/build.gradle
similarity index 100%
rename from packages/device_info/android/build.gradle
rename to packages/device_info/device_info/android/build.gradle
diff --git a/packages/device_info/android/gradle.properties b/packages/device_info/device_info/android/gradle.properties
similarity index 100%
rename from packages/device_info/android/gradle.properties
rename to packages/device_info/device_info/android/gradle.properties
diff --git a/packages/device_info/android/settings.gradle b/packages/device_info/device_info/android/settings.gradle
similarity index 100%
rename from packages/device_info/android/settings.gradle
rename to packages/device_info/device_info/android/settings.gradle
diff --git a/packages/device_info/android/src/main/AndroidManifest.xml b/packages/device_info/device_info/android/src/main/AndroidManifest.xml
similarity index 100%
rename from packages/device_info/android/src/main/AndroidManifest.xml
rename to packages/device_info/device_info/android/src/main/AndroidManifest.xml
diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java b/packages/device_info/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java
similarity index 100%
rename from packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java
rename to packages/device_info/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java
diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java b/packages/device_info/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java
similarity index 100%
rename from packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java
rename to packages/device_info/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java
diff --git a/packages/device_info/example/README.md b/packages/device_info/device_info/example/README.md
similarity index 100%
rename from packages/device_info/example/README.md
rename to packages/device_info/device_info/example/README.md
diff --git a/packages/device_info/example/android/app/build.gradle b/packages/device_info/device_info/example/android/app/build.gradle
similarity index 100%
rename from packages/device_info/example/android/app/build.gradle
rename to packages/device_info/device_info/example/android/app/build.gradle
diff --git a/packages/device_info/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/device_info/device_info/example/android/app/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from packages/device_info/example/android/app/gradle/wrapper/gradle-wrapper.properties
rename to packages/device_info/device_info/example/android/app/gradle/wrapper/gradle-wrapper.properties
diff --git a/packages/device_info/example/android/app/src/main/AndroidManifest.xml b/packages/device_info/device_info/example/android/app/src/main/AndroidManifest.xml
similarity index 100%
rename from packages/device_info/example/android/app/src/main/AndroidManifest.xml
rename to packages/device_info/device_info/example/android/app/src/main/AndroidManifest.xml
diff --git a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1Activity.java b/packages/device_info/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1Activity.java
similarity index 100%
rename from packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1Activity.java
rename to packages/device_info/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1Activity.java
diff --git a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1ActivityTest.java b/packages/device_info/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1ActivityTest.java
similarity index 100%
rename from packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1ActivityTest.java
rename to packages/device_info/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1ActivityTest.java
diff --git a/packages/device_info/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/device_info/device_info/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from packages/device_info/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
rename to packages/device_info/device_info/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
diff --git a/packages/device_info/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/device_info/device_info/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from packages/device_info/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
rename to packages/device_info/device_info/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
diff --git a/packages/device_info/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/device_info/device_info/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from packages/device_info/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
rename to packages/device_info/device_info/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
diff --git a/packages/device_info/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/device_info/device_info/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from packages/device_info/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
rename to packages/device_info/device_info/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
diff --git a/packages/device_info/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/device_info/device_info/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from packages/device_info/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
rename to packages/device_info/device_info/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
diff --git a/packages/device_info/example/android/build.gradle b/packages/device_info/device_info/example/android/build.gradle
similarity index 100%
rename from packages/device_info/example/android/build.gradle
rename to packages/device_info/device_info/example/android/build.gradle
diff --git a/packages/device_info/example/android/gradle.properties b/packages/device_info/device_info/example/android/gradle.properties
similarity index 100%
rename from packages/device_info/example/android/gradle.properties
rename to packages/device_info/device_info/example/android/gradle.properties
diff --git a/packages/device_info/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/device_info/device_info/example/android/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from packages/device_info/example/android/gradle/wrapper/gradle-wrapper.properties
rename to packages/device_info/device_info/example/android/gradle/wrapper/gradle-wrapper.properties
diff --git a/packages/device_info/example/android/settings.gradle b/packages/device_info/device_info/example/android/settings.gradle
similarity index 100%
rename from packages/device_info/example/android/settings.gradle
rename to packages/device_info/device_info/example/android/settings.gradle
diff --git a/packages/device_info/example/ios/Flutter/AppFrameworkInfo.plist b/packages/device_info/device_info/example/ios/Flutter/AppFrameworkInfo.plist
similarity index 100%
rename from packages/device_info/example/ios/Flutter/AppFrameworkInfo.plist
rename to packages/device_info/device_info/example/ios/Flutter/AppFrameworkInfo.plist
diff --git a/packages/device_info/example/ios/Flutter/Debug.xcconfig b/packages/device_info/device_info/example/ios/Flutter/Debug.xcconfig
similarity index 100%
rename from packages/device_info/example/ios/Flutter/Debug.xcconfig
rename to packages/device_info/device_info/example/ios/Flutter/Debug.xcconfig
diff --git a/packages/device_info/example/ios/Flutter/Release.xcconfig b/packages/device_info/device_info/example/ios/Flutter/Release.xcconfig
similarity index 100%
rename from packages/device_info/example/ios/Flutter/Release.xcconfig
rename to packages/device_info/device_info/example/ios/Flutter/Release.xcconfig
diff --git a/packages/device_info/example/ios/Runner.xcodeproj/project.pbxproj b/packages/device_info/device_info/example/ios/Runner.xcodeproj/project.pbxproj
similarity index 100%
rename from packages/device_info/example/ios/Runner.xcodeproj/project.pbxproj
rename to packages/device_info/device_info/example/ios/Runner.xcodeproj/project.pbxproj
diff --git a/packages/device_info/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/device_info/device_info/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from packages/device_info/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to packages/device_info/device_info/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/packages/device_info/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/device_info/device_info/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
similarity index 100%
rename from packages/device_info/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
rename to packages/device_info/device_info/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
diff --git a/packages/device_info/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/device_info/device_info/example/ios/Runner.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from packages/device_info/example/ios/Runner.xcworkspace/contents.xcworkspacedata
rename to packages/device_info/device_info/example/ios/Runner.xcworkspace/contents.xcworkspacedata
diff --git a/packages/device_info/example/ios/Runner/AppDelegate.h b/packages/device_info/device_info/example/ios/Runner/AppDelegate.h
similarity index 100%
rename from packages/device_info/example/ios/Runner/AppDelegate.h
rename to packages/device_info/device_info/example/ios/Runner/AppDelegate.h
diff --git a/packages/device_info/example/ios/Runner/AppDelegate.m b/packages/device_info/device_info/example/ios/Runner/AppDelegate.m
similarity index 100%
rename from packages/device_info/example/ios/Runner/AppDelegate.m
rename to packages/device_info/device_info/example/ios/Runner/AppDelegate.m
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
diff --git a/packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
similarity index 100%
rename from packages/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
rename to packages/device_info/device_info/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
diff --git a/packages/device_info/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/device_info/device_info/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
similarity index 100%
rename from packages/device_info/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
rename to packages/device_info/device_info/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
diff --git a/packages/device_info/example/ios/Runner/Base.lproj/Main.storyboard b/packages/device_info/device_info/example/ios/Runner/Base.lproj/Main.storyboard
similarity index 100%
rename from packages/device_info/example/ios/Runner/Base.lproj/Main.storyboard
rename to packages/device_info/device_info/example/ios/Runner/Base.lproj/Main.storyboard
diff --git a/packages/device_info/example/ios/Runner/Info.plist b/packages/device_info/device_info/example/ios/Runner/Info.plist
similarity index 100%
rename from packages/device_info/example/ios/Runner/Info.plist
rename to packages/device_info/device_info/example/ios/Runner/Info.plist
diff --git a/packages/device_info/example/ios/Runner/main.m b/packages/device_info/device_info/example/ios/Runner/main.m
similarity index 100%
rename from packages/device_info/example/ios/Runner/main.m
rename to packages/device_info/device_info/example/ios/Runner/main.m
diff --git a/packages/device_info/example/lib/main.dart b/packages/device_info/device_info/example/lib/main.dart
similarity index 100%
rename from packages/device_info/example/lib/main.dart
rename to packages/device_info/device_info/example/lib/main.dart
diff --git a/packages/device_info/example/pubspec.yaml b/packages/device_info/device_info/example/pubspec.yaml
similarity index 92%
rename from packages/device_info/example/pubspec.yaml
rename to packages/device_info/device_info/example/pubspec.yaml
index 0546cb650256..f26ee033d4be 100644
--- a/packages/device_info/example/pubspec.yaml
+++ b/packages/device_info/device_info/example/pubspec.yaml
@@ -11,7 +11,7 @@ dev_dependencies:
flutter_driver:
sdk: flutter
e2e:
- path: ../../e2e
+ path: ../../../e2e
pedantic: ^1.8.0
flutter:
diff --git a/packages/device_info/example/test_driver/device_info_e2e.dart b/packages/device_info/device_info/example/test_driver/device_info_e2e.dart
similarity index 100%
rename from packages/device_info/example/test_driver/device_info_e2e.dart
rename to packages/device_info/device_info/example/test_driver/device_info_e2e.dart
diff --git a/packages/device_info/example/test_driver/device_info_e2e_test.dart b/packages/device_info/device_info/example/test_driver/device_info_e2e_test.dart
similarity index 100%
rename from packages/device_info/example/test_driver/device_info_e2e_test.dart
rename to packages/device_info/device_info/example/test_driver/device_info_e2e_test.dart
diff --git a/packages/device_info/ios/Assets/.gitkeep b/packages/device_info/device_info/ios/Assets/.gitkeep
similarity index 100%
rename from packages/device_info/ios/Assets/.gitkeep
rename to packages/device_info/device_info/ios/Assets/.gitkeep
diff --git a/packages/device_info/ios/Classes/FLTDeviceInfoPlugin.h b/packages/device_info/device_info/ios/Classes/FLTDeviceInfoPlugin.h
similarity index 100%
rename from packages/device_info/ios/Classes/FLTDeviceInfoPlugin.h
rename to packages/device_info/device_info/ios/Classes/FLTDeviceInfoPlugin.h
diff --git a/packages/device_info/ios/Classes/FLTDeviceInfoPlugin.m b/packages/device_info/device_info/ios/Classes/FLTDeviceInfoPlugin.m
similarity index 100%
rename from packages/device_info/ios/Classes/FLTDeviceInfoPlugin.m
rename to packages/device_info/device_info/ios/Classes/FLTDeviceInfoPlugin.m
diff --git a/packages/device_info/ios/device_info.podspec b/packages/device_info/device_info/ios/device_info.podspec
similarity index 100%
rename from packages/device_info/ios/device_info.podspec
rename to packages/device_info/device_info/ios/device_info.podspec
diff --git a/packages/device_info/lib/device_info.dart b/packages/device_info/device_info/lib/device_info.dart
similarity index 100%
rename from packages/device_info/lib/device_info.dart
rename to packages/device_info/device_info/lib/device_info.dart
diff --git a/packages/device_info/pubspec.yaml b/packages/device_info/device_info/pubspec.yaml
similarity index 97%
rename from packages/device_info/pubspec.yaml
rename to packages/device_info/device_info/pubspec.yaml
index f1883a79fdc0..8792bdaf5c40 100644
--- a/packages/device_info/pubspec.yaml
+++ b/packages/device_info/device_info/pubspec.yaml
@@ -5,7 +5,7 @@ homepage: https://github.com/flutter/plugins/tree/master/packages/device_info
# 0.4.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.4.2+5
+version: 0.4.2+6
flutter:
plugin:
diff --git a/packages/device_info/device_info_android.iml b/packages/device_info/device_info_android.iml
deleted file mode 100644
index 462b903e05b6..000000000000
--- a/packages/device_info/device_info_android.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/device_info/example/android.iml b/packages/device_info/example/android.iml
deleted file mode 100644
index 462b903e05b6..000000000000
--- a/packages/device_info/example/android.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/device_info/example/device_info_example.iml b/packages/device_info/example/device_info_example.iml
deleted file mode 100644
index 9d5dae19540c..000000000000
--- a/packages/device_info/example/device_info_example.iml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/packages/device_info/example/device_info_example_android.iml b/packages/device_info/example/device_info_example_android.iml
deleted file mode 100644
index 462b903e05b6..000000000000
--- a/packages/device_info/example/device_info_example_android.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
index 5d62a5179fd4..02b257d6b168 100644
--- a/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
+++ b/packages/google_maps_flutter/google_maps_flutter/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 0.5.30
+
+* Add a `dispose` method to the controller to let the native side know that we're done with said controller.
+* Call `controller.dispose()` from the `dispose` method of the `GoogleMap` widget.
+
+## 0.5.29+1
+
+* (ios) Pin dependency on GoogleMaps pod to `< 3.10`, to address https://github.com/flutter/flutter/issues/63447
+
## 0.5.29
* Pass a constant `_web_only_mapCreationId` to `platform.buildView`, so web can return a cached widget DOM when flutter attempts to repaint there.
diff --git a/packages/google_maps_flutter/google_maps_flutter/ios/google_maps_flutter.podspec b/packages/google_maps_flutter/google_maps_flutter/ios/google_maps_flutter.podspec
index 9a1f04d59759..021abfee71ab 100644
--- a/packages/google_maps_flutter/google_maps_flutter/ios/google_maps_flutter.podspec
+++ b/packages/google_maps_flutter/google_maps_flutter/ios/google_maps_flutter.podspec
@@ -17,7 +17,8 @@ Downloaded by pub (not CocoaPods).
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.dependency 'Flutter'
- s.dependency 'GoogleMaps'
+ # TODO: Unpin this once the fix for b/163474612 or b/163359804 rolls (avoid v3.10!)
+ s.dependency 'GoogleMaps', '< 3.10'
s.static_framework = true
s.platform = :ios, '8.0'
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart
index f5ee180ab1fd..f47b8e57b049 100644
--- a/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/controller.dart
@@ -258,4 +258,9 @@ class GoogleMapController {
Future takeSnapshot() {
return _googleMapsFlutterPlatform.takeSnapshot(mapId: mapId);
}
+
+ /// Disposes of the platform resources
+ void dispose() {
+ _googleMapsFlutterPlatform.dispose(mapId: mapId);
+ }
}
diff --git a/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart b/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart
index 5cf3db120ccd..d7f0f1a4e280 100644
--- a/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/lib/src/google_map.dart
@@ -251,6 +251,13 @@ class _GoogleMapState extends State {
_circles = keyByCircleId(widget.circles);
}
+ @override
+ void dispose() async {
+ super.dispose();
+ GoogleMapController controller = await _controller.future;
+ controller.dispose();
+ }
+
@override
void didUpdateWidget(GoogleMap oldWidget) {
super.didUpdateWidget(oldWidget);
diff --git a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml
index 120600a9823c..e7e3aeeb3327 100644
--- a/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml
+++ b/packages/google_maps_flutter/google_maps_flutter/pubspec.yaml
@@ -1,13 +1,13 @@
name: google_maps_flutter
description: A Flutter plugin for integrating Google Maps in iOS and Android applications.
homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/google_maps_flutter
-version: 0.5.29
+version: 0.5.30
dependencies:
flutter:
sdk: flutter
flutter_plugin_android_lifecycle: ^1.0.0
- google_maps_flutter_platform_interface: ^1.0.1
+ google_maps_flutter_platform_interface: ^1.0.4
dev_dependencies:
flutter_test:
diff --git a/packages/google_maps_flutter/google_maps_flutter/test/map_creation_test.dart b/packages/google_maps_flutter/google_maps_flutter/test/map_creation_test.dart
index 7861c86e9709..5ea9a679a1be 100644
--- a/packages/google_maps_flutter/google_maps_flutter/test/map_creation_test.dart
+++ b/packages/google_maps_flutter/google_maps_flutter/test/map_creation_test.dart
@@ -20,7 +20,8 @@ void main() {
setUp(() {
// Use a mock platform so we never need to hit the MethodChannel code.
GoogleMapsFlutterPlatform.instance = platform;
- when(platform.buildView(any, any, any)).thenReturn(Container());
+ resetMockitoState();
+ _setupMock(platform);
});
testWidgets('_webOnlyMapCreationId increments with each GoogleMap widget', (
@@ -61,4 +62,60 @@ void main() {
),
]);
});
+
+ testWidgets('Calls platform.dispose when GoogleMap is disposed of', (
+ WidgetTester tester,
+ ) async {
+ await tester.pumpWidget(GoogleMap(
+ initialCameraPosition: CameraPosition(
+ target: LatLng(43.3608, -5.8702),
+ ),
+ ));
+
+ // Now dispose of the map...
+ await tester.pumpWidget(Container());
+
+ verify(platform.dispose(mapId: anyNamed('mapId')));
+ });
+}
+
+// Some test setup classes below...
+
+class _MockStream extends Mock implements Stream {}
+
+typedef _CreationCallback = void Function(int);
+
+// Installs test mocks on the platform
+void _setupMock(MockGoogleMapsFlutterPlatform platform) {
+ // Used to create the view of the map...
+ when(platform.buildView(any, any, any)).thenAnswer((realInvocation) {
+ // Call the onPlatformViewCreated callback so the controller gets created.
+ _CreationCallback onPlatformViewCreatedCb =
+ realInvocation.positionalArguments[2];
+ onPlatformViewCreatedCb.call(0);
+ return Container();
+ });
+ // Used to create the Controller
+ when(platform.onCameraIdle(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onCameraMove(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onCameraMoveStarted(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onCircleTap(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onInfoWindowTap(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onLongPress(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onMarkerDragEnd(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onMarkerTap(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onPolygonTap(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onPolylineTap(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
+ when(platform.onTap(mapId: anyNamed('mapId')))
+ .thenAnswer((_) => _MockStream());
}