Migreer file_picker 11 → 12 (ontgrendelt wakelock_plus 1.7 + flutter_secure_storage 11) #1739

Closed
opened 2026-08-23 08:36:25 +00:00 by brenno · 0 comments
Owner

Achtergrond

file_picker 11 is de sleutelafhankelijkheid die drie andere upgrades blokkeert. De win32-dependency zit in de weg:

  • wakelock_plus >=1.6.1 vereist win32 ^6.0.1
  • flutter_secure_storage >=11.0.0 vereist win32 ^6.0.1 (via flutter_secure_storage_windows ^4.2.2)
  • file_picker >=8.3.3 <12.0.0 vereist win32 ^5.9.0

file_picker 12 migreert naar win32 ^6.0.0, wat het conflict oplost. Eén migratie ontgrendelt dus drie packages tegelijk.

Wat breekt in file_picker 12

Breaking changes

  1. pickFiles() allowMultiple default nu true — was false. Elke call-site die één bestand verwacht moet expliciet allowMultiple: false krijgen, of migreren naar de nieuwe pickFile()-methode.
  2. withData deprecated — gebruik PlatformFile.readAsBytes() na het picken.
  3. withReadStream deprecated — gebruik PlatformFile.readAsByteStream().
  4. readSequential deprecated.
  5. lockParentWindow deprecated — gebruik WindowsOptions.lockParentWindow / LinuxOptions.lockParentWindow.
  6. cancelUploadOnWindowBlur deprecated — gebruik WebOptions.cancelUploadOnWindowBlur.
  7. saveFile() fileName en bytes nu required — wij geven deze al mee, dus dit zou geen probleem moeten zijn.

Federated architectuur

file_picker 12 is opgesplitst in federated packages (file_picker_platform_interface, android_file_picker, file_picker_darwin, file_picker_linux, windows_file_picker, file_picker_web). Dit zou transparant moeten zijn voor onze code.

Call-sites die aangepast moeten worden

pickFiles() met withData: true (6 call-sites in lib/)

  • lib/services/image_service.dart (3 call-sites: regels 252, 272, 306)
  • lib/widgets/editors/chart_editor.dart (regel 392)
  • lib/widgets/shell/presentation_import_action.dart (regel 259, met allowMultiple: true)
  • lib/services/file/file_service_import.dart (regel 582)
  • lib/services/file/file_service_style_profile.dart (regel 414)
  • lib/widgets/dialogs/seal_timestamp_dialog.dart (regel 226)
  • lib/widgets/dialogs/settings_dialog.dart (regel 674)
  • lib/widgets/dialogs/parts/settings_dialog_style_builder.dart (regel 651)
  • lib/widgets/dialogs/openkat_server_report_dialog.dart (regel 512)

pickFiles() zonder withData (alleen .path gebruikt)

  • lib/services/file/file_service_import.dart (regel 596 — heeft wél withData: true)

saveFile() (al met fileName + bytes — zou moeten werken)

  • lib/services/document_export_service.dart (regel 372)
  • lib/services/file_service.dart (regels 258, 985)
  • lib/services/file/file_service_style_profile.dart (regel 259)
  • lib/services/file/file_service_package.dart (regel 56)
  • lib/services/file/file_service_dossier.dart (regel 87)
  • lib/services/export_service.dart (regels 274, 280)
  • lib/widgets/dialogs/seal_timestamp_dialog.dart (regel 202)

getDirectoryPath() (geen breaking changes verwacht)

  • lib/widgets/dialogs/settings_dialog.dart (regel 1026)
  • lib/widgets/dialogs/open_presentation_dialog.dart (regel 158)
  • lib/widgets/dialogs/slide_finder_dialog.dart (regel 204)
  • lib/widgets/dialogs/import_slides_dialog.dart (regel 108)
  • lib/widgets/dialogs/parts/image_carousel_picker_actions.dart (regel 624)
  • lib/widgets/shell/openkat_import_action_io.dart (regel 58)
  • lib/widgets/dialogs/settings/openkat_integration_panel.dart (regel 233)
  • lib/widgets/dialogs/openkat_server_report_dialog.dart (regel 525)
  • lib/widgets/presentation/session_export.dart (regel 311)
  • lib/widgets/dialogs/save_destination_dialog.dart (regel 89)
  • lib/widgets/dialogs/presentation_import_queue_dialog.dart (regel 105)

Tooling

  • tool/check_conventions.dart (regel 559-607) — heeft een check die withData: true in de argumenten zoekt. Deze check moet mogelijk aangepast worden naar de nieuwe readAsBytes()-pattern.
  • test/file_picker_extension_filter_test.dart — 7 matches, moet geüpdatet worden.

Aanpak

  1. Bump file_picker: ^11.0.2^12.0.0 in pubspec.yaml
  2. Bump wakelock_plus: ^1.5.2^1.7.0 in pubspec.yaml
  3. Bump flutter_secure_storage: ^10.3.1^11.0.0 in pubspec.yaml
  4. Voer flutter pub get uit
  5. Werk alle pickFiles() call-sites bij:
    • Voeg allowMultiple: false toe waar het ontbreekt (en single-file verwacht wordt)
    • Vervang withData: true door PlatformFile.readAsBytes() na het picken
  6. Werk tool/check_conventions.dart bij naar het nieuwe pattern
  7. Werk tests bij
  8. make check groen
  9. Beeldkeuring op macOS (file picker dialoog)

Geschiedenis

Onderzocht tijdens #1736 (Flutter 3.47.1 upgrade). Toen afgevallen vanwege de API-wijzigingen die een aparte PR vereisten.

