Promptless AI is here soon - Production-ready contextual code. Don't just take our word for it. Know more
Know More

Cupertino or Material: Which Flutter Widget is the Best Choice?

No items found.


August 8, 2023


August 8, 2023

All front-end apps use design systems to help users complete tasks more efficiently. They may use a custom design system developed internally or an established design system.

Cupertino and Material are two popularly used Flutter widgets that let developers build user interfaces in various design languages and styles. These two widgets in Flutter provide a set of UI components. Still, they differ in visual design, user experience, and platform emulation.

Google created the Material widget, which can be used to create Android, iOS, Web, and Desktop apps. Apple created Cupertino. It is based on Apple's Human Interface Guidelines, which apply the current iOS design language.

You can create attractive user interfaces with these Flutter widgets that correspond with your chosen platform.  

In this article, we can learn about the difference between Cupertino and Material widgets in Flutter.

Why use Flutter Cupertino?

Material widget is for all platforms, not only for Android. Creating a MaterialApp design in Flutter will appear and feel the same on all devices, including iOS. If you want your app to look like a typical iOS app, you should use the Cupertino widget.

Cupertino widgets can technically run on Android and iOS; however, due to licensing concerns, Cupertino needs to have the correct typefaces on Android. As a result, when developing a Cupertino app, use an iOS-specific device.

Also, read how you can style your Flutter app with Cupertino to look and feel native.

Now let's dive deep into the Material and Cupertino widgets in Flutter.

Material widgets

Material Design is a Google-created design language that helps you build visually appealing and dynamic user experiences.

The Material widget is the starting point for creating MaterialApp Design-based user interfaces in Flutter applications. It is a canvas for rendering UI components such as elevation, shadows, transitions, and animations that comply with Material Design standards.

Material widget introduces a variety of components, including Navigator and Theme, that are required to create a Flutter app,

This widget is part of the Flutter SDK; no other dependencies are required. You can import so as follows:

After importing the Material widget, you can start using it in your Flutter app. 

Here is one example:

The MaterialApp acts as the root widget in the preceding example, while Scaffold represents a standard Material Design layout structure. Material Design components include the AppBar and Text widgets.

The MaterialApp widget offers a complete set of UI components, styles, typography, and utilities that allow developers to build visually consistent and pleasant Material Design interfaces in their Flutter apps.

Cupertino widgets

The Cupertino widget in Flutter is part of the Cupertino design language implementation, miming the visual style of iOS. The Cupertino widget is a collection of UI components that look and behave like iOS-native controls and widgets. It allows developers to create iOS-style interfaces in their Flutter apps.

Buttons, sliders, switches, pickers, navigation bars, dialogues, and other UI components are included in the Cupertino widget. These components adhere to the iOS design rules and give iOS users a pleasant experience.

Import the 'cupertino_icons' package into your Flutter project to use the Cupertino widget. This package contains the icons required for Cupertino-styled components. You can do so as follows:

After importing the Cupertino widget, you can start using it in your Flutter project. For example, you could make a CupertinoButton like this:

Because the Cupertino widget provides a consistent and native-like experience for iOS users, it is a popular choice for designing Flutter applications for iOS devices. It enables developers to use the Flutter framework to create apps that interface smoothly with the iOS platform.

What is the difference between Material and Cupertino widgets?

The main difference between the Cupertino and Material Flutter widgets is in their visual style and the user experience they deliver, as they simulate various platform design languages.

Platform Emulation

Material Widget

Based on Google's Material Design, the MaterialApp widget provides a design language that can be used across numerous platforms, including Android, iOS, web, and desktop. It includes various components and features that adhere to the Material Design regulations, ensuring uniformity across devices and platforms.

Cupertino Widget

In a Flutter app, the Cupertino widget strives to recreate the native iOS experience. It includes iOS-specific UI elements, including navigation bars, segmented controls, date pickers, etc. Using Cupertino Flutter widgets can help create a user interface that iOS users will find comfortable.

Visual Design

Material Widget

The Material widgets in Flutter follow Google's Material Design principles. It has a brighter, more colorful design, bold lettering, shadows, and transitions. MaterialApp Flutter widget prioritizes a tactile and realistic experience by including layers, depth, and the consistent use of features and components across platforms.

Cupertino Widget

The Cupertino widgets in Flutter follow the iOS Human Interface Guidelines to implement the visual design of iOS. It has rounded corners, subtle gradients, and a minimalistic design. The Cupertino Flutter widgets have an iOS-like look and feel, complete with iOS interactions and animations.


Material Widget

The MaterialApp widgets in Flutter are more adaptable and may be used on multiple platforms. Suppose you want to target a wide range of devices or adhere to Google's Material Design principles. The MaterialApp Flutter widget offers a rich set of components and design patterns that operate well across platforms.

Cupertino Widget

Cupertino Flutter widgets are often used when you wish to explicitly target iOS devices or create a UI that closely fits the iOS design patterns. This is especially important when developing apps that must keep a consistent appearance and feel with other iOS apps.

It's worth noting that while you can use either Cupertino or Material widgets, Flutter allows you to mix and match both in the same project. Because of this versatility, you may create customized user interfaces incorporating components from both design languages suited to your needs and preferences.

Cupertino or Material, which flutter widget is the best?

Your use case, target platform, and design needs ultimately determine the choice between the Cupertino and Material Flutter widgets. Both Flutter widget sets have advantages and disadvantages and are appropriate for different contexts. 

Here are some considerations to help you decide:

Select Cupertino if:

iOS-specific interactions

Cupertino Flutter widgets can deliver a more authentic iOS experience if your app relies on iOS-specific interactions and animations, such as swiping gestures, modal transitions, or familiar iOS navigation patterns.

Targeting iOS

Cupertino widgets in Flutter is the way to go if your primary focus is iOS and you want your app to have a native iOS look and feel. They strictly adhere to the iOS design requirements, allowing your app to blend in with other iOS applications.

Consistency with the iOS ecosystem

Cupertino Flutter widgets integrate well with the existing iOS design language to ensure aesthetic consistency with other iOS apps or maintain a cohesive user experience inside the iOS ecosystem.

Select MaterialApp if:

Flexibility and customizability

Material Flutter widgets include diverse components, themes, and customization options. MaterialApp widgets in Flutter provide a more extensive range of alternatives if you require more flexibility to adjust the UI to your design demands or like the vibrant and colorful Material Design style.

Cross-platform compatibility

MaterialApp widgets in Flutter are better if you target various platforms, such as Android, web, and desktop, or if you want your program to look consistent across devices. MaterialApp Flutter widget is intended to function across several platforms.

Google design language

MaterialApp widgets give a comprehensive set of tools, resources, and community support if you're designing apps that adhere to Google's design guidelines in a shared Material Design ecosystem.

Are you ready to build your next Flutter app?

In some circumstances, combining Cupertino and Material widgets may be the best option. Because of Flutter's flexible architecture, you can mix and match these widgets to build a unique user experience that capitalizes on the benefits of each design language.

Finally, your target platform, desired user experience, and design goals determine the choice between Cupertino and MaterialApp Flutter widgets. Consider your project's specific requirements and choose the widget set that best fits your objectives.

Want to make your Flutter cross-platform development even easier? Tyr DhiWise Flutter Builder!

DhiWise is a ProCode app development platform aiming to speed up software development by reducing tedious tasks. The platform has all the features required to make the development process more efficient and error-free.

So, if you want to develop a cross-platform app using Flutter, sign up with DhiWise today.

Frequently asked questions

Frequently asked questions

No items found.