在 Dart 中导入整个文件和只导入类有什么区别?

Aug*_*n R 13 dart flutter

而不是写:

import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
Run Code Online (Sandbox Code Playgroud)

导出十几个文件,我想写:

import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'
    show
        PlatformAlertDialog,
        PlatformCircularProgressIndicator,
        PlatformDialogAction,
        PlatformText,
        showPlatformDialog;
Run Code Online (Sandbox Code Playgroud)

因为我只使用这些组件。然而,这很乏味(让我想起 Typescript 无穷无尽的导入)并且违背了 Dart 的简洁原则。

在 VSCode 中导入片段使用第一种解决方案,但有什么显着差异,例如在性能方面?有什么好的做法吗?我在官方指南中找不到任何内容。

Cop*_*oad 8

对性能没有影响。使用的原因show是为了减少从不同包导入类时混淆的机会。

例如:让我们说

abc.dart 有 2 个班级

class One {}

class Two {}
Run Code Online (Sandbox Code Playgroud)

并且xyz.dart还有2个类:

class One {}

class Three {}
Run Code Online (Sandbox Code Playgroud)

并且您正在文件中导入这两个包

import 'abc.dart';
import 'xyz.dart';
Run Code Online (Sandbox Code Playgroud)

比如说,你只想使用 class Onefrom abc.dart,所以当你使用One它时可以是 fromabc.dartxyz.dart。所以为了防止One来自xyz.dart你使用:

import `xyz.dart` show Three // which means only `Three` class can be used in your current file from xyz.dart package
Run Code Online (Sandbox Code Playgroud)


Pet*_*dad 5

当您show基本上使用关键字时,您所说的我只想在您的 dart 文件中使用此包中的此特定类,来自文档

仅导入库的一部分

如果只想使用库的一部分,可以有选择地导入库。例如:

// Import only foo.
import 'package:lib1/lib1.dart' show foo;

// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
Run Code Online (Sandbox Code Playgroud)

现在,如果你尝试使用这个包中的任何东西,foo你会得到一个错误,因为你指定你只想使用foo.

  • 感谢您的回答。我知道“show”和“hide”的作用,你知道使用它与不使用它之间是否存在某种性能或设计相关的最佳解决方案吗? (2认同)
  • 当您导入 dart 文件时,该文件中的所有符号都将变得可用,但是当您使用“show”时,它只会限制您可以从该文件中使用的内容。但我怀疑无论你使用还是不使用它都会影响性能。(我的意思是您已经导入了整个文件,“显示”和“隐藏”只是限制了该文件中使用的内容)。 (2认同)