【问题标题】:How to reference another file in Dart?如何在 Dart 中引用另一个文件?
【发布时间】:2012-10-08 18:05:52
【问题描述】:

我知道你可以使用libraryimport 甚至#import,但哪个是正确的?

我有两个文件,MainClass.dartLibrary.Dart,我想在MainClass.dart 中添加对Library.dart 的引用。我该怎么做?

【问题讨论】:

    标签: dart


    【解决方案1】:

    导入您自己创建的库: 您将导入 filename.dart 而不是您的库的名称。 因此,如果您的库的名称是:myLib 并且它保存在文件中:someDartFile.dart 您将不得不

    import 'someDartFile.dart';
    

    如果你在 Windows 上有一个库:K:\SomeDir\someFile.dart 你需要写:

    import '/K:/SomeDir/someFile.dart';
    

    示例:

    import 'LibraryFile.dart'; //importing myLib
    
    void main(){ 
      //a class from myLib in the LibraryFile.dart file
      var some = new SomeClassFromMyLibrary(); 
    }
    

    LibraryFile.dart 中的 myLib:

    library myLibrary;
    import 'dart:math';
    
    class SomeClassFromMyLibrary{
      String _str = "this is some private String only to myLibrary";
      String pubStr = "created instances of this class can access";
    }
    

    这里有一个完整的例子。

    //TestLib.dart
    import 'LibFile.dart'; //SomeLibrary
    
    void main() {
      print("Hello, World!");
    
      LibFile l = new LibFile();
      print(l.publicString);//public
      print(l.getPrivateString);//private  
      print(l.getMagicNumber); //42
    }
    
    //LibFile.dart
    library SomeLibrary;
    part 'LibFile2.dart';
    
    class LibFile {
      String _privateString = "private";
      String publicString = "public";
    
      String get getPrivateString => _privateString;
    
      int get getMagicNumber => new LibFile2().number;
    }
    
    //LibFile2.dart
    part of SomeLibrary;
    
    class LibFile2 {
      int number = 42;
    }
    

    【讨论】:

    • 如果你没有库,只有一个带类的新 Dart 文件,这还能用吗?
    • 我记得在 dart 中,一切都是图书馆。甚至你的应用程序与 main()。但我记得和你有同样的想法:)。如果我只想从另一个类/文件创建一个对象,为什么我需要一个库。但它有效。
    • 只是为了确认 - 如果您在顶部有“库”定义,它只是一个库。一个脚本可以有一个 main() 函数而不是一个库。
    【解决方案2】:

    首先让我先说请不要在导入或库或其他任何东西之前使用井号。这是一种已被弃用的旧语法。所以我们不再想使用#import('...') 正确的语法是:

    import 'some_file.dart';
    

    也就是说,我们可以做两种不同的事情来访问当前文件中的不同 dart 源文件。第一个是import 文件。当您想将不同的库带入当前文件(或更准确地说是当前库)时,我们会使用此方法。

    通常,如果您的文件在同一目录中,或者是当前目录的子目录,我们会像这样导入它们:

    import 'lib/library.dart';
    

    但是,如果您使用的是 pub 包布局,您还可以使用一些特殊的快捷方式引用来导入文件(特别是从您导入的其他包中)。我强烈建议阅读documents on the pub site,因为大多数应用程序和库的设计都考虑到了这一点。它还提供了关于最佳命名约定的建议,例如文件名全部小写、空格使用下划线和目录布局。

    关于将 dart 文件引入另一个文件的另一件重要的事情是,我们可以使用 partpart of 指令。这曾经被称为#source,但已更改(删除了井号)以减少混淆。 part 指令用于编写跨多个文件的单个库时。例如,假设您有一个 Awesome Library,对于单个文件,它开始变得有点大。我们将创建库的主文件(不要与 main 方法混淆)。该文件通常与库本身同名。

    // awesome_library.dart
    library awesome_library;
    
    import 'dart:math';
    import '...';
    
    // this injects all the content of secret_file.dart
    // into this file right here almost as if it was
    // here in the first place.
    part 'src/secret_file.dart';
    
    // The rest of our file here
    // ...
    

    part 指令基本上从我们的 src/secret_file.dart 中获取所有内容并将其插入到文件的该部分中。这使我们能够将庞大的 Awesome Library 拆分为多个更易于维护的较小文件。虽然没有特别要求,但在我们的 secret_file.dart 中使用 part of 指令会很有帮助,以帮助编辑器知道它是库的“一部分”。

    // secret_file.dart
    part of awesome_library;
    
    // ... Rest of our secret_file code below.
    

    请注意,当使用这样的零件文件时,零件(即不是库的主文件的所有内容)本身不能导入或使用库声明。他们将导入到主文件中的任何内容导入,但无法添加任何其他导入。

    For more information about library see this link.

    【讨论】:

      【解决方案3】:

      虽然我回答得很晚,但答案可能对新开发者有所帮助。

      始终在您的 dart 包(应用程序/库)中使用 pubspec.yaml 文件。

      一旦你运行 pub get 命令,它就会将你的本地库添加到 .packages 文件的依赖项列表中。

      考虑我有以下项目结构。

      要在我的 main.dart 文件中引用 greeting.dart 的内容,我应该添加如下库

      import 'package:my_project_name/greeting.dart'
      

      导入后,我们可以在 main.dart 文件中使用 greeting.dart 文件的内容。 注意:我们没有使用实际路径,因为您可以看到缺少“lib”目录。

      【讨论】:

      • 当您在该文件中实例化任何类的对象时,IDE会自动为您生成导入路径。无需输入。
      【解决方案4】:

      首先确保您在pubspec.yaml 中提到的名称和您要导入的文件共享完全相同的名称

      示例:

      pubspec.yaml
      
      name: flutter_wordpress_app
      description: flutter wordpress app
      ...
      ....
      
      // dirOne/dirTwo/greeting.dart
      
      class FavArticleBloc {
         // Your code goes here
      }
      
      
      
      import 'package:flutter_wordpress_app/dirOne/dirTwo/greeting.dart'
      
      void main(){ 
        var some = new FavArticleBloc(); 
      }
      
      

      但是 在main.dart你不需要指定 import 'package:flutter_wordpress_app 就像下面一样

      import 'dirOne/dirTwo/greeting.dart
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 2020-11-28
        • 2019-09-09
        • 1970-01-01
        • 2011-03-04
        • 2021-11-09
        • 1970-01-01
        相关资源
        最近更新 更多