118 votes

Comment référencer un autre fichier dans Dart ?

Je sais que vous pouvez utiliser le library , import et même #import mais lequel est correct ?

J'ai deux fichiers, MainClass.dart y Library.Dart et je veux ajouter une référence à Library.dart en MainClass.dart . Comment puis-je le faire ?

165voto

Matt B Points 3289

Tout d'abord, laissez-moi vous dire en préambule que vous ne devez pas utiliser le symbole dièse avant un import, une bibliothèque ou autre chose. Il s'agit d'une ancienne syntaxe qui est en train d'être dépréciée. Nous ne voulons donc plus utiliser #import('...') La syntaxe correcte est :

import 'some_file.dart';

Cela dit, il y a deux choses différentes que nous pouvons faire pour accéder à différents fichiers sources de dart dans notre fichier actuel. La première consiste à import le dossier. Nous l'utilisons, comme dans votre cas, lorsque vous voulez amener une bibliothèque différente dans le fichier actuel (ou plus exactement la bibliothèque actuelle).

Habituellement, si vos fichiers sont dans le même répertoire, ou dans un sous-répertoire du répertoire actuel, nous les importons comme ceci :

import 'lib/library.dart';

Cependant, si vous utilisez la présentation du paquet pub, vous pouvez également utiliser des raccourcis spéciaux pour importer des fichiers (notamment à partir d'autres paquets que vous avez importés). Je vous conseille vivement de lire le documents sur le site du pub car la plupart des applications et des bibliothèques sont conçues dans cet esprit. Il contient également des suggestions sur les meilleures conventions de nommage, telles que l'utilisation de minuscules pour les noms de fichiers et de tirets bas pour les espaces, ainsi que sur la disposition des répertoires.

L'autre chose importante à savoir pour amener un fichier Dart dans un autre fichier, c'est que nous pouvons utiliser la fonction part y part of des directives. Cela s'appelait autrefois #source mais a été modifié (avec la suppression du signe dièse) pour réduire la confusion. Le site part est utilisée lorsque nous voulons écrire une seule bibliothèque qui s'étend sur plusieurs fichiers. Disons par exemple que vous avez un fichier Bibliothèque impressionnante qui commence à devenir un peu gros pour un seul fichier. Nous allons créer le fichier principal de la bibliothèque (à ne pas confondre avec la méthode principale). Ce fichier aura généralement le même nom que la bibliothèque elle-même.

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

La directive part prend tout ce qui se trouve dans src/secret_file.dart et l'insère dans cette partie du fichier. Cela nous permet de diviser notre énorme Bibliothèque impressionnante en plusieurs fichiers plus petits qui sont plus faciles à maintenir. Bien que cela ne soit pas spécifiquement requis, il est utile d'utiliser la fonction part of dans notre secret_file.dart pour aider l'éditeur à savoir qu'il fait "partie" de la bibliothèque.

// secret_file.dart
part of awesome_library;

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

Notez que lors de l'utilisation d'un fichier partie comme celui-ci, la ou les parties (c'est-à-dire tout ce qui n'est pas le fichier principal de la bibliothèque) ne peuvent pas importer ou utiliser les déclarations de la bibliothèque elles-mêmes. Elles importent tout ce qui est importé dans le fichier principal, mais elles ne peuvent pas ajouter d'importations supplémentaires.

Pour plus d'informations sur la bibliothèque, voir ce lien.

29voto

Gero Points 1401

Importation de vos propres bibliothèques créées : Vous allez importer les filename.dart et non le nom de votre bibliothèque. Donc si le nom de votre bibliothèque est : myLib et il est enregistré dans le fichier : someDartFile.dart vous devrez

import 'someDartFile.dart';

Si vous avez sur Windows une bibliothèque à : K:\SomeDir\someFile.dart vous devrez écrire :

import '/K:/SomeDir/someFile.dart';

exemple :

import 'LibraryFile.dart'; //importing myLib

void main(){ 
  //a class from myLib in the LibraryFile.dart file
  var some = new SomeClassFromMyLibrary(); 
}

myLib dans LibraryFile.dart :

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

Voici un exemple complet.

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

13voto

vashishth Points 581

Bien que je réponde très tard, la réponse peut aider les nouveaux développeurs.

Utilisez toujours le fichier pubspec.yaml dans votre paquetage Dart (application/library).

Une fois que vous exécutez la commande pub get, elle ajoutera votre bibliothèque locale dans la liste des dépendances du fichier .packages.

Considérons que j'ai la structure de projet suivante.

enter image description here

Pour faire référence au contenu de greeting.dart dans mon fichier main.dart, je dois ajouter la bibliothèque comme ci-dessous

import 'package:my_project_name/greeting.dart'

Une fois importé, nous pouvons utiliser le contenu du fichier greeting.dart dans notre fichier main.dart. Note : nous n'avons pas utilisé le chemin réel comme vous pouvez voir que le répertoire 'lib' est manquant.

-1voto

Aathi Points 395

Assurez-vous d'abord qu'il s'agit du nom que vous avez mentionné dans le formulaire. pubspec.yaml et le fichier que vous voulez importer portent exactement le même nom.

exemple :

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

Mais dans le main.dart vous n'avez pas besoin de spécifier import 'package:flutter_wordpress_app faites comme ci-dessous

import 'dirOne/dirTwo/greeting.dart

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X