Dart에서 다른 파일을 참조하는 방법은 무엇입니까?


80

library, import및을 사용할 수 있다는 것을 알고 #import있지만 어느 것이 맞습니까?

나는 두 개의 파일을 가지고있다, MainClass.dart그리고 Library.Dart, 나는에 대한 참조를 추가 할 Library.dart에서 MainClass.dart. 어떻게 할 수 있습니까?

답변:


122

먼저 가져 오기 전에 해시 기호를 사용하거나 라이브러리 또는 다른 것을 사용하지 마십시오. 이것은 더 이상 사용되지 않는 오래된 구문입니다. 따라서 우리는 더 이상 사용하고 싶지 않습니다 #import('...'). 올바른 구문은 다음과 같습니다.

import 'some_file.dart';

즉, 현재 파일 내에서 서로 다른 다트 소스 파일에 액세스하기 위해 수행 할 수있는 두 가지 방법이 있습니다. 첫 번째는 import파일입니다. 다른 라이브러리를 현재 파일 (또는보다 정확한 현재 라이브러리)로 가져 오려는 경우와 같이이를 사용합니다.

일반적으로 파일이 동일한 디렉토리에 있거나 현재 파일의 하위 디렉토리에있는 경우 다음과 같이 가져옵니다.

import 'lib/library.dart';

그러나 pub 패키지 레이아웃을 사용하는 경우 일부 특수 바로 가기 참조를 사용하여 파일을 가져올 수도 있습니다 (특히 가져온 다른 패키지에서). 대부분의 응용 프로그램과 라이브러리는이를 염두에두고 설계되었으므로 pub 사이트문서를 읽는 것이 좋습니다 . 또한 모두 소문자로 된 파일 이름, 공백 및 디렉토리 레이아웃에 밑줄을 사용하는 것과 같은 최상의 명명 규칙에 대한 제안이 있습니다.

다트 파일을 다른 파일로 가져 오는 것에 대해 알아야 할 또 다른 중요한 사항은 partpart of지시문을 사용할 수 있다는 것 입니다. 이전에는 호출 #source되었지만 혼동을 줄이기 위해 변경되었습니다 (해시 기호 제거로). 이 part지시문은 여러 파일에 걸쳐있는 단일 라이브러리를 작성하고자 할 때 사용됩니다. 예를 들어 하나의 파일에 대해 조금 커지기 시작 하는 Awesome Library 가 있다고 가정 해 보겠습니다 . 우리는 라이브러리의 메인 파일을 생성 할 것입니다 (메인 메소드와 혼동하지 말 것). 이 파일은 일반적으로 라이브러리 자체와 동일한 이름을 갖습니다.

// 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 를 유지 관리하기 쉬운 여러 개의 작은 파일로 분할 할 수 있습니다 . 특별히 필요하지는 않지만 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 파일 만 있으면 어떻게 될까요?
Steoates

다트에서 기억하는 것처럼 모든 것이 도서관입니다. main ()을 사용하는 응용 프로그램도 있습니다. 그러나 나는 당신과 같은 생각을 기억합니다 :). 다른 클래스 / 파일에서 객체를 생성하려는 경우 lib가 필요한 이유는 무엇입니까? 하지만 작동합니다.
Gero

1
확인하기 위해 상단에 "라이브러리"정의가있는 경우에만 라이브러리입니다. 스크립트는 라이브러리가되지 않고도 main () 함수를 가질 수 있습니다.
Chris Buckett 2012 년

12

나는 매우 늦게 대답하고 있지만 대답은 새로운 개발자에게 도움이 될 수 있습니다.

dart 패키지 (application / library)에서 항상 pubspec.yaml 파일을 사용하십시오.

pub get 명령을 실행하면 .packages 파일의 종속성 목록에 로컬 라이브러리가 추가됩니다.

다음과 같은 프로젝트 구조가 있다고 생각하십시오.

여기에 이미지 설명 입력

내 main.dart 파일에서 greeting.dart의 내용을 참조하려면 아래와 같이 라이브러리를 추가해야합니다.

import 'package:my_project_name/greeting.dart'

가져온 후에는 main.dart 파일에서 greeting.dart 파일의 내용을 사용할 수 있습니다. 참고 : 'lib'디렉토리가 누락 된 것을 볼 수 있으므로 실제 경로를 사용하지 않았습니다.


해당 파일에서 클래스의 객체를 인스턴스화하면 IDE가 자동으로 가져 오기 경로를 생성합니다. 입력 할 필요가 없습니다.
prachit

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.