## Achtergrond `file_picker 11` is de sleutelafhankelijkheid die drie andere upgrades blokkeert. De `win32`-dependency zit in de weg: - `wakelock_plus >=1.6.1` vereist `win32 ^6.0.1` - `flutter_secure_storage >=11.0.0` vereist `win32 ^6.0.1` (via `flutter_secure_storage_windows ^4.2.2`) - `file_picker >=8.3.3 <12.0.0` vereist `win32 ^5.9.0` `file_picker 12` migreert naar `win32 ^6.0.0`, wat het conflict oplost. Eén migratie ontgrendelt dus drie packages tegelijk. ## Wat breekt in file_picker 12 ### Breaking changes 1. **`pickFiles()` `allowMultiple` default nu `true`** — was `false`. Elke call-site die één bestand verwacht moet expliciet `allowMultiple: false` krijgen, of migreren naar de nieuwe `pickFile()`-methode. 2. **`withData` deprecated** — gebruik `PlatformFile.readAsBytes()` na het picken. 3. **`withReadStream` deprecated** — gebruik `PlatformFile.readAsByteStream()`. 4. **`readSequential` deprecated**. 5. **`lockParentWindow` deprecated** — gebruik `WindowsOptions.lockParentWindow` / `LinuxOptions.lockParentWindow`. 6. **`cancelUploadOnWindowBlur` deprecated** — gebruik `WebOptions.cancelUploadOnWindowBlur`. 7. **`saveFile()` `fileName` en `bytes` nu required** — wij geven deze al mee, dus dit zou geen probleem moeten zijn. ### Federated architectuur `file_picker 12` is opgesplitst in federated packages (`file_picker_platform_interface`, `android_file_picker`, `file_picker_darwin`, `file_picker_linux`, `windows_file_picker`, `file_picker_web`). Dit zou transparant moeten zijn voor onze code. ## Call-sites die aangepast moeten worden ### `pickFiles()` met `withData: true` (6 call-sites in lib/) - `lib/services/image_service.dart` (3 call-sites: regels 252, 272, 306) - `lib/widgets/editors/chart_editor.dart` (regel 392) - `lib/widgets/shell/presentation_import_action.dart` (regel 259, met `allowMultiple: true`) - `lib/services/file/file_service_import.dart` (regel 582) - `lib/services/file/file_service_style_profile.dart` (regel 414) - `lib/widgets/dialogs/seal_timestamp_dialog.dart` (regel 226) - `lib/widgets/dialogs/settings_dialog.dart` (regel 674) - `lib/widgets/dialogs/parts/settings_dialog_style_builder.dart` (regel 651) - `lib/widgets/dialogs/openkat_server_report_dialog.dart` (regel 512) ### `pickFiles()` zonder `withData` (alleen `.path` gebruikt) - `lib/services/file/file_service_import.dart` (regel 596 — heeft wél `withData: true`) ### `saveFile()` (al met `fileName` + `bytes` — zou moeten werken) - `lib/services/document_export_service.dart` (regel 372) - `lib/services/file_service.dart` (regels 258, 985) - `lib/services/file/file_service_style_profile.dart` (regel 259) - `lib/services/file/file_service_package.dart` (regel 56) - `lib/services/file/file_service_dossier.dart` (regel 87) - `lib/services/export_service.dart` (regels 274, 280) - `lib/widgets/dialogs/seal_timestamp_dialog.dart` (regel 202) ### `getDirectoryPath()` (geen breaking changes verwacht) - `lib/widgets/dialogs/settings_dialog.dart` (regel 1026) - `lib/widgets/dialogs/open_presentation_dialog.dart` (regel 158) - `lib/widgets/dialogs/slide_finder_dialog.dart` (regel 204) - `lib/widgets/dialogs/import_slides_dialog.dart` (regel 108) - `lib/widgets/dialogs/parts/image_carousel_picker_actions.dart` (regel 624) - `lib/widgets/shell/openkat_import_action_io.dart` (regel 58) - `lib/widgets/dialogs/settings/openkat_integration_panel.dart` (regel 233) - `lib/widgets/dialogs/openkat_server_report_dialog.dart` (regel 525) - `lib/widgets/presentation/session_export.dart` (regel 311) - `lib/widgets/dialogs/save_destination_dialog.dart` (regel 89) - `lib/widgets/dialogs/presentation_import_queue_dialog.dart` (regel 105) ### Tooling - `tool/check_conventions.dart` (regel 559-607) — heeft een check die `withData: true` in de argumenten zoekt. Deze check moet mogelijk aangepast worden naar de nieuwe `readAsBytes()`-pattern. - `test/file_picker_extension_filter_test.dart` — 7 matches, moet geüpdatet worden. ## Aanpak 1. Bump `file_picker: ^11.0.2` → `^12.0.0` in pubspec.yaml 2. Bump `wakelock_plus: ^1.5.2` → `^1.7.0` in pubspec.yaml 3. Bump `flutter_secure_storage: ^10.3.1` → `^11.0.0` in pubspec.yaml 4. Voer `flutter pub get` uit 5. Werk alle `pickFiles()` call-sites bij: - Voeg `allowMultiple: false` toe waar het ontbreekt (en single-file verwacht wordt) - Vervang `withData: true` door `PlatformFile.readAsBytes()` na het picken 6. Werk `tool/check_conventions.dart` bij naar het nieuwe pattern 7. Werk tests bij 8. `make check` groen 9. Beeldkeuring op macOS (file picker dialoog) ## Geschiedenis Onderzocht tijdens #1736 (Flutter 3.47.1 upgrade). Toen afgevallen vanwege de API-wijzigingen die een aparte PR vereisten.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1739
No description provided.