feat: custom native file picker showing hidden files/folders

Replaced file_picker's Load/Browse with a custom NativePickerRegistrar
Swift plugin that opens NSOpenPanel with showsHiddenFiles = true.
The file_picker package hardcodes this to false, making hidden folders
like ~/.claude invisible in its dialogs.

Changes:
- New NativePickerRegistrar.swift: custom NSOpenPanel with hidden files
- New NativePicker Dart service using method channel
- Browse: only shows folders (canChooseFiles=false), hidden visible
- Load: only shows .jsonl files, hidden folders visible
- Registered via AppDelegate.applicationDidFinishLaunching
- Removed file_picker dependency from home_screen imports
- Fixed all info-level lint issues (super params, null-aware, doc comment)
- Signed, notarized, stapled DMG
This commit is contained in:
Mathias Beaulieu-Duncan
2026-04-07 14:32:06 -04:00
parent 0b72c679bc
commit 780ef9378f
6 changed files with 154 additions and 15 deletions
+6 -6
View File
@@ -22,8 +22,8 @@ class ContentBlock {
class TextBlock extends ContentBlock {
final String text;
TextBlock({required this.text, required Map<String, dynamic> raw})
: super(type: 'text', raw: raw);
TextBlock({required this.text, required super.raw})
: super(type: 'text');
factory TextBlock.fromJson(Map<String, dynamic> json) {
return TextBlock(
@@ -40,8 +40,8 @@ class ThinkingBlock extends ContentBlock {
ThinkingBlock({
required this.thinking,
this.signature,
required Map<String, dynamic> raw,
}) : super(type: 'thinking', raw: raw);
required super.raw,
}) : super(type: 'thinking');
factory ThinkingBlock.fromJson(Map<String, dynamic> json) {
return ThinkingBlock(
@@ -63,8 +63,8 @@ class ToolUseBlock extends ContentBlock {
required this.name,
required this.input,
this.linkedResult,
required Map<String, dynamic> raw,
}) : super(type: 'tool_use', raw: raw);
required super.raw,
}) : super(type: 'tool_use');
factory ToolUseBlock.fromJson(Map<String, dynamic> json) {
return ToolUseBlock(