Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 24ae23b

Browse files
migrate file_selector_windows from cpp to dart
Co-authored-by: Alejandro Pinola <[email protected]>
1 parent b828242 commit 24ae23b

Some content is hidden

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

56 files changed

+1932
-2422
lines changed

packages/file_selector/file_selector_windows/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.0.0
2+
3+
* Migrates implementation from Cpp to Dart.
4+
15
## 0.9.1+4
26

37
* Changes XTypeGroup initialization from final to const.

packages/file_selector/file_selector_windows/example/lib/get_directory_page.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import 'package:flutter/material.dart';
99
/// then displays the selected directory in a dialog.
1010
class GetDirectoryPage extends StatelessWidget {
1111
/// Default Constructor
12-
const GetDirectoryPage({Key? key}) : super(key: key);
12+
const GetDirectoryPage({super.key});
1313

1414
Future<void> _getDirectoryPath(BuildContext context) async {
1515
const String confirmButtonText = 'Choose';
@@ -58,7 +58,7 @@ class GetDirectoryPage extends StatelessWidget {
5858
/// Widget that displays a text file in a dialog.
5959
class TextDisplay extends StatelessWidget {
6060
/// Creates a `TextDisplay`.
61-
const TextDisplay(this.directoryPath, {Key? key}) : super(key: key);
61+
const TextDisplay(this.directoryPath, {super.key});
6262

6363
/// The path selected in the dialog.
6464
final String directoryPath;

packages/file_selector/file_selector_windows/example/lib/home_page.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
77
/// Home Page of the application.
88
class HomePage extends StatelessWidget {
99
/// Default Constructor
10-
const HomePage({Key? key}) : super(key: key);
10+
const HomePage({super.key});
1111

1212
@override
1313
Widget build(BuildContext context) {

packages/file_selector/file_selector_windows/example/lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ void main() {
1818
/// MyApp is the Main Application.
1919
class MyApp extends StatelessWidget {
2020
/// Default Constructor
21-
const MyApp({Key? key}) : super(key: key);
21+
const MyApp({super.key});
2222

2323
@override
2424
Widget build(BuildContext context) {

packages/file_selector/file_selector_windows/example/lib/open_image_page.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import 'package:flutter/material.dart';
1212
/// `openFiles`, then displays the selected images in a gallery dialog.
1313
class OpenImagePage extends StatelessWidget {
1414
/// Default Constructor
15-
const OpenImagePage({Key? key}) : super(key: key);
15+
const OpenImagePage({super.key});
1616

1717
Future<void> _openImageFile(BuildContext context) async {
1818
const XTypeGroup typeGroup = XTypeGroup(
@@ -65,8 +65,7 @@ class OpenImagePage extends StatelessWidget {
6565
/// Widget that displays an image in a dialog.
6666
class ImageDisplay extends StatelessWidget {
6767
/// Default Constructor.
68-
const ImageDisplay(this.fileName, this.filePath, {Key? key})
69-
: super(key: key);
68+
const ImageDisplay(this.fileName, this.filePath, {super.key});
7069

7170
/// The name of the selected file.
7271
final String fileName;

packages/file_selector/file_selector_windows/example/lib/open_multiple_images_page.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import 'package:flutter/material.dart';
1212
/// `openFiles`, then displays the selected images in a gallery dialog.
1313
class OpenMultipleImagesPage extends StatelessWidget {
1414
/// Default Constructor
15-
const OpenMultipleImagesPage({Key? key}) : super(key: key);
15+
const OpenMultipleImagesPage({super.key});
1616

1717
Future<void> _openImageFile(BuildContext context) async {
1818
const XTypeGroup jpgsTypeGroup = XTypeGroup(
@@ -69,7 +69,7 @@ class OpenMultipleImagesPage extends StatelessWidget {
6969
/// Widget that displays a text file in a dialog.
7070
class MultipleImagesDisplay extends StatelessWidget {
7171
/// Default Constructor.
72-
const MultipleImagesDisplay(this.files, {Key? key}) : super(key: key);
72+
const MultipleImagesDisplay(this.files, {super.key});
7373

7474
/// The files containing the images.
7575
final List<XFile> files;

packages/file_selector/file_selector_windows/example/lib/open_text_page.dart

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5+
import 'dart:typed_data';
6+
57
import 'package:file_selector_platform_interface/file_selector_platform_interface.dart';
68
import 'package:flutter/material.dart';
79

810
/// Screen that allows the user to select a text file using `openFile`, then
911
/// displays its contents in a dialog.
1012
class OpenTextPage extends StatelessWidget {
1113
/// Default Constructor
12-
const OpenTextPage({Key? key}) : super(key: key);
14+
const OpenTextPage({super.key});
1315

1416
Future<void> _openTextFile(BuildContext context) async {
1517
const XTypeGroup typeGroup = XTypeGroup(
@@ -23,7 +25,14 @@ class OpenTextPage extends StatelessWidget {
2325
return;
2426
}
2527
final String fileName = file.name;
26-
final String fileContent = await file.readAsString();
28+
29+
// This behavior defaults works when reading files encoded using UTF-16 LE.
30+
// If you have files encoded with UTF-8 you can simply use file.readAsString()
31+
// For other encodings, consider using Encoding.getByName() method, to get your encoder
32+
// before calling file.readAsString()
33+
final Uint8List bytes = await file.readAsBytes();
34+
final Uint16List utf16CodeUnits = bytes.buffer.asUint16List();
35+
final String fileContent = String.fromCharCodes(utf16CodeUnits);
2736

2837
await showDialog<void>(
2938
context: context,
@@ -62,8 +71,7 @@ class OpenTextPage extends StatelessWidget {
6271
/// Widget that displays a text file in a dialog.
6372
class TextDisplay extends StatelessWidget {
6473
/// Default Constructor.
65-
const TextDisplay(this.fileName, this.fileContent, {Key? key})
66-
: super(key: key);
74+
const TextDisplay(this.fileName, this.fileContent, {super.key});
6775

6876
/// The name of the selected file.
6977
final String fileName;

packages/file_selector/file_selector_windows/example/lib/save_text_page.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import 'package:flutter/material.dart';
1010
/// then writes text to a file at that location.
1111
class SaveTextPage extends StatelessWidget {
1212
/// Default Constructor
13-
SaveTextPage({Key? key}) : super(key: key);
13+
SaveTextPage({super.key});
1414

1515
final TextEditingController _nameController = TextEditingController();
1616
final TextEditingController _contentController = TextEditingController();
@@ -25,10 +25,12 @@ class SaveTextPage extends StatelessWidget {
2525
return;
2626
}
2727
final String text = _contentController.text;
28-
final Uint8List fileData = Uint8List.fromList(text.codeUnits);
28+
29+
// This behavior saves an Utf-16 LE encoded file.
30+
final Uint16List fileData = Uint16List.fromList(text.codeUnits);
2931
const String fileMimeType = 'text/plain';
30-
final XFile textFile =
31-
XFile.fromData(fileData, mimeType: fileMimeType, name: fileName);
32+
final XFile textFile = XFile.fromData(fileData.buffer.asUint8List(),
33+
mimeType: fileMimeType, name: fileName);
3234
await textFile.saveTo(path);
3335
}
3436

packages/file_selector/file_selector_windows/example/pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ publish_to: 'none'
44
version: 1.0.0
55

66
environment:
7-
sdk: ">=2.12.0 <3.0.0"
8-
flutter: ">=2.10.0"
7+
sdk: ">=2.17.0 <3.0.0"
8+
flutter: ">=3.0.0"
99

1010
dependencies:
11-
file_selector_platform_interface: ^2.2.0
11+
file_selector_platform_interface: ^2.3.0
1212
file_selector_windows:
1313
# When depending on this package from a real application you should use:
1414
# file_selector_windows: ^x.y.z

packages/file_selector/file_selector_windows/example/windows/flutter/generated_plugins.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
#
44

55
list(APPEND FLUTTER_PLUGIN_LIST
6-
file_selector_windows
76
)
87

98
list(APPEND FLUTTER_FFI_PLUGIN_LIST

0 commit comments

Comments
 (0)