MainFlutterWindow.swift 1.47 KB
Newer Older
1 2 3 4 5 6 7
// 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 Cocoa
import FlutterMacOS

8 9 10 11 12 13
/**
 The main application window.

 Performs Flutter app initialization, and handles channel method calls over the
 `samples.flutter.io/platform_view` channel.
*/
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
class MainFlutterWindow: NSWindow {
  override func awakeFromNib() {
    let flutterViewController = FlutterViewController.init()
    let windowFrame = self.frame
    self.contentViewController = flutterViewController
    self.setFrame(windowFrame, display: true)

    RegisterGeneratedPlugins(registry: flutterViewController)
    RegisterMethodChannel(registry: flutterViewController)

    super.awakeFromNib()
  }

  func RegisterMethodChannel(registry: FlutterPluginRegistry) {
    let registrar = registry.registrar(forPlugin: "platform_view")
    let channel = FlutterMethodChannel(name: "samples.flutter.io/platform_view",
                                       binaryMessenger: registrar.messenger)
    channel.setMethodCallHandler({ (call, result) in
      if (call.method == "switchView") {
        let count = call.arguments as! Int
        let controller: NSViewController = PlatformViewController(
          withCount: count,
          onClose: { platformViewController in
            result(platformViewController.count)
          }
        )
        self.contentViewController?.presentAsSheet(controller)
      }
    })
  }
}