Как решить проблему "Объект типа XXXXX не зарегистрирован в GetIt" во флаттере?

Я пытаюсь использовать get_it для создания 9X_firebase одноэлементного объекта, который будет использоваться. Я 9X_flutter-packages не хочу использовать несколько объектов 9X_android-ui API, которые подключаются к Firebase. Одноэлементный 9X_android-api объект - это объект вызова API для firebase.

Я 9X_firebase-android использовал следующий код

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

пока работает следующий 9X_flutter-dependencies код

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

Структура класса Api выглядит следующим 9X_flutter образом:

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

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

Вот как я использую одноэлементный 9X_android-api объект API:

Api _api = locator();

в то время как следующий код 9X_flutter-dependencies работает нормально:

Api _api = Api('team');

В консоли появляется 9X_flutter-packages следующая ошибка:

I / flutter (2313): при 9X_android-sdk построении мультипровайдера возникло следующее 9X_flutter-sdk _Exception:

I / flutter (2313): Исключение: объект 9X_flutter-packages типа Api не зарегистрирован внутри GetIt

Я 9X_android-framework хочу знать, возможно ли это вообще с помощью 9X_dart getit, это неправильный способ сделать это.

13
1

  • У меня была аналогичная проб ...
4
Общее количество ответов: 4

Ответ #1

Ответ на вопрос: Как решить проблему "Объект типа XXXXX не зарегистрирован в GetIt" во флаттере?

не забудьте вызвать setupLocator в основном 9X_android-framework файле приложения перед запуском приложения

  setupLocator();
  runApp(MyApp());

20
0

Ответ #2

Ответ на вопрос: Как решить проблему "Объект типа XXXXX не зарегистрирован в GetIt" во флаттере?

Попробуйте использовать следующий код для 9X_flutter-packages своей основной функции.

GetIt locator = GetIt.instance;

void main() {

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

  runApp(MyApp());
}

Или попробуйте создать 9X_dart отдельный файл для локатора службы, например:

service_locator.dart

GetIt sl = GetIt.instance;

final httpLink = HttpLink(...);

final GraphQLClient client = GraphQLClient(
  cache: InMemoryCache(),
  link: httpLink,
);

void setUpServiceLocator() {
  // Services
  sl.registerSingleton(LocationsService(http.Client()));
  ...

  // Managers
  sl.registerSingleton(LocationsManager());
  ...
}

main.dart

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  setUpServiceLocator();
  runApp(MyApp());
}

some_file.dart

import 'package:my_awesome_app/service_locator.dart';

...
// call it anywhere you want on your code
sl().updateLocationsCommand.execute(query);

// or
sl.get().updateLocationsCommand.execute(query);

4
1

  • Тем не менее проблема остается прежней.<p><span clas ...

Ответ #3

Ответ на вопрос: Как решить проблему "Объект типа XXXXX не зарегистрирован в GetIt" во флаттере?

ответ для тех, кто столкнется с этой ошибкой 9X_firebase-android в ​​2021 году с зависимость get_it: ^ 5.0.3

сделать 9X_firebase-android локатор классов. дротик

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

}

Теперь вызовите этот 9X_flutter-packages метод setUpLocator в main.dart

  void main() 
 {

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

и теперь создайте свойство 9X_flutter-dependencies класса локатора, в котором вы показываете 9X_android-framework свои данные, потому что мои данные относятся 9X_firebase к типу списка, который вы можете увидеть 9X_dart в noteservice.dart, поэтому я получаю это 9X_dart свойство в классе типа списка

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

и, наконец, noteserverice.dart

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

class NoteService
{
  List 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()
    )
  ];
  
  }
}

2
0

Ответ #4

Ответ на вопрос: Как решить проблему "Объект типа XXXXX не зарегистрирован в GetIt" во флаттере?

Попробуйте версию GetIt. Я использую ^ 3.0.3. Это 9X_flutter-sdk работает для меня. Возможно, вы используете 9X_dart старую версию.

1
0