How we leverage Flutter for multi platform desktop applications


At Unlock’d we regularly see demand for cross-platform (desktop) applications. Requests span from focus on the three major desktop platforms (Windows, Mac and Linux) to businesses expecting a seamless experiences across desktop and mobile platforms. To develop an application for each platform individually is a complex and costly endeavour. Flutter, an open-source UI toolkit from Google, has emerged as a game-changer in this domain. While initially focused on mobile app development, Flutter expanded its capabilities to cater to multi-platform desktop applications as well. In this article, we explore how we leverage Flutter to create desktop applications that run on all three major operating systems.

Understanding Flutter’s Desktop Support

Flutter’s journey from mobile to desktop began with experimental support for macOS in 2018. Since then, it has evolved to support multiple platforms, including Windows and Linux. In March 2020, Flutter released an alpha version of desktop support, which provided a more stable and mature development experience compared to the previous experimental release. This marked a significant step forward in making Flutter a viable option for desktop app development.

In August 2021, Google announced that Flutter desktop support had graduated to an official “stable” status. This meant that developers could confidently use Flutter for building production-quality desktop applications. The stable release brought increased reliability, performance improvements, and a more polished user experience. As Flutter’s desktop support matured, the ecosystem around it began to flourish. Third-party libraries and packages specifically designed for desktop apps started to emerge, providing additional functionality and easing the development process. The growth of the ecosystem further reinforced Flutter’s position as a versatile framework for cross-platform app development.

Designing Responsive User Interfaces

Flutter empowers developers to create beautiful and responsive user interfaces using its flexible widget system. Widgets in Flutter represent the building blocks of the UI, and they can adapt to different screen sizes and orientations. By utilising Flutter’s layout widgets, such as Row, Column, and Container, you can design interfaces that seamlessly scale across various desktop platforms. Flutter also provides support for platform-specific widgets, allowing you to leverage native UI components.

When working multi platform for desktop delivering a consistent user experience is one thing. But when extending support to mobile it becomes another challenge. While on mobile a menu is often in a (bottom) bar or in a drawer, on desktop the menu can usually be found in the top of your window or in the system menu. And that’s only one example of different user experiences on desktop vs mobile.

Further, desktop applications often require different input mechanisms compared to mobile apps. Flutter provides robust support for handling keyboard and mouse input, ensuring an intuitive user experience on desktop platforms. You can use Flutter’s GestureDetector and MouseRegion widgets to handle gestures and mouse events, respectively. Additionally, Flutter offers a navigation system that allows you to manage different screens and user flows within your application.

Testing and Debugging

Just like with any software development project, testing and debugging play a crucial role in ensuring the quality of your Flutter desktop application. Flutter provides a suite of testing tools and frameworks to help you write unit tests, integration tests, and widget tests. You can also utilise Flutter’s rich debugging tools, including the Flutter Inspector, which allows you to inspect and modify the UI hierarchy in real-time.

Besides the aforementioned testing possibilities, testing on real desktop devices and OS distributions is also required. At Unlock’d we have a variety of Windows, Mac and Linux machines to do so.

Foreign Function Interface (FFI),

Additionally Flutter provides support for Foreign Function Interface (FFI), enabling seamless integration of C and Rust code into your Flutter desktop application. FFI allows you to leverage existing native libraries or utilise low-level system APIs directly from your Flutter codebase. This capability opens up a world of possibilities, enabling you to access specialised functionality or optimise performance-critical sections of your application by leveraging the power of languages like C and Rust. With Flutter’s FFI support, you can combine the productivity and cross-platform benefits of Flutter with the raw power and versatility of native code, expanding the capabilities of your desktop application even further. Whether you need to interact with hardware peripherals, work with complex algorithms, or tap into existing libraries, Flutter’s FFI empowers you to seamlessly bridge the gap between Flutter and the world of native code.

Flutter has transformed the way businesses create multi-platform desktop applications. With its powerful framework, extensive widget library, and expanding ecosystem, Flutter empowers businesses to build visually stunning, responsive, and performant applications that run seamlessly on different operating systems. By embracing Flutter, businesses can save time, effort, and resources while delivering exceptional experiences to users across desktop platforms.

Want to discover more on how to develop your desktop application?

Contact us today to do a free intake to discuss your needs and the impact you want to create!