91

我知道您可以使用library,import和 even #import,但哪个是正确的?

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

4

4 回答 4

137

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

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

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

于 2012-10-18T13:15:49.477 回答
27

导入您自己创建的库:您将导入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;
}
于 2012-10-18T10:33:40.443 回答
13

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

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

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

考虑我有以下项目结构。

在此处输入图像描述

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

import 'package:my_project_name/greeting.dart'

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

于 2019-04-09T10:32:00.213 回答
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
于 2020-03-20T12:06:04.650 回答