如何在Dart中引用另一个文件?


79

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

我有两个文件,MainClass.dart并且Library.Dart,我想添加一个引用Library.dartMainClass.dart。我怎样才能做到这一点?

Answers:


121

首先,请允许我在输入或使用库之前,不要使用井号。这是一个过时的旧语法。所以我们不再想要使用#import('...')正确的语法是:

import 'some_file.dart';

也就是说,我们可以执行两种不同的操作来访问当前文件中的不同dart源文件。首先是到import文件。例如,当您想将其他库带入当前文件(或更准确地说是当前库)时,我们会使用这种方法。

通常,如果您的文件位于同一目录或当前目录的子目录中,我们将按以下方式导入它们:

import 'lib/library.dart';

但是,如果您使用的是pub包布局,则还可以使用一些特殊的快捷方式引用来导入文件(尤其是从已导入的其他包中)。我强烈建议阅读pub网站上文档,因为大多数应用程序和库都是出于此目的而设计的。它还提供了有关最佳命名约定的建议,例如所有小写的文件名,对空格和目录布局使用下划线。

将dart文件带入另一个文件时要了解的另一件重要事情是,我们可以使用partandpart 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库拆分为多个更易于维护的较小文件。尽管没有特别要求,但使用part of我们的secret_file.dart中的指令有帮助,以帮助编辑器知道它是库的“一部分”。

// secret_file.dart
part of awesome_library;

// ... Rest of our secret_file code below.

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

有关库的更多信息,请参见此链接。


22

导入自己创建的库:您将导入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文件,那该怎么办?
2012年

我记得在dart中一切都是图书馆。甚至您的带有main()的应用程序。但是我记得和你有同样的想法:)。如果我只想从另一个类/文件创建对象,为什么需要lib。但这有效。
Gero 2012年

1
只是要确认-如果您在顶部具有“库”定义,则它只是一个库。脚本可以具有main()函数,而无需作为库。
克里斯·巴克特

11

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

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

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

考虑我有以下项目结构。

在此处输入图片说明

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

import 'package:my_project_name/greeting.dart'

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


在该文件中实例化类的任何对象时,IDE会自动为您生成导入路径。无需键入。
实用

0

首先,请确保这是您提到的名称,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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.