Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/image_picker/image_picker_for_web/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 3.0.4

* Improves README example and updates it to use code excerpts.

## 3.0.3

* Migrates package and tests to `package:web`.
Expand Down
12 changes: 5 additions & 7 deletions packages/image_picker/image_picker_for_web/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,22 +76,20 @@ The instance will also let you retrieve the bytes of the selected file across al

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

<?code-excerpt "example/lib/readme_excerpts.dart (ImageFromPath)"?>
```dart
...
if (kIsWeb) {
Image.network(pickedFile.path);
image = Image.network(pickedFile.path);
} else {
Image.file(File(pickedFile.path));
image = Image.file(File(pickedFile.path));
}
...
```

Or, using bytes:

<?code-excerpt "example/lib/readme_excerpts.dart (ImageFromBytes)"?>
```dart
...
Image.memory(await pickedFile.readAsBytes())
...
image = Image.memory(await pickedFile.readAsBytes());
```

[1]: https://pub.dev/packages/image_picker
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:convert';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:image_picker_for_web_integration_tests/readme_excerpts.dart';
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
import 'package:integration_test/integration_test.dart';

void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();

testWidgets('getImageFromPath loads image from XFile path',
(WidgetTester tester) async {
final XFile file = createXFileWeb();

// Use the excerpt code to get an Image from the XFile path.
final Image image = getImageFromPath(file);

await pumpImage(tester, image);

// Check if Image widget is present.
expect(find.byType(Image), findsOneWidget);
});

testWidgets('getImageFromBytes loads image from XFile bytes',
(WidgetTester tester) async {
final XFile file = createXFileWeb();

// Use the excerpt code to get an Image from the XFile byte data.
final Image image = await getImageFromBytes(file);

await pumpImage(tester, image);

// Check if Image widget is present.
expect(find.byType(Image), findsOneWidget);
});
}

/// Creates an XFile with a 1x1 png file.
XFile createXFileWeb() {
const String pixel = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR'
'42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=';
final Uint8List data = base64Decode(pixel);
return XFile.fromData(
data,
name: 'identity.png',
mimeType: 'image/png',
lastModified: DateTime.now(),
);
}

/// Pumps an [image] widget into a [tester].
Future<void> pumpImage(WidgetTester tester, Image image) async {
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: image,
),
));
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';

/// Demonstrates creating an Image widget from an XFile's path.
Image getImageFromPath(XFile pickedFile) {
final Image image;

// #docregion ImageFromPath
if (kIsWeb) {
image = Image.network(pickedFile.path);
} else {
image = Image.file(File(pickedFile.path));
}
// #enddocregion ImageFromPath

return image;
}

/// Demonstrates creating an Image widget from an XFile's bytes.
Future<Image> getImageFromBytes(XFile pickedFile) async {
final Image image;

// #docregion ImageFromBytes
image = Image.memory(await pickedFile.readAsBytes());
// #enddocregion ImageFromBytes

return image;
}
2 changes: 1 addition & 1 deletion packages/image_picker/image_picker_for_web/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: image_picker_for_web
description: Web platform implementation of image_picker
repository: https://github.com/flutter/packages/tree/main/packages/image_picker/image_picker_for_web
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22
version: 3.0.3
version: 3.0.4

environment:
sdk: ^3.3.0
Expand Down
1 change: 0 additions & 1 deletion script/configs/temp_exclude_excerpt.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
# https://github.com/flutter/flutter/issues/102679
- espresso
- go_router_builder
- image_picker_for_web
- in_app_purchase/in_app_purchase
- palette_generator
- pointer_interceptor
Expand Down