Skip to content

Commit 87ea02c

Browse files
cynthiajoanCynthia Jianga-maurice
authored
feat(storage, windows): Add windows support (#11617)
* pigeon template setup * make storage macOS running * method channel implementation update * android compilable * android emulator upload succeed * add more task listener * Get event channel working * pause iOS for now * first windows checkin * update message.dart async * compilable example * add the c++ into pubspec * cmake changes to test the mono cpp lib * make windows event channel working * Implement more Storage for iOS functionality * sdk demo ready * make ios e2e test build * more e2e test fix * update with pigeon/messages.dart change * fix the error message * make e2e test pass (android) * android e2e test * make storage iOS pass e2e * Add license header * code format * Update unit test, remove ones that's not work with pigeon * add symbolic link for macos files * make pigeon generated compatible with both iOS and macOS * fix for analyze check * add missing analyze fix * more touch * get windows pass e2e tests * more e2e fix * address part of review comments, majorly android ones * format changes * addressing the iOS feedback * update with cleanup * address the analyze check * update e2e test for windows * fix a few e2e issue * fix the get data return value * to address some review comments * remove the example auto generate test * update pigeon version * some tweak * add comments for a sleep timing * format cpp and objc files * add header comments * remove debug output * remove dart debug output * more format fix * fix the analyze --------- Co-authored-by: Cynthia Jiang <[email protected]> Co-authored-by: a-maurice <[email protected]>
1 parent 8cfc69b commit 87ea02c

Some content is hidden

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

44 files changed

+4567
-230
lines changed

packages/firebase_auth/firebase_auth/windows/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ target_link_libraries(${PLUGIN_NAME} PRIVATE "${firebase_libs}")
4848

4949
target_include_directories(${PLUGIN_NAME} INTERFACE
5050
"${CMAKE_CURRENT_SOURCE_DIR}/include")
51-
target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin)
51+
target_link_libraries(${PLUGIN_NAME} PUBLIC flutter flutter_wrapper_plugin)
5252

5353
# List of absolute paths to libraries that should be bundled with the plugin.
5454
# This list could contain prebuilt libraries, or libraries created by an

packages/firebase_core/firebase_core/windows/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,11 @@ endforeach()
105105

106106
set(ADDITIONAL_LIBS advapi32 ws2_32 crypt32 rpcrt4 ole32 icu)
107107

108-
target_link_libraries(${PLUGIN_NAME} PRIVATE "${FIREBASE_LIBS}" "${ADDITIONAL_LIBS}")
108+
target_link_libraries(${PLUGIN_NAME} PUBLIC "${FIREBASE_LIBS}" "${ADDITIONAL_LIBS}")
109109

110110
target_include_directories(${PLUGIN_NAME} INTERFACE
111111
"${CMAKE_CURRENT_SOURCE_DIR}/include")
112-
target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin)
112+
target_link_libraries(${PLUGIN_NAME} PUBLIC flutter flutter_wrapper_plugin)
113113

114114
# List of absolute paths to libraries that should be bundled with the plugin.
115115
# This list could contain prebuilt libraries, or libraries created by an

packages/firebase_storage/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/GeneratedAndroidFirebaseStorage.java

+22-20
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2023, the Chromium project authors. Please see the AUTHORS file
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
4-
// Autogenerated from Pigeon (v9.2.5), do not edit directly.
4+
// Autogenerated from Pigeon (v11.0.1), do not edit directly.
55
// See also: https://pub.dev/packages/pigeon
66

