问题描述
假设有以下 NavigationView:
Struct ContentView: View {
@State var showRigthPane: Bool = true
var body: some View {
NavigationView {
Sidebar()
MiddlePane()
RightPane()
}.toolbar {
ToolbarItem(placement: .navigation) {
Button(action: toggleSidebar,label: {Image(systemName: "sidebar.left")})
}
ToolbarItem(placement: .primaryAction) {
Button(action: self.toggleRightPane,label: { Image() })
}
}
}
private func toggleRightPane() {
// ?
}
// collapsing sidebar - this works
private func toggleSidebar() {
NSApp.keyWindow?.initialFirstResponder?.tryToPerform(
#selector(NssplitViewController.toggleSidebar(_:)),with: nil)
}
}
如何实现 toggleRightPane()
函数来切换右窗格的可见性?
解决方法
更新以使用返回两个不同导航视图的计算属性。侧边栏的行为仍然很奇怪,但有一个变通办法,它是有用的。希望有人能弄清楚侧边栏的行为。
`import 'package:http/http.dart' as http;
import 'Events.dart';
class Services {
//
static const String url = 'https://my-json-
server.typicode.com/skrfffe1/deas/events';
static Future<List<Events>> getEvents() async{
try {
final response = await http.get(url);
if (200 == response.statusCode) {
final List<Events> events =
eventsFromMap(response.body).cast<Events>();
return events;
} else {
return List<Events>();
}
} catch (e) {
return List<Events>();
}
}
}`
,
尝试以下(无法测试)
struct ContentView: View {
@State private var showRigthPane = true
var body: some View {
NavigationView {
Sidebar()
MiddlePane()
if showRigthPane { // << here !!
RightPane()
}
}.toolbar {
ToolbarItem(placement: .primaryAction) {
Button(action: self.toggleRightPane,label: { Image() })
}
}
}
private func toggleRightPane() {
withAnimation {
self.showRigthPane.toggle() // << here !!
}
}
}