डार्ट में किसी अन्य फ़ाइल को कैसे संदर्भित करें?


80

मैं आप उपयोग कर सकते पता है library, importऔर यहां तक कि #import, लेकिन जो सही है?

मैं दो फ़ाइलों मिल गया है, MainClass.dartऔर Library.Dart, और मैं के लिए एक संदर्भ जोड़ना चाहते हैं Library.dartमें MainClass.dart। मैं उसे कैसे कर सकता हूँ?

जवाबों:


122

सबसे पहले मुझे केवल यह कहकर प्रस्तावना दें कि कृपया आयात या पुस्तकालय या किसी अन्य चीज़ से पहले हैश प्रतीक का उपयोग न करें। यह एक पुराना सिंटेक्स है जिसे अपदस्थ किया जा रहा है। इसलिए हम अब #import('...')सही सिंटैक्स का उपयोग नहीं करना चाहते हैं :

import 'some_file.dart';

उस ने कहा, दो अलग-अलग चीजें हैं जो हम अपनी वर्तमान फ़ाइल के भीतर विभिन्न डार्ट स्रोत फ़ाइलों तक पहुंचने के लिए कर सकते हैं। पहला importफ़ाइल के लिए है। हम इसका उपयोग आपके मामले में तब करते हैं जब आप वर्तमान फ़ाइल (या अधिक सटीक रूप से चालू लाइब्रेरी) में एक अलग लाइब्रेरी लाना चाहते हैं।

आमतौर पर अगर आपकी फाइलें एक ही डायरेक्टरी में हैं, या एक करंट की सब डाइरेक्टरी है तो हम उन्हें इस तरह से इंपोर्ट करेंगे:

import 'lib/library.dart';

हालाँकि, यदि आप पब पैकेज लेआउट का उपयोग कर रहे हैं, तो आप कुछ विशेष शॉर्ट-कट संदर्भों के साथ-साथ फ़ाइलों को आयात करने के लिए भी उपयोग कर सकते हैं (विशेष रूप से आपके द्वारा आयात किए गए अन्य पैकेजों से)। मैं पब साइट पर दस्तावेजों को पढ़ने का अत्यधिक सुझाव देता हूं , क्योंकि अधिकांश एप्लिकेशन और लाइब्रेरी इसे ध्यान में रखकर तैयार की गई हैं। इसमें सर्वश्रेष्ठ नामकरण सम्मेलनों जैसे कि सभी निचले मामलों में फ़ाइलनाम, और रिक्त स्थान के लिए अंडरस्कोर का उपयोग करने, और निर्देशिका लेआउट के सुझाव भी हैं।

एक अन्य फ़ाइल में डार्ट फ़ाइल लाने के बारे में जानने के लिए दूसरी महत्वपूर्ण बात यह है कि हम partऔर part ofनिर्देशों का उपयोग कर सकते हैं । यह कहा जाता #sourceथा, लेकिन भ्रम को कम करने के लिए (हैश साइन को हटाने के साथ) बदल दिया गया था। partनिर्देश प्रयोग किया जाता है जब हम एक भी पुस्तकालय जो एकाधिक फ़ाइलों में है लिखना चाहते हैं। उदाहरण के लिए कहें कि आपके पास एक बहुत बढ़िया पुस्तकालय है , जो कि एक फ़ाइल के लिए थोड़ा बड़ा होने लगा है। हम लाइब्रेरी की मुख्य फ़ाइल (मुख्य विधि के साथ भ्रमित नहीं होने के लिए) बनाएंगे। यह फ़ाइल आमतौर पर लाइब्रेरी के समान नाम वाली होगी।

// 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
// ...

मूल निर्देश मूल रूप से हमारे src / secret_file.dart से सब कुछ लेता है और इसे फ़ाइल के उस हिस्से में सम्मिलित करता है। यह हमें अपनी विशाल विस्मयकारी लाइब्रेरी को कई छोटी फाइलों में विभाजित करने की अनुमति देता है जिन्हें बनाए रखना आसान होता है। जबकि विशेष रूप से आवश्यक नहीं है, part ofसंपादक को यह जानने में मदद करने के लिए हमारे secret_file.dart में निर्देश का उपयोग करना सहायक है कि यह पुस्तकालय का "हिस्सा" है।

// secret_file.dart
part of awesome_library;

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

ध्यान दें कि इस तरह एक हिस्सा फ़ाइल का उपयोग करते समय, भाग (s) (वह सब कुछ है जो पुस्तकालय की मुख्य फ़ाइल नहीं है) खुद पुस्तकालय घोषणाओं का आयात या उपयोग नहीं कर सकता है। मुख्य फ़ाइल में जो कुछ भी आयात किया जाता है, उसे वे आयात करते हैं, लेकिन वे कोई अतिरिक्त आयात नहीं कर सकते।

पुस्तकालय के बारे में अधिक जानकारी के लिए यह लिंक देखें।


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;
}

क्या होगा अगर आपके पास एक परिवाद नहीं है, लेकिन कक्षाओं के साथ सिर्फ एक नया डार्ट फ़ाइल है, क्या यह अभी भी काम करेगा?
Steoates

जैसा कि मुझे डार्ट में याद है कि सब कुछ एक पुस्तकालय है। यहां तक ​​कि मुख्य के साथ आपका आवेदन ()। लेकिन मुझे याद है कि आपके जैसे ही विचार :)। अगर मुझे सिर्फ दूसरी कक्षा / फ़ाइल से कोई ऑब्जेक्ट बनाना है तो मुझे लिब की आवश्यकता क्यों है। लेकिन यह काम करता है।
जीरो

1
बस पुष्टि करने के लिए - यदि आपके पास शीर्ष पर "लाइब्रेरी" परिभाषा है तो यह केवल एक पुस्तकालय है। एक स्क्रिप्ट में एक पुस्तकालय होने के बिना एक मुख्य () फ़ंक्शन हो सकता है।
क्रिस बकेट 10

12

हालांकि मैं बहुत देर से जवाब दे रहा हूं, लेकिन जवाब नए डेवलपर की मदद कर सकता है।

हमेशा अपने डार्ट पैकेज (एप्लिकेशन / लाइब्रेरी) में pubspec.yaml फ़ाइल का उपयोग करें।

एक बार जब आप पब चलाते हैं तो यह निर्भरता सूची में आपके स्थानीय पुस्तकालय को .packages फ़ाइल में जोड़ देगा।

विचार करें कि मेरे पास परियोजना संरचना है।

यहाँ छवि विवरण दर्ज करें

मेरी main.dart फ़ाइल में ग्रीटिंग.डार्ट की सामग्री को संदर्भित करने के लिए मुझे नीचे के रूप में पुस्तकालय जोड़ना चाहिए

import 'package:my_project_name/greeting.dart'

एक बार आयात होने के बाद हम अपनी main.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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.