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

时间:2012-10-18 10:00:02

标签: dart

这可能听起来像是一个愚蠢的问题,但老实说我没有任何线索,我知道你可以使用libraryimport甚至#import,但哪个是正确的?

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

4 个答案:

答案 0 :(得分:70)

首先让我先说一下,请不要在导入或库或其他任何东西之前使用哈希符号。这是一种旧的语法,正在折旧。所以我们不再想使用#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.

答案 1 :(得分:13)

导入您自己创建的库: 您将导入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;
}

答案 2 :(得分:0)

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

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

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

考虑我有以下项目结构。

enter image description here

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

import 'package:my_project_name/greeting.dart'

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

答案 3 :(得分: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