[file_selector_macos] Do not set nameFieldStringValue for NSOpenPanel (#9324)
file_selector_macos is trying to set [`nameFieldStringValue`](https://developer.apple.com/documentation/appkit/nssavepanel/namefieldstringvalue) for an `NSOpenPanel`. However, `nameFieldStringValue` does not support `NSOpenPanel`, it only supports `NSSavePanel`.
This PR does not set `nameFieldStringValue` if using `NSOpenPanel`. It also updates the tests to verify it works for `NSSavePanel` and not `NSOpenPanel`.

Fixes https://github.com/flutter/flutter/issues/169510.
## Pre-Review Checklist
[^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
diff --git a/packages/file_selector/file_selector_macos/CHANGELOG.md b/packages/file_selector/file_selector_macos/CHANGELOG.md
index 1c366c6..d8f59fe 100644
--- a/packages/file_selector/file_selector_macos/CHANGELOG.md
+++ b/packages/file_selector/file_selector_macos/CHANGELOG.md
@@ -1,5 +1,6 @@
-## NEXT
+## 0.9.4+3
+* Updates configuration to not set `nameFieldStringValue` for `NSOpenPanel`.
* Updates minimum supported SDK version to Flutter 3.27/Dart 3.6.
## 0.9.4+2
diff --git a/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift b/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift
index 304646a..12420d1 100644
--- a/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift
+++ b/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift
@@ -108,7 +108,8 @@
XCTAssertNotNil(panelController.openPanel)
if let panel = panelController.openPanel {
XCTAssertEqual(panel.directoryURL?.path, "/some/dir")
- XCTAssertEqual(panel.nameFieldStringValue, "a name")
+ // nameFieldStringValue is not set for NSOpenPanel, only for NSSavePanel
+ XCTAssertNotEqual(panel.nameFieldStringValue, "a name")
XCTAssertEqual(panel.prompt, "Open it!")
}
}
@@ -343,6 +344,7 @@
let called = XCTestExpectation()
let options = SavePanelOptions(
directoryPath: "/some/dir",
+ nameFieldStringValue: "a name",
prompt: "Save it!")
plugin.displaySavePanel(options: options) { result in
switch result {
@@ -358,6 +360,7 @@
XCTAssertNotNil(panelController.savePanel)
if let panel = panelController.savePanel {
XCTAssertEqual(panel.directoryURL?.path, "/some/dir")
+ XCTAssertEqual(panel.nameFieldStringValue, "a name")
XCTAssertEqual(panel.prompt, "Save it!")
}
}
diff --git a/packages/file_selector/file_selector_macos/macos/file_selector_macos/Sources/file_selector_macos/FileSelectorPlugin.swift b/packages/file_selector/file_selector_macos/macos/file_selector_macos/Sources/file_selector_macos/FileSelectorPlugin.swift
index e54e912..d231aeb 100644
--- a/packages/file_selector/file_selector_macos/macos/file_selector_macos/Sources/file_selector_macos/FileSelectorPlugin.swift
+++ b/packages/file_selector/file_selector_macos/macos/file_selector_macos/Sources/file_selector_macos/FileSelectorPlugin.swift
@@ -92,7 +92,13 @@
panel.directoryURL = URL(fileURLWithPath: directoryPath)
}
if let suggestedName = options.nameFieldStringValue {
- panel.nameFieldStringValue = suggestedName
+
+ // nameFieldStringValue is not used in NSOpenPanel (see header). Setting it will cause a log
+ // ("Ignoring NSSavePanel method sent to NSOpenPanel: setNameFieldStringValue:") that may be
+ // confusing to users.
+ if !(panel is NSOpenPanel) {
+ panel.nameFieldStringValue = suggestedName
+ }
}
if let prompt = options.prompt {
panel.prompt = prompt
diff --git a/packages/file_selector/file_selector_macos/pubspec.yaml b/packages/file_selector/file_selector_macos/pubspec.yaml
index 11f7ca3..365dff8 100644
--- a/packages/file_selector/file_selector_macos/pubspec.yaml
+++ b/packages/file_selector/file_selector_macos/pubspec.yaml
@@ -2,7 +2,7 @@
description: macOS implementation of the file_selector plugin.
repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_macos
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22
-version: 0.9.4+2
+version: 0.9.4+3
environment:
sdk: ^3.6.0