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 사이트 의 문서를 읽는 것이 좋습니다 . 또한 모두 소문자로 된 파일 이름, 공백 및 디렉토리 레이아웃에 밑줄을 사용하는 것과 같은 최상의 명명 규칙에 대한 제안이 있습니다.

다트 파일을 다른 파일로 가져 오는 것에 대해 알아야 할 또 다른 중요한 사항은 part및 part 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.