Skip to content

Commit 5743798

Browse files
authored
[file_selector_macos] Do not set nameFieldStringValue for NSOpenPanel (flutter#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`. ![Screenshot 2025-05-27 at 11 10 40 AM](https://github.com/user-attachments/assets/6af2016b-da93-482d-a5a2-5aeeac1abb47) Fixes flutter/flutter#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.
1 parent 6eebe72 commit 5743798

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed

packages/file_selector/file_selector_macos/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
## NEXT
1+
## 0.9.4+3
22

3+
* Updates configuration to not set `nameFieldStringValue` for `NSOpenPanel`.
34
* Updates minimum supported SDK version to Flutter 3.27/Dart 3.6.
45

56
## 0.9.4+2

packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ class ExampleTests: XCTestCase {
108108
XCTAssertNotNil(panelController.openPanel)
109109
if let panel = panelController.openPanel {
110110
XCTAssertEqual(panel.directoryURL?.path, "/some/dir")
111-
XCTAssertEqual(panel.nameFieldStringValue, "a name")
111+
// nameFieldStringValue is not set for NSOpenPanel, only for NSSavePanel
112+
XCTAssertNotEqual(panel.nameFieldStringValue, "a name")
112113
XCTAssertEqual(panel.prompt, "Open it!")
113114
}
114115
}
@@ -343,6 +344,7 @@ class ExampleTests: XCTestCase {
343344
let called = XCTestExpectation()
344345
let options = SavePanelOptions(
345346
directoryPath: "/some/dir",
347+
nameFieldStringValue: "a name",
346348
prompt: "Save it!")
347349
plugin.displaySavePanel(options: options) { result in
348350
switch result {
@@ -358,6 +360,7 @@ class ExampleTests: XCTestCase {
358360
XCTAssertNotNil(panelController.savePanel)
359361
if let panel = panelController.savePanel {
360362
XCTAssertEqual(panel.directoryURL?.path, "/some/dir")
363+
XCTAssertEqual(panel.nameFieldStringValue, "a name")
361364
XCTAssertEqual(panel.prompt, "Save it!")
362365
}
363366
}

packages/file_selector/file_selector_macos/macos/file_selector_macos/Sources/file_selector_macos/FileSelectorPlugin.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,13 @@ public class FileSelectorPlugin: NSObject, FlutterPlugin, FileSelectorApi {
9292
panel.directoryURL = URL(fileURLWithPath: directoryPath)
9393
}
9494
if let suggestedName = options.nameFieldStringValue {
95-
panel.nameFieldStringValue = suggestedName
95+
96+
// nameFieldStringValue is not used in NSOpenPanel (see header). Setting it will cause a log
97+
// ("Ignoring NSSavePanel method sent to NSOpenPanel: setNameFieldStringValue:") that may be
98+
// confusing to users.
99+
if !(panel is NSOpenPanel) {
100+
panel.nameFieldStringValue = suggestedName
101+
}
96102
}
97103
if let prompt = options.prompt {
98104
panel.prompt = prompt

packages/file_selector/file_selector_macos/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: file_selector_macos
22
description: macOS implementation of the file_selector plugin.
33
repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_macos
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22
5-
version: 0.9.4+2
5+
version: 0.9.4+3
66

77
environment:
88
sdk: ^3.6.0

0 commit comments

Comments
 (0)