Skip to content

Commit 9a24904

Browse files
authored
[image_picker] Adopt code excerpts in README (#5523)
Improves image_picker_for_web README example and updates it to use code excerpts. Part of [flutter/flutter#102679](flutter/flutter#102679)
1 parent 1d0bb4f commit 9a24904

File tree

6 files changed

+110
-9
lines changed

6 files changed

+110
-9
lines changed

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+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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:io';
6+
7+
import 'package:flutter/foundation.dart';
8+
import 'package:flutter/widgets.dart';
9+
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
10+
11+
/// Demonstrates creating an Image widget from an XFile's path.
12+
Image getImageFromPath(XFile pickedFile) {
13+
final Image image;
14+
15+
// #docregion ImageFromPath
16+
if (kIsWeb) {
17+
image = Image.network(pickedFile.path);
18+
} else {
19+
image = Image.file(File(pickedFile.path));
20+
}
21+
// #enddocregion ImageFromPath
22+
23+
return image;
24+
}
25+
26+
/// Demonstrates creating an Image widget from an XFile's bytes.
27+
Future<Image> getImageFromBytes(XFile pickedFile) async {
28+
final Image image;
29+
30+
// #docregion ImageFromBytes
31+
image = Image.memory(await pickedFile.readAsBytes());
32+
// #enddocregion ImageFromBytes
33+
34+
return image;
35+
}

packages/image_picker/image_picker_for_web/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: image_picker_for_web
22
description: Web platform implementation of image_picker
33
repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_for_web
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22
5-
version: 3.0.3
5+
version: 3.0.4
66

77
environment:
88
sdk: ^3.3.0

script/configs/temp_exclude_excerpt.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
# https://github.com/flutter/flutter/issues/102679
88
- espresso
99
- go_router_builder
10-
- image_picker_for_web
1110
- in_app_purchase/in_app_purchase
1211
- palette_generator
1312
- pointer_interceptor

0 commit comments

Comments
 (0)