在 Flutter 中使用 CupertinoApp 和 MaterialApp 的困惑

SAM*_*SAM 14 flutter

我在学习 Flutter 时遇到了两种类型的设计 MaterialApp 和 CupertinoApp。所以,我想知道我们是否要为 android 和 ios 创建一个应用程序,我们是否应该创建一个单独的应用程序,使用 MaterialApp for android 和一个单独的应用程序,使用 CupertinoApp for ios?或者,如果我们说,仅使用 MaterialApp 创建应用程序,该应用程序的 ios 版本会自动获得 CupertinoApp 吗?

Nel*_*ago 16

跨平台框架意味着它可以在多个操作系统中执行。这并不意味着它会自动相应地设计您的应用程序,这取决于开发人员。您必须检查您的应用程序正在运行的平台,您可以通过简单的条件来做到这一点:

if(Platform.isIOS){
   return CupertinoButton();
} else if(Platform.IsAndroid) {
    return ElevatedButton();
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用flutter_platform_widgets等包来帮助简化您的代码。


voi*_*oid 15

Material 小部件为 iOS、Android 和 Web 实现了 Material 设计语言。

Cupertino 小部件基于 Apple 的人机界面指南实现了当前的 iOS 设计语言。

为什么要编写 Cupertino 应用程序?

Material 设计语言适用于任何平台,而不仅仅是 Android。当您在 Flutter 中编写 Material 应用程序时,它在所有设备上都具有 Material 外观,甚至是 iOS。如果您希望您的应用程序看起来像标准的 iOS 风格的应用程序,那么您可以使用 Cupertino 库。

从技术上讲,您可以在 Android 或 iOS 上运行 Cupertino 应用程序,但是(由于许可问题)Cupertino 在 Android 上没有正确的字体。因此,在编写 Cupertino 应用程序时,请使用 iOS 专用设备。

您将实现一个 Cupertino 风格的购物应用程序,其中包含三个选项卡:一个用于产品列表,一个用于产品搜索,一个用于购物车。

如果您想阅读更多关于Cupertino和 的内容Material。检查以下链接:

库比蒂诺和材料

You can also use a flutter package called flutter_platform_widgets to check which platform your app is running on and use specific widgets(either Material or Cupertino)

This package link is : flutter_platform_widgets

I hope this helps

  • @void所以如果不是单独的项目,我仍然需要在添加小部件时检查每个点,看看它是否是iOS和Android,然后相应地添加小部件。您不认为这让事情变得更加复杂并且损害了 Flutter 作为“跨平台”框架的声誉吗? (9认同)
  • 为什么我们没有任何类型的 AdaptiveApp 可以根据平台自动使用 Material 和 Cupertino 小部件? (9认同)
  • 因此,如果我想创建具有适用于 Android 的材料设计应用程序和适用于 iPhone 的库比蒂诺设计应用程序的应用程序,那么我必须创建两个单独的项目吗? (3认同)
  • @WaqasYounis 不是“每个点”,只是您想要调整外观和感觉的部分。所以可能是顶级导航、对话框、应用栏。您可以在不同平台上保持大部分内容相同。 (3认同)
  • @ArthurKhazbs我的假设(带盐)是,由于构建抽象小部件需要额外的工作,这些小部件可以在每个平台的设计方面表现不同,并且由于设计取决于应用程序开发人员,因此 Flutter开发者将这篇文章留给了开发者和社区。他们在允许一个代码库构建到不同的平台方面做了很多工作,更不用说每个平台的不同设计了。但这就是 [flutter_platform_widgets](https://pub.dev/packages/flutter_platform_widgets) 的用武之地,它的抽象与您所建议的类似。 (2认同)