簡體   English   中英

Flutter/Dart get_It 單例定位器方法失敗

[英]Flutter/Dart get_It singleton locator method failure

我有一個簡單的飛鏢類,如下所示:

import 'package:flutter/material.dart';

class UiUtils {
  // TEMPORARY FOR UNIT TEST PURPOSES ONLY
  int addition(int x, int y) {
    return x + y;
  }
}

(注意:以上是一個示例,實際類確實比臨時功能更多。)

我的pubspec.yml文件包含以下內容:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  intl: ^0.17.0

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  get_it: ^7.1.3
  provider: ^6.0.1
  mockito: ^5.0.16

我有一個dependency locator文件:

import 'package:get_it/get_it.dart';
import 'package:quiz_test/utils/UiUtils.dart';

GetIt dependencyLocator = GetIt.instance;

void setupDependencyLocator() {
  //dependencyLocator.registerSingleton(() => UiUtils());
  dependencyLocator.registerFactory(() => UiUtils());
}

最后,在main.dart我有以下內容:

void main() {
  setupDependencyLocator();
  runApp(MyApp());
}

(當然還有比這更多的代碼)。

正如所顯示的那樣,代碼工作正常,但是如果我將dependancy_locator 文件從當前工廠方法更改為單例(即注釋掉一個以啟用另一個),我會收到以下錯誤:

[VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: type '_ServiceFactory<() => UiUtils, void, void>' is not a subtype of type '_ServiceFactory<Object, dynamic, dynamic>' of 'value'
#0      _LinkedHashMapMixin.[]= (dart:collection-patch/compact_hash.dart)
#1      _GetItImplementation._register (package:get_it/get_it_impl.dart:844:35)
#2      _GetItImplementation.registerSingleton (package:get_it/get_it_impl.dart:587:5)
#3      setupDependencyLocator (package:quiz_test/utils/dependency_locator.dart:7:21)
#4      main (package:quiz_test/main.dart:13:3)
#5      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:145:25)
#6      _rootRun (dart:async/zone.dart:1428:13)
#7      _CustomZone.run (dart:async/zone.dart:1328:19)
#8      _runZoned (dart:async/zone.dart:1863:10)
#9      runZonedGuarded (dart:async/zone.dart:1851:12)
#10     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:141:5)
#11     _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.<…>

誰能幫我理解為什么我不能使用單例調用而不是工廠調用? 我的思考過程是,我不需要這個類的唯一實例,我相信工廠會給我這個實例,我只需要它的單個實例用於需要它的任何類。

任何幫助是極大的贊賞。

我能夠通過執行以下操作來解決此問題:

dependencyLocator.registerSingleton<UiUtils>(UiUtils());

所以,我的 dependencyLocator 類現在看起來像這樣:

import 'package:get_it/get_it.dart';
import 'package:quiz_test/utils/UiUtils.dart';

GetIt dependencyLocator = GetIt.instance;

void setupDependencyLocator() {
  dependencyLocator.registerSingleton<UiUtils>(UiUtils());
}

我希望這可以幫助其他人不被卡住!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM