错误:无法从存储库层解析包“gql_code_builder”

B0r*_*0r1 2 serialization dart graphql flutter

我创建了一个 data_provider 包和一个存储库包。如果我在 data_provider 中运行 main.dart,一切正常,并且我得到了获取的数据。但是如果我想从存储库层获取数据,我会收到此错误:

\n
lib/example/main.dart: Warning: Interpreting this as package URI, \'package:profile_repository/example/main.dart\'.\nlib/example/main.dart:1\nError: Couldn\'t resolve the package \'gql_code_builder\' in \'package:gql_code_builder/src/serializers/operation_serializer.dart\'.\nError: Couldn\'t resolve the package \'gql_code_builder\' in \'package:gql_code_builder/src/serializers/default_scalar_serializer.dart\'.\n: Error: Not found: \'package:gql_code_builder/src/serializers/operation_serializer.dart\'\n../\xe2\x80\xa6/lib/serializers.gql.dart:135\nimport \'package:gql_code_builder/src/serializers/operation_serializer.dart\'\n       ^\n: Error: Not found: \'package:gql_code_builder/src/serializers/default_scalar_serializer.dart\'\n../\xe2\x80\xa6/lib/schema.schema.gql.dart:7\nimport \'package:gql_code_builder/src/serializers/default_scalar_serializer.dart\'\n       ^\n: Error: Method not found: \'OperationSerializer\'.\n../\xe2\x80\xa6/lib/serializers.gql.dart:141\n  ..add(OperationSerializer())\n        ^^^^^^^^^^^^^^^^^^^\n: Error: Method not found: \'DefaultScalarSerializer\'.\n../\xe2\x80\xa6/lib/schema.schema.gql.dart:1380\n  static Serializer<GJSON> get serializer => _i2.DefaultScalarSerializer<GJSON>(\n
Run Code Online (Sandbox Code Playgroud)\n

main.dart(存储库层)

\n
// ignore_for_file: avoid_print, avoid_void_async, unnecessary_lambdas,\n\nimport \'package:data_provider/data_provider.dart\';\nimport \'package:ferry/ferry.dart\';\nimport \'package:get_it/get_it.dart\';\nimport \'package:profile_repository/profile_repository.dart\';\n\nvoid main() async {\n  final client = await initClient();\n  GetIt.I.registerLazySingleton<Client>(() => client);\n\n  try {\n    final profiles = await ProfileRepository().getProfiles();\n    print(\'Profiles: $profiles\');\n  } on Exception catch (e) {\n    print(e);\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

配置文件存储库:

\n
import \'package:data_provider/data_provider.dart\';\n\n/// Thrown when an error occurs while looking up for profiles.\nclass ProfilesException implements Exception {}\n\n/// {@template profile_repository}\n/// Profiles from different categories fetched\n/// {@endtemplate}\nclass ProfileRepository {\n  /// {@macro profile_repository}\n  ProfileRepository({ProfileService? profileService})\n      : _profileService = profileService ?? ProfileService();\n\n  final ProfileService _profileService;\n\n  /// Returns a list of all club and players profiles.\n  ///\n  /// Throws a [ProfilesException] if an error occurs.\n  Future<List<GGetProfilesData_profiles>?> getProfiles() async {\n    try {\n      final profiles = await _profileService.getProfiles();\n      return profiles;\n    } on Exception {\n      throw ProfilesException();\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

配置文件_服务(数据层):

\n
// ignore_for_file: avoid_print\n\nimport \'package:built_collection/built_collection.dart\';\nimport \'package:data_provider/data_provider.dart\';\nimport \'package:ferry/ferry.dart\';\nimport \'package:get_it/get_it.dart\';\n\nclass ProfileService {\n  final client = GetIt.I<Client>();\n\n  Future<List<GGetProfilesData_profiles>?> getProfiles() async {\n    try {\n      final profilesReq = GGetProfilesReq();\n      BuiltList<GGetProfilesData_profiles>? result;\n\n      final value = await client.request(profilesReq).first;\n\n      RequestHelper.checkError(value);\n\n      if (value.data != null && value.data!.profiles != null) {\n        result = value.data!.profiles;\n      }\n\n      return result?.toList();\n    } on DataProviderGraphqlErrorException catch (e) {\n      print(e.toString());\n    } on DataProviderLinkException catch (e) {\n      print(e.toString());\n    }\n    return List.empty();\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

main.dart(data_provider,什么有效!)

\n
// ignore_for_file: avoid_print, avoid_void_async, unnecessary_lambdas,\n\nimport \'package:data_provider/data_provider.dart\';\nimport \'package:ferry/ferry.dart\';\nimport \'package:get_it/get_it.dart\';\n\nvoid main() async {\n  final client = await initClient();\n  GetIt.I.registerLazySingleton<Client>(() => client);\n\n  try {\n    final profiles = await ProfileService().getProfiles();\n    print(\'Profiles: $profiles\');\n  } on Exception catch (e) {\n    print(e);\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:看来导入实现看起来不正确。但文件已生成...\n截屏

\n

Séb*_*ZAT 5

我找到了解决方案。虽然不是完美的,但它确实有效。

@knaecke 引导我找到答案。您可以在主库(而不是真正使用它的包)上的 pubspec.yaml 的“依赖项:”部分中显式添加 gql_code_builder 。

它很丑陋而且很奇怪,但是好吧,它有效......