web-dev-qa-db-fra.com

Comment résoudre le problème de "objet de type xxxxx n'est pas enregistré à l'intérieur de getit" dans le flutter?

J'essaie d'utiliser get_it afin de créer un objet singleton à utiliser. Je ne souhaite pas utiliser plusieurs objets d'API qui se connectent à FireBase. L'objet Singleton est celui de l'appel d'API pour Firebase.

J'ai utilisé le code suivant

locator.registerLazySingleton<Api>(() => new Api('teams')) ;

bien que le code suivant fonctionne

locator.registerLazySingleton<TeamViewModel>(() => new TeamViewModel()) ;

La structure de la classe API est la suivante:

class Api{
  final Firestore _db = Firestore.instance;
  final String path;
  CollectionReference ref;
  
  Api( this.path ) {
    ref = _db.collection(path);
  }

  Future<QuerySnapshot> getDataCollection() {
     return ref.getDocuments() ;
  }
}`

Voici comment j'utilise l'objet API Singleton:

Api _api = locator<Api>();

alors que le code suivant fonctionne bien:

Api _api = Api('team');

Je reçois l'erreur suivante dans la console:

I/Flutter (2313): L'exception suivante a été lancée multiprovider de construction

I/Flutter (2313): Exception: L'objet de type API n'est pas enregistré à l'intérieur de getit

Je souhaite savoir si cela est même possible d'utiliser Getit n'est pas la bonne façon d'y aller.

7
Arpit Bansal

réponse pour ceux qui font face à cette erreur en 2021 avec dépendance GET_IT: ^ 5.0.3

faire de la classe localisateur. Dard

import 'package:get_it/get_it.Dart';
import 'package:rest_api_work/Service/note_service.Dart';

final locator = GetIt.instance;

void setUpLocator() 
{

locator.registerLazySingleton<NoteService>(() =>NoteService());

}

Maintenant, appelez cette méthode SETUPLOCATOR dans MAIN.DART

  void main() 
 {

   setUpLocator() ;
   runApp(MyApp());
  }

et maintenant faire une propriété de classe de localisateur où vous affichez vos données car mes données sont le type de liste que vous pouvez voir dans notestervice.dart C'est pourquoi je reçois cette propriété dans la catégorie Type de liste

List<NoteForListing> notes = [];
 void initState()  {
         List<NoteForListing> service =  locator.get<NoteService>().getNotesList();
 
    setState(() {
      notes = service;    });
  
       super.initState();   }

et enfin NOTESERVERICE.DART

import 'package:rest_api_work/models/note_for_listing.Dart';

class NoteService
{
  List<NoteForListing> getNotesList()
  {
     return
     [
    new NoteForListing(
      noteID :"1",
      noteTitle:"Note 1",
      createDateTime:DateTime.now(),
      latestEditDateTime:DateTime.now()
    ),
       new NoteForListing(
      noteID :"2",
      noteTitle:"Note 2",
      createDateTime:DateTime.now(),
      latestEditDateTime:DateTime.now()
    ),
       new NoteForListing(
      noteID :"3",
      noteTitle:"Note 3",
      createDateTime:DateTime.now(),
      latestEditDateTime:DateTime.now()
    )
  ];
  
  }
}
0
benten