77
package io.flutter.plugins.firebase.storage;
@@ -812,7 +812,7 @@ static void setup(
812812
BasicMessageChannel<Object> channel =
813813
new BasicMessageChannel<>(
814814
binaryMessenger,
815-
"dev.flutter.pigeon.FirebaseStorageHostApi.getReferencebyPath",
815+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.getReferencebyPath",
816816
getCodec());
817817
if (api != null) {
818818
channel.setMessageHandler(
@@ -845,7 +845,7 @@ public void error(Throwable error) {
845845
BasicMessageChannel<Object> channel =
846846
new BasicMessageChannel<>(
847847
binaryMessenger,
848-
"dev.flutter.pigeon.FirebaseStorageHostApi.setMaxOperationRetryTime",
848+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.setMaxOperationRetryTime",
849849
getCodec());
850850
if (api != null) {
851851
channel.setMessageHandler(
@@ -878,7 +878,7 @@ public void error(Throwable error) {
878878
BasicMessageChannel<Object> channel =
879879
new BasicMessageChannel<>(
880880
binaryMessenger,
881-
"dev.flutter.pigeon.FirebaseStorageHostApi.setMaxUploadRetryTime",
881+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.setMaxUploadRetryTime",
882882
getCodec());
883883
if (api != null) {
884884
channel.setMessageHandler(
@@ -911,7 +911,7 @@ public void error(Throwable error) {
911911
BasicMessageChannel<Object> channel =
912912
new BasicMessageChannel<>(
913913
binaryMessenger,
914-
"dev.flutter.pigeon.FirebaseStorageHostApi.setMaxDownloadRetryTime",
914+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.setMaxDownloadRetryTime",
915915
getCodec());
916916
if (api != null) {
917917
channel.setMessageHandler(
@@ -944,7 +944,7 @@ public void error(Throwable error) {
944944
BasicMessageChannel<Object> channel =
945945
new BasicMessageChannel<>(
946946
binaryMessenger,
947-
"dev.flutter.pigeon.FirebaseStorageHostApi.useStorageEmulator",
947+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.useStorageEmulator",
948948
getCodec());
949949
if (api != null) {
950950
channel.setMessageHandler(
@@ -981,7 +981,7 @@ public void error(Throwable error) {
981981
BasicMessageChannel<Object> channel =
982982
new BasicMessageChannel<>(
983983
binaryMessenger,
984-
"dev.flutter.pigeon.FirebaseStorageHostApi.referenceDelete",
984+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referenceDelete",
985985
getCodec());
986986
if (api != null) {
987987
channel.setMessageHandler(
@@ -1013,7 +1013,7 @@ public void error(Throwable error) {
10131013
BasicMessageChannel<Object> channel =
10141014
new BasicMessageChannel<>(
10151015
binaryMessenger,
1016-
"dev.flutter.pigeon.FirebaseStorageHostApi.referenceGetDownloadURL",
1016+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referenceGetDownloadURL",
10171017
getCodec());
10181018
if (api != null) {
10191019
channel.setMessageHandler(
@@ -1045,7 +1045,7 @@ public void error(Throwable error) {
10451045
BasicMessageChannel<Object> channel =
10461046
new BasicMessageChannel<>(
10471047
binaryMessenger,
1048-
"dev.flutter.pigeon.FirebaseStorageHostApi.referenceGetMetaData",
1048+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referenceGetMetaData",
10491049
getCodec());
10501050
if (api != null) {
10511051
channel.setMessageHandler(
@@ -1077,7 +1077,7 @@ public void error(Throwable error) {
10771077
BasicMessageChannel<Object> channel =
10781078
new BasicMessageChannel<>(
10791079
binaryMessenger,
1080-
"dev.flutter.pigeon.FirebaseStorageHostApi.referenceList",
1080+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referenceList",
10811081
getCodec());
10821082
if (api != null) {
10831083
channel.setMessageHandler(
@@ -1110,7 +1110,7 @@ public void error(Throwable error) {
11101110
BasicMessageChannel<Object> channel =
11111111
new BasicMessageChannel<>(
11121112
binaryMessenger,
1113-
"dev.flutter.pigeon.FirebaseStorageHostApi.referenceListAll",
1113+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referenceListAll",
11141114
getCodec());
11151115
if (api != null) {
11161116
channel.setMessageHandler(
@@ -1142,7 +1142,7 @@ public void error(Throwable error) {
11421142
BasicMessageChannel<Object> channel =
11431143
new BasicMessageChannel<>(
11441144
binaryMessenger,
1145-
"dev.flutter.pigeon.FirebaseStorageHostApi.referenceGetData",
1145+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referenceGetData",
11461146
getCodec());
11471147
if (api != null) {
11481148
channel.setMessageHandler(
@@ -1179,7 +1179,7 @@ public void error(Throwable error) {
11791179
BasicMessageChannel<Object> channel =
11801180
new BasicMessageChannel<>(
11811181
binaryMessenger,
1182-
"dev.flutter.pigeon.FirebaseStorageHostApi.referencePutData",
1182+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referencePutData",
11831183
getCodec());
11841184
if (api != null) {
11851185
channel.setMessageHandler(
@@ -1220,7 +1220,7 @@ public void error(Throwable error) {
12201220
BasicMessageChannel<Object> channel =
12211221
new BasicMessageChannel<>(
12221222
binaryMessenger,
1223-
"dev.flutter.pigeon.FirebaseStorageHostApi.referencePutString",
1223+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referencePutString",
12241224
getCodec());
12251225
if (api != null) {
12261226
channel.setMessageHandler(
@@ -1263,7 +1263,7 @@ public void error(Throwable error) {
12631263
BasicMessageChannel<Object> channel =
12641264
new BasicMessageChannel<>(
12651265
binaryMessenger,
1266-
"dev.flutter.pigeon.FirebaseStorageHostApi.referencePutFile",
1266+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referencePutFile",
12671267
getCodec());
12681268
if (api != null) {
12691269
channel.setMessageHandler(
@@ -1304,7 +1304,7 @@ public void error(Throwable error) {
13041304
BasicMessageChannel<Object> channel =
13051305
new BasicMessageChannel<>(
13061306
binaryMessenger,
1307-
"dev.flutter.pigeon.FirebaseStorageHostApi.referenceDownloadFile",
1307+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referenceDownloadFile",
13081308
getCodec());
13091309
if (api != null) {
13101310
channel.setMessageHandler(
@@ -1343,7 +1343,7 @@ public void error(Throwable error) {
13431343
BasicMessageChannel<Object> channel =
13441344
new BasicMessageChannel<>(
13451345
binaryMessenger,
1346-
"dev.flutter.pigeon.FirebaseStorageHostApi.referenceUpdateMetadata",
1346+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.referenceUpdateMetadata",
13471347
getCodec());
13481348
if (api != null) {
13491349
channel.setMessageHandler(
@@ -1375,7 +1375,9 @@ public void error(Throwable error) {
13751375
{
13761376
BasicMessageChannel<Object> channel =
13771377
new BasicMessageChannel<>(
1378-
binaryMessenger, "dev.flutter.pigeon.FirebaseStorageHostApi.taskPause", getCodec());
1378+
binaryMessenger,
1379+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.taskPause",
1380+
getCodec());
13791381
if (api != null) {
13801382
channel.setMessageHandler(
13811383
(message, reply) -> {
@@ -1407,7 +1409,7 @@ public void error(Throwable error) {
14071409
BasicMessageChannel<Object> channel =
14081410
new BasicMessageChannel<>(
14091411
binaryMessenger,
1410-
"dev.flutter.pigeon.FirebaseStorageHostApi.taskResume",
1412+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.taskResume",
14111413
getCodec());
14121414
if (api != null) {
14131415
channel.setMessageHandler(
@@ -1440,7 +1442,7 @@ public void error(Throwable error) {
14401442
BasicMessageChannel<Object> channel =
14411443
new BasicMessageChannel<>(
14421444
binaryMessenger,
1443-
"dev.flutter.pigeon.FirebaseStorageHostApi.taskCancel",
1445+
"dev.flutter.pigeon.firebase_storage_platform_interface.FirebaseStorageHostApi.taskCancel",
14441446
getCodec());
14451447
if (api != null) {
14461448
channel.setMessageHandler(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Miscellaneous
2+
*.class
3+
*.log
4+
*.pyc
5+
*.swp
6+
.DS_Store
7+
.atom/
8+
.buildlog/
9+
.history
10+
.svn/
11+
migrate_working_dir/
12+
13+
# IntelliJ related
14+
*.iml
15+
*.ipr
16+
*.iws
17+
.idea/
18+
19+
# The .vscode folder contains launch configuration and tasks you configure in
20+
# VS Code which you may wish to be included in version control, so this line
21+
# is commented out by default.
22+
#.vscode/
23+
24+
# Flutter/Dart/Pub related
25+
**/doc/api/
26+
**/ios/Flutter/.last_build_id
27+
.dart_tool/
28+
.flutter-plugins
29+
.flutter-plugins-dependencies
30+
.packages
31+
.pub-cache/
32+
.pub/
33+
/build/
34+
35+
# Symbolication related
36+
app.*.symbols
37+
38+
# Obfuscation related
39+
app.*.map.json
40+
41+
# Android Studio will place build artifacts here
42+
/android/app/debug
43+
/android/app/profile
44+
/android/app/release
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# This file tracks properties of this Flutter project.
2+
# Used by Flutter tool to assess capabilities and perform upgrades etc.
3+
#
4+
# This file should be version controlled and should not be manually edited.
5+
6+
version:
7+
revision: "2e05371c88da377d72bb1de95dcd25b4cbe3fe1a"
8+
channel: "master"
9+
10+
project_type: app
11+
12+
# Tracks metadata for the flutter migrate command
13+
migration:
14+
platforms:
15+
- platform: root
16+
create_revision: 2e05371c88da377d72bb1de95dcd25b4cbe3fe1a
17+
base_revision: 2e05371c88da377d72bb1de95dcd25b4cbe3fe1a
18+
- platform: windows
19+
create_revision: 2e05371c88da377d72bb1de95dcd25b4cbe3fe1a
20+
base_revision: 2e05371c88da377d72bb1de95dcd25b4cbe3fe1a
21+
22+
# User provided section
23+
24+
# List of Local paths (relative to this file) that should be
25+
# ignored by the migrate tool.
26+
#
27+
# Files that are not part of the templates will be ignored by default.
28+
unmanaged_files:
29+
- 'lib/main.dart'
30+
- 'ios/Runner.xcodeproj/project.pbxproj'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>IDEDidComputeMac32BitWarning</key>
6+
<true/>
7+
</dict>
8+
</plist>

packages/firebase_storage/firebase_storage/example/lib/firebase_options.dart

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class DefaultFirebaseOptions {
3131
return ios;
3232
case TargetPlatform.macOS:
3333
return macos;
34+
case TargetPlatform.windows:
35+
return android;
3436
}
3537

3638
throw UnsupportedError(

packages/firebase_storage/firebase_storage/example/lib/main.dart

+33-6
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,15 @@ Future<void> main() async {
2121
options: DefaultFirebaseOptions.currentPlatform,
2222
);
2323

24-
final emulatorHost =
25-
(!kIsWeb && defaultTargetPlatform == TargetPlatform.android)
26-
? '10.0.2.2'
27-
: 'localhost';
28-
29-
await FirebaseStorage.instance.useStorageEmulator(emulatorHost, 9199);
24+
if (defaultTargetPlatform != TargetPlatform.windows) {
25+
// window currently don't support storage emulator
26+
final emulatorHost =
27+
(!kIsWeb && defaultTargetPlatform == TargetPlatform.android)
28+
? '10.0.2.2'
29+
: 'localhost';
30+
31+
await FirebaseStorage.instance.useStorageEmulator(emulatorHost, 9199);
32+
}
3033

3134
runApp(StorageExampleApp());
3235
}
@@ -206,6 +209,18 @@ class _TaskManager extends State<TaskManager> {
206209
);
207210
}
208211

212+
Future<void> _delete(Reference ref) async {
213+
await ref.delete();
214+
215+
ScaffoldMessenger.of(context).showSnackBar(
216+
SnackBar(
217+
content: Text(
218+
'Success!\n deleted ${ref.name} \n from bucket: ${ref.bucket}\n '
219+
'at path: ${ref.fullPath} \n'),
220+
),
221+
);
222+
}
223+
209224
@override
210225
Widget build(BuildContext context) {
211226
return Scaffold(
@@ -253,6 +268,9 @@ class _TaskManager extends State<TaskManager> {
253268
return _downloadFile(_uploadTasks[index].snapshot.ref);
254269
}
255270
},
271+
onDelete: () async {
272+
return _delete(_uploadTasks[index].snapshot.ref);
273+
},
256274
),
257275
),
258276
);
@@ -268,6 +286,7 @@ class UploadTaskListTile extends StatelessWidget {
268286
required this.onDismissed,
269287
required this.onDownload,
270288
required this.onDownloadLink,
289+
required this.onDelete,
271290
}) : super(key: key);
272291

273292
/// The [UploadTask].
@@ -282,6 +301,9 @@ class UploadTaskListTile extends StatelessWidget {
282301
/// Triggered when the user presses the "link" button on a completed upload task.
283302
final VoidCallback /*!*/ onDownloadLink;
284303

304+
/// Triggered when the user presses the "delete" button on a completed upload task.
305+
final VoidCallback /*!*/ onDelete;
306+
285307
/// Displays the current transferred bytes of the task.
286308
String _bytesTransferred(TaskSnapshot snapshot) {
287309
return '${snapshot.bytesTransferred}/${snapshot.totalBytes}';
@@ -347,6 +369,11 @@ class UploadTaskListTile extends StatelessWidget {
347369
icon: const Icon(Icons.link),
348370
onPressed: onDownloadLink,
349371
),
372+
if (state == TaskState.success)
373+
IconButton(
374+
icon: const Icon(Icons.delete),
375+
onPressed: onDelete,
376+
),
350377
],
351378
),
352379
),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
flutter/ephemeral/
2+
3+
# Visual Studio user-specific files.
4+
*.suo
5+
*.user
6+
*.userosscache
7+
*.sln.docstates
8+
9+
# Visual Studio build-related files.
10+
x64/
11+
x86/
12+
13+
# Visual Studio cache files
14+
# files ending in .cache can be ignored
15+
*.[Cc]ache
16+
# but keep track of directories ending in .cache
17+
!*.[Cc]ache/

0 commit comments

Comments
 (0)