首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter/Dart get_It单例定位器方法失败

Flutter/Dart get_It单例定位器方法失败
EN

Stack Overflow用户
提问于 2021-11-05 18:49:55
回答 1查看 306关注 0票数 1

我有一个简单的dart类,如下所示:

代码语言:javascript
复制
import 'package:flutter/material.dart';

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

(注意:上面是一个示例,实际的类不只是temp函数。)

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

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
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中,我有以下内容:

代码语言:javascript
复制
void main() {
  setupDependencyLocator();
  runApp(MyApp());
}

(当然还有更多的代码)。

正如显示的那样,代码运行良好,但是如果我将dependancy_locator文件从当前工厂方法更改为单例(即注释掉一个以启用另一个),我会得到以下错误:

代码语言:javascript
复制
[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.<…>

有没有人能告诉我为什么我不能使用单例调用而不能使用工厂调用?我的想法是,我不需要这个类的唯一实例,这是我相信工厂会给我的,对于任何需要它的类,我只需要它的一个实例。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-07 19:01:47

我能够通过执行以下操作来解决此问题:

代码语言:javascript
复制
dependencyLocator.registerSingleton<UiUtils>(UiUtils());

所以,我的dependencyLocator类现在看起来像这样:

代码语言:javascript
复制
import 'package:get_it/get_it.dart';
import 'package:quiz_test/utils/UiUtils.dart';

GetIt dependencyLocator = GetIt.instance;

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

我希望这能帮助其他人避免被卡住!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69857953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档