当前位置: 首页 > 知识库问答 >
问题:

颤振/飞镖get_It单件定位器方法失败

何志业
2023-03-14

我有一个简单的飞镖课如下:

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文件包含以下内容:

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

我有一个<code>依赖项定位器

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

最后,在< code>main.dart中,我有以下内容:

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

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

正如它所显示的,代码工作正常,但是如果我将dependancy _ locator文件从当前的工厂方法改为singleton(即注释掉一个以启用另一个),我会得到以下错误:

[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.<…>

任何人都可以帮助我理解为什么我不能使用单例调用而不是工厂调用?我的思考过程是,我不需要这个类的唯一实例,我相信工厂会给我,我只需要一个它需要它的类的实例。

任何帮助都非常感谢。

共有1个答案

武彭薄
2023-03-14

我通过以下方式解决了这个问题:

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

我希望这能帮助其他人免于陷入困境!

 类似资料:
  • 在flutter示例页面中,有一个名为“将数据发送到新屏幕”的项目。我对第65行的构造函数有一个重新保护的问题。

  • [![Plugins installed][1][1]我已经在android studio中安装了这些插件,并将C:\flatter\bin添加到系统环境变量中,但当我在PowerShell中运行flatter doctor时,它显示这些插件没有安装。我用的是Windows操作系统。

  • 我试图改变从API返回的日期字符串的格式。下面的日期格式输入字符串在java中工作正常,但在Dart中则不行。

  • 我已经在我的服务器上创建了一个RSA密钥对,只有服务器才会有私钥。客户端(Flatter应用程序)将访问公钥。因此,当服务器收到加密消息时,它将知道消息来自正确的客户端,并将使用其私钥解密通过公钥加密的消息。 当服务器(php7.3)向客户端发送回复时,我想在服务器端通过私钥加密消息,以便客户端可以用公钥解密消息。 非对称加密有其自身的局限性,如最大字符长度。但如果能送来就好了 Flutter包加

  • 我一直在使用VSCode进行颤振开发,但没有问题。今天,飞镖分析器突然抱怨说,大多数类都是未定义的,或者目标不存在。 有人见过这个吗? 我已经重新启动了VSCode,重新启动了计算机,卸载了flutter/dart插件,运行flutter dr没有任何问题……我没有想法了。 VSCode问题