flutter包装widgets.dart,Material.dart和Cupertino.dart和使用哪个是什么之间



当使用扑朔迷离时,我经常绕着标准库中不同软件包暴露的类型。

例如FlutterError,但同样适用于其他小部件。在编写它并在VS代码中使用IntelliSense来解决导入的软件包,以便FlutterError可用,Intellisense为我提供了多个不同软件包的FlutterError:

在这种情况下,可从

获得
  • package:flutter/widgets.dart
  • package:flutter/foundation.dart
  • package:flutter/material.dart
  • package:flutter/cupertino.dart
  • package:flutter/rendering.dart

我的理解是material.dartcupertino.dart提供特定样式的小部件 - 但是我应该在MaterialApp(..)中导入哪个软件包,该软件包应该独立于平台,并且在iOS上也运行?

和 - 如果有所不同 - 应该使用哪一个,以便在Android&中自动使用平台特定的小部件。iOS的本地功能(如日期/钟纸(,以便datepicker自动是Android上的平台特定变体,并且iOS上的平台特定版本?

发生了什么,该类是在框架的下部定义的(此处为foundationFlutterError(

,然后使用export指令重新删除下层的内容。

这样做的主要目的是确保开发人员通常不需要5个以上的东西,而它们通常都需要全部。

例如, material.dart看起来很粗糙:

export 'package:flutter/widget.dart';
class RaisedButton { }

'软件包:flutter/widgets.dart'用于创建稍后用飞镖创建小部件,该小部件将在您的主体内部使用。dart并使您的代码更加清除。

'软件包:Flutter/Foundation.dart'必须使用实用程序类和功能来创建UIS的层。

'软件包:Flutter/Material.dart'如果要在应用程序中使用Android Framework。默认情况下,使用材料类型。没关系,您正在使用材料类型UI或Cupertino UI。您可以将Android UI用于iOS设备以及iOS UIS用于Android设备。

您可以从任何库中导入通用类。此示例:

import 'package:flutter/material.dart';
//import 'package:flutter/widgets.dart';
class Foo extends InheritedWidget {
}

无论您是从哪个库中导入的库,都将登陆相同的InheritedWidget实现。尝试评论每个导入,并通过CTRL 单击AndroidStudio中的InheritedWidget,将打开哪些带有实现的文件。

从我的角度来看,如果使用材料设计工作,则最好使用一个单一导入的import 'package:flutter/material.dart';而不是两个(来自material.dartwidgets.dart(。如果您的代码对UI库是中性的,则很明显从系统库中导入。

您无法使用从中性系统库中导入的通用类来在编译时间内自动切换在Cupertino和材料库之间。您应该明确使用特定的UI库小部件。

如果要在库之间切换,则应自己开发此逻辑。您可以阅读本文https://medium.com/flutter/do-flutter-apps-dream-of-platform-aware-widgets-7d7ed7b4624d作为起点。

最新更新