在使用flutter时,我经常遇到一种由标准库中的不同包公开的类型。
例如FlutterError
,但其他小部件也是如此。在编写它并在VS Code中使用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.dart
和cupertino.dart
提供了特定样式的小部件-但是剩下的是什么,我应该在MaterialApp(..)
中导入哪个软件包,这些软件包应该与平台无关,并且在iOS上运行?
而且-如果有区别-应该使用哪个,以便在Android和iOS上自动使用平台特定的小部件来实现本机功能,例如日期/时间选择器,以便日期选择器自动在Android和iOS上特定于平台的变体?
答案 0 :(得分:1)
发生的事情是,该类在框架的下部定义(此处foundation
代表FlutterError
)
然后,框架的高层使用export
指令重新导出较低层的内容。
这样做主要是为了确保开发人员在通常需要它们时,不必导入5种以上的不同东西。
例如material.dart
看起来像这样:
export 'package:flutter/widget.dart';
class RaisedButton { }
答案 1 :(得分:0)
您可以从任何库导入通用类。这个例子:
import 'package:flutter/material.dart';
//import 'package:flutter/widgets.dart';
class Foo extends InheritedWidget {
}
无论您从哪个库导入它,都将使用相同的InheritedWidget
实现。尝试对每个导入进行注释,然后按住Ctrl键并单击AndroidStudio中的InheritedWidget
,将打开包含实现的文件。
从我的角度来看,如果要进行材质设计,最好使用单个导入import 'package:flutter/material.dart';
,而不是两个(来自material.dart
和widgets.dart
)。如果您的代码对UI库是中立的,那么很显然可以从系统库中导入。
您不能使用从中立系统库导入的通用类来在编译时自动在Cupertino和Material库之间切换。您应该明确使用特定的UI库小部件。
如果要在库之间切换,则应自行开发此逻辑。您可以阅读本文https://medium.com/flutter/do-flutter-apps-dream-of-platform-aware-widgets-7d7ed7b4624d作为起点。
答案 2 :(得分:0)
'package:flutter / widgets.dart'用于稍后使用dart创建小部件,这些小部件将在main.dart内部使用,并使代码更加清晰。
如果要使用实用程序类和函数来创建UI层,必须使用“ package:flutter / foundation.dart”。
如果要在应用程序中使用Android框架,将使用'package:flutter / material.dart'。如果要在自己的IO中使用IOs,则'package:flutter / cupertino.dart'将用于选择application。默认情况下,使用材料类型。没关系,您使用的是材料类型UI或cupertino UI。您可以将Android UI用于IO设备,也可以将IO UI用于Android设备。