Skip to content

Commit 3b3c61c

Browse files
Merge remote-tracking branch 'upstream/main' into go-router/add-state-to-on-exit
2 parents ac289b8 + 701d60a commit 3b3c61c

File tree

72 files changed

+1308
-1280
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+1308
-1280
lines changed

.ci/flutter_master.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
557fbf5167f637555fb4330646f932200f120cd5
1+
2e748e8598b3169d5d186b8a4d02e603b62653d0

.ci/legacy_project/all_packages/android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ android {
2929

3030
defaultConfig {
3131
applicationId "com.example.all_packages"
32-
minSdkVersion 16
32+
minSdkVersion flutter.minSdkVersion
3333
targetSdkVersion 30
3434
versionCode flutterVersionCode.toInteger()
3535
versionName flutterVersionName

packages/espresso/CHANGELOG.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
## NEXT
1+
## 0.3.0+8
22

3-
* Updates minimum supported SDK version to Flutter 3.13/Dart 3.1.
3+
* Updates minSdkVersion to 19.
4+
* Updates minimum supported SDK version to Flutter 3.16/Dart 3.2.
45
* Updates compileSdk version to 34.
56

67
## 0.3.0+7

packages/espresso/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ android {
2929
compileSdk 34
3030

3131
defaultConfig {
32-
minSdkVersion 16
32+
minSdkVersion 19
3333
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
3434
}
3535

packages/espresso/pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ description: Java classes for testing Flutter apps using Espresso.
33
Allows driving Flutter widgets from a native Espresso test.
44
repository: https://github.com/flutter/packages/tree/main/packages/espresso
55
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+espresso%22
6-
version: 0.3.0+7
6+
version: 0.3.0+8
77

88
environment:
9-
sdk: ^3.1.0
10-
flutter: ">=3.13.0"
9+
sdk: ^3.2.0
10+
flutter: ">=3.16.0"
1111

1212
flutter:
1313
plugin:

packages/flutter_markdown/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.6.23
2+
3+
* Gracefully handle image dimension parsing failures.
4+
15
## 0.6.22+1
26

37
* Removes `_ambiguate` methods from code.

packages/flutter_markdown/lib/src/builder.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -568,8 +568,8 @@ class MarkdownBuilder implements md.NodeVisitor {
568568
if (parts.length == 2) {
569569
final List<String> dimensions = parts.last.split('x');
570570
if (dimensions.length == 2) {
571-
width = double.parse(dimensions[0]);
572-
height = double.parse(dimensions[1]);
571+
width = double.tryParse(dimensions[0]);
572+
height = double.tryParse(dimensions[1]);
573573
}
574574
}
575575

packages/flutter_markdown/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: A Markdown renderer for Flutter. Create rich text output,
44
formatted with simple Markdown tags.
55
repository: https://github.com/flutter/packages/tree/main/packages/flutter_markdown
66
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_markdown%22
7-
version: 0.6.22+1
7+
version: 0.6.23
88

99
environment:
1010
sdk: ^3.3.0

packages/flutter_markdown/test/image_test.dart

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,42 @@ void defineTests() {
333333
},
334334
);
335335

336+
testWidgets(
337+
'should gracefully handle width parsing failures',
338+
(WidgetTester tester) async {
339+
const String data = '![alt](https://img#x50)';
340+
await tester.pumpWidget(
341+
boilerplate(
342+
const Markdown(data: data),
343+
),
344+
);
345+
346+
final Image image = tester.widget(find.byType(Image));
347+
final NetworkImage networkImage = image.image as NetworkImage;
348+
expect(networkImage.url, 'https://img');
349+
expect(image.width, null);
350+
expect(image.height, 50);
351+
},
352+
);
353+
354+
testWidgets(
355+
'should gracefully handle height parsing failures',
356+
(WidgetTester tester) async {
357+
const String data = ' ![alt](https://img#50x)';
358+
await tester.pumpWidget(
359+
boilerplate(
360+
const Markdown(data: data),
361+
),
362+
);
363+
364+
final Image image = tester.widget(find.byType(Image));
365+
final NetworkImage networkImage = image.image as NetworkImage;
366+
expect(networkImage.url, 'https://img');
367+
expect(image.width, 50);
368+
expect(image.height, null);
369+
},
370+
);
371+
336372
testWidgets(
337373
'custom image builder',
338374
(WidgetTester tester) async {

packages/flutter_plugin_android_lifecycle/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 2.0.19
2+
3+
* Updates minSdkVersion to 19.
4+
* Updates minimum supported SDK version to Flutter 3.16/Dart 3.2.
5+
16
## 2.0.18
27

38
* Updates minimum supported SDK version to Flutter 3.13/Dart 3.1.

packages/flutter_plugin_android_lifecycle/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ android {
2929
compileSdk 34
3030

3131
defaultConfig {
32-
minSdkVersion 16
32+
minSdkVersion 19
3333
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
3434
consumerProguardFiles 'proguard.txt'
3535
}

packages/flutter_plugin_android_lifecycle/pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ name: flutter_plugin_android_lifecycle
22
description: Flutter plugin for accessing an Android Lifecycle within other plugins.
33
repository: https://github.com/flutter/packages/tree/main/packages/flutter_plugin_android_lifecycle
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_plugin_android_lifecycle%22
5-
version: 2.0.18
5+
version: 2.0.19
66

77
environment:
8-
sdk: ^3.1.0
9-
flutter: ">=3.13.0"
8+
sdk: ^3.2.0
9+
flutter: ">=3.16.0"
1010

1111
flutter:
1212
plugin:

packages/google_sign_in/google_sign_in_android/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 6.1.23
2+
3+
* Updates minSdkVersion to 19.
4+
* Updates minimum supported SDK version to Flutter 3.16/Dart 3.2.
5+
16
## 6.1.22
27

38
* Updates minimum supported SDK version to Flutter 3.13/Dart 3.1.

packages/google_sign_in/google_sign_in_android/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ android {
2929
compileSdk 34
3030

3131
defaultConfig {
32-
minSdkVersion 16
32+
minSdkVersion 19
3333
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
3434
}
3535

packages/google_sign_in/google_sign_in_android/pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ name: google_sign_in_android
22
description: Android implementation of the google_sign_in plugin.
33
repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_android
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
5-
version: 6.1.22
5+
version: 6.1.23
66

77
environment:
8-
sdk: ^3.1.0
9-
flutter: ">=3.13.0"
8+
sdk: ^3.2.0
9+
flutter: ">=3.16.0"
1010

1111
flutter:
1212
plugin:

packages/image_picker/image_picker_android/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 0.8.9+6
2+
3+
* Updates minSdkVersion to 19.
4+
* Updates minimum supported SDK version to Flutter 3.16/Dart 3.2.
5+
16
## 0.8.9+5
27

38
* Bumps androidx.exifinterface:exifinterface from 1.3.6 to 1.3.7.

packages/image_picker/image_picker_android/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ android {
2929
compileSdk 34
3030

3131
defaultConfig {
32-
minSdkVersion 16
32+
minSdkVersion 19
3333
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
3434
}
3535
lintOptions {

packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerDelegate.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ public void chooseMediaFromGallery(
295295

296296
private void launchPickMediaFromGalleryIntent(Messages.GeneralOptions generalOptions) {
297297
Intent pickMediaIntent;
298-
if (generalOptions.getUsePhotoPicker() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
298+
if (generalOptions.getUsePhotoPicker()) {
299299
if (generalOptions.getAllowMultiple()) {
300300
pickMediaIntent =
301301
new ActivityResultContracts.PickMultipleVisualMedia()
@@ -320,9 +320,7 @@ private void launchPickMediaFromGalleryIntent(Messages.GeneralOptions generalOpt
320320
pickMediaIntent.setType("*/*");
321321
String[] mimeTypes = {"video/*", "image/*"};
322322
pickMediaIntent.putExtra("CONTENT_TYPE", mimeTypes);
323-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
324-
pickMediaIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, generalOptions.getAllowMultiple());
325-
}
323+
pickMediaIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, generalOptions.getAllowMultiple());
326324
}
327325
activity.startActivityForResult(pickMediaIntent, REQUEST_CODE_CHOOSE_MEDIA_FROM_GALLERY);
328326
}
@@ -341,7 +339,7 @@ public void chooseVideoFromGallery(
341339

342340
private void launchPickVideoFromGalleryIntent(Boolean usePhotoPicker) {
343341
Intent pickVideoIntent;
344-
if (usePhotoPicker && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
342+
if (usePhotoPicker) {
345343
pickVideoIntent =
346344
new ActivityResultContracts.PickVisualMedia()
347345
.createIntent(
@@ -439,7 +437,7 @@ public void chooseMultiImageFromGallery(
439437

440438
private void launchPickImageFromGalleryIntent(Boolean usePhotoPicker) {
441439
Intent pickImageIntent;
442-
if (usePhotoPicker && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
440+
if (usePhotoPicker) {
443441
pickImageIntent =
444442
new ActivityResultContracts.PickVisualMedia()
445443
.createIntent(
@@ -456,7 +454,7 @@ private void launchPickImageFromGalleryIntent(Boolean usePhotoPicker) {
456454

457455
private void launchMultiPickImageFromGalleryIntent(Boolean usePhotoPicker) {
458456
Intent pickMultiImageIntent;
459-
if (usePhotoPicker && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
457+
if (usePhotoPicker) {
460458
pickMultiImageIntent =
461459
new ActivityResultContracts.PickMultipleVisualMedia()
462460
.createIntent(
@@ -467,9 +465,7 @@ private void launchMultiPickImageFromGalleryIntent(Boolean usePhotoPicker) {
467465
} else {
468466
pickMultiImageIntent = new Intent(Intent.ACTION_GET_CONTENT);
469467
pickMultiImageIntent.setType("image/*");
470-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
471-
pickMultiImageIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
472-
}
468+
pickMultiImageIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
473469
}
474470
activity.startActivityForResult(
475471
pickMultiImageIntent, REQUEST_CODE_CHOOSE_MULTI_IMAGE_FROM_GALLERY);

packages/image_picker/image_picker_android/pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ name: image_picker_android
22
description: Android implementation of the image_picker plugin.
33
repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_android
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22
5-
version: 0.8.9+5
5+
version: 0.8.9+6
66

77
environment:
8-
sdk: ^3.1.0
9-
flutter: ">=3.13.0"
8+
sdk: ^3.2.0
9+
flutter: ">=3.16.0"
1010

1111
flutter:
1212
plugin:

packages/image_picker/image_picker_for_web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 3.0.4
2+
3+
* Improves README example and updates it to use code excerpts.
4+
15
## 3.0.3
26

37
* Migrates package and tests to `package:web`.

packages/image_picker/image_picker_for_web/README.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,22 +76,20 @@ The instance will also let you retrieve the bytes of the selected file across al
7676

7777
If you want to use the path directly, your code would need look like this:
7878

79+
<?code-excerpt "example/lib/readme_excerpts.dart (ImageFromPath)"?>
7980
```dart
80-
...
8181
if (kIsWeb) {
82-
Image.network(pickedFile.path);
82+
image = Image.network(pickedFile.path);
8383
} else {
84-
Image.file(File(pickedFile.path));
84+
image = Image.file(File(pickedFile.path));
8585
}
86-
...
8786
```
8887

8988
Or, using bytes:
9089

90+
<?code-excerpt "example/lib/readme_excerpts.dart (ImageFromBytes)"?>
9191
```dart
92-
...
93-
Image.memory(await pickedFile.readAsBytes())
94-
...
92+
image = Image.memory(await pickedFile.readAsBytes());
9593
```
9694

9795
[1]: https://pub.dev/packages/image_picker
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'dart:convert';
6+
import 'dart:typed_data';
7+
8+
import 'package:flutter/material.dart';
9+
import 'package:flutter/services.dart';
10+
import 'package:flutter_test/flutter_test.dart';
11+
import 'package:image_picker_for_web_integration_tests/readme_excerpts.dart';
12+
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
13+
import 'package:integration_test/integration_test.dart';
14+
15+
void main() {
16+
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
17+
18+
testWidgets('getImageFromPath loads image from XFile path',
19+
(WidgetTester tester) async {
20+
final XFile file = createXFileWeb();
21+
22+
// Use the excerpt code to get an Image from the XFile path.
23+
final Image image = getImageFromPath(file);
24+
25+
await pumpImage(tester, image);
26+
27+
// Check if Image widget is present.
28+
expect(find.byType(Image), findsOneWidget);
29+
});
30+
31+
testWidgets('getImageFromBytes loads image from XFile bytes',
32+
(WidgetTester tester) async {
33+
final XFile file = createXFileWeb();
34+
35+
// Use the excerpt code to get an Image from the XFile byte data.
36+
final Image image = await getImageFromBytes(file);
37+
38+
await pumpImage(tester, image);
39+
40+
// Check if Image widget is present.
41+
expect(find.byType(Image), findsOneWidget);
42+
});
43+
}
44+
45+
/// Creates an XFile with a 1x1 png file.
46+
XFile createXFileWeb() {
47+
const String pixel = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR'
48+
'42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=';
49+
final Uint8List data = base64Decode(pixel);
50+
return XFile.fromData(
51+
data,
52+
name: 'identity.png',
53+
mimeType: 'image/png',
54+
lastModified: DateTime.now(),
55+
);
56+
}
57+
58+
/// Pumps an [image] widget into a [tester].
59+
Future<void> pumpImage(WidgetTester tester, Image image) async {
60+
await tester.pumpWidget(MaterialApp(
61+
home: Scaffold(
62+
body: image,
63+
),
64+
));
65+
}

0 commit comments

Comments
 (0)