| // Copyright 2014 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import Foundation | |
| import AppKit | |
| protocol NativeViewControllerDelegate: NSObjectProtocol { | |
| func didTapIncrementButton() | |
| } | |
| /** | |
| The code behind a native view to be displayed in the `MainFlutterViewController` | |
| as an embed segue. If any storyboard view inherits from this class definition, | |
| it should contain a function to handle for `handleIncrement` | |
| */ | |
| class NativeViewController: NSViewController { | |
| var count: Int? | |
| var labelText: String { | |
| get { | |
| let count = self.count ?? 0 | |
| return "Flutter button tapped \(count) time\(count == 1 ? "" : "s")" | |
| } | |
| } | |
| var delegate: NativeViewControllerDelegate? | |
| @IBOutlet weak var incrementLabel: NSTextField! | |
| @IBAction func handleIncrement(_ sender: Any) { | |
| self.delegate?.didTapIncrementButton() | |
| } | |
| override func viewDidLoad() { | |
| super.viewDidLoad() | |
| setState(for: 0) | |
| } | |
| func didReceiveIncrement() { | |
| setState(for: (self.count ?? 0) + 1) | |
| } | |
| func setState(for count: Int) { | |
| self.count = count | |
| self.incrementLabel.stringValue = labelText | |
| } | |
| } |