Skip to content

A very simple timer app similar to pomodoro which does not works on it own

Notifications You must be signed in to change notification settings

gaganyadav80/flutter-timer

This branch is 1 commit ahead of, 2 commits behind master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1f148af · Oct 16, 2023

History

6 Commits
Sep 19, 2023
Sep 21, 2023
Sep 20, 2023
Sep 22, 2023
Sep 20, 2023
Sep 20, 2023
Sep 19, 2023
Sep 19, 2023
Sep 19, 2023
Sep 20, 2023
Sep 19, 2023
Sep 19, 2023
Sep 19, 2023
Sep 20, 2023
Sep 19, 2023
Oct 16, 2023
Oct 16, 2023

Repository files navigation

flutter_timer

starter template for building menubar app in flutter

Use multi_windows branch for example with addtional windows (select include all branches when using this template)

multi_windows demo


Getting Started (for single window menu bar app only)

use this template or follow the following step in your flutter project:

  1. Change to Content of macos/Runner/AppDelegate.swift
import Cocoa
import FlutterMacOS

@NSApplicationMain
class AppDelegate: FlutterAppDelegate {
  var statusBar: StatusBarController?
  var popover = NSPopover.init()
  override init() {
    popover.behavior = NSPopover.Behavior.transient //to make the popover hide when the user clicks outside of it
  }
  override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
    return false
  }
  override func applicationDidFinishLaunching(_ aNotification: Notification) {
    let controller: FlutterViewController =
      mainFlutterWindow?.contentViewController as! FlutterViewController
    popover.contentSize = NSSize(width: 360, height: 360) //change this to your desired size
    popover.contentViewController = controller //set the content view controller for the popover to flutter view controller
    statusBar = StatusBarController.init(popover)
    mainFlutterWindow.close() //close the default flutter window
    super.applicationDidFinishLaunching(aNotification)
  }
}
  1. Add a new Swift file named 'StatusBarController.swift' in XCode Xcode > File > New > File... Select Swift File Name it StatusBarController.swift
  2. Add the following code to the StatusBarController.swift
import AppKit

class StatusBarController {
    private var statusBar: NSStatusBar
    private var statusItem: NSStatusItem
    private var popover: NSPopover

    init(_ popover: NSPopover) {
        self.popover = popover
        statusBar = NSStatusBar.init()
        statusItem = statusBar.statusItem(withLength: 28.0)

        if let statusBarButton = statusItem.button {
            statusBarButton.image = #imageLiteral(resourceName: "AppIcon") //change this to your desired image
            statusBarButton.image?.size = NSSize(width: 18.0, height: 18.0)
            statusBarButton.image?.isTemplate = true
            statusBarButton.action = #selector(togglePopover(sender:))
            statusBarButton.target = self
        }
    }

    @objc func togglePopover(sender: AnyObject) {
        if(popover.isShown) {
            hidePopover(sender)
        }
        else {
            showPopover(sender)
        }
    }

    func showPopover(_ sender: AnyObject) {
        if let statusBarButton = statusItem.button {
            popover.show(relativeTo: statusBarButton.bounds, of: statusBarButton, preferredEdge: NSRectEdge.maxY)
        }
    }

    func hidePopover(_ sender: AnyObject) {
        popover.performClose(sender)
    }
}
  1. Add the following to macos/Runner/Info.plist to hide the dock icon and application menu
<key>LSUIElement</key>
<true/>

To close the app programmatically, use the following code

exit(0)
  1. Done! You can now build your menubar app with flutter. Complete

This project is a starting point for a Flutter menubar application in macOS.

A few resources to get you started if this is your first Flutter project:

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

About

A very simple timer app similar to pomodoro which does not works on it own

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published