【问题标题】:Error: Couldn't resolve the package 'gql_code_builder' from repository layer错误:无法从存储库层解析包“gql_code_builder”
【发布时间】:2022-03-25 22:29:40
【问题描述】:

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

lib/example/main.dart: Warning: Interpreting this as package URI, 'package:profile_repository/example/main.dart'.
lib/example/main.dart:1
Error: Couldn't resolve the package 'gql_code_builder' in 'package:gql_code_builder/src/serializers/operation_serializer.dart'.
Error: Couldn't resolve the package 'gql_code_builder' in 'package:gql_code_builder/src/serializers/default_scalar_serializer.dart'.
: Error: Not found: 'package:gql_code_builder/src/serializers/operation_serializer.dart'
../…/lib/serializers.gql.dart:135
import 'package:gql_code_builder/src/serializers/operation_serializer.dart'
       ^
: Error: Not found: 'package:gql_code_builder/src/serializers/default_scalar_serializer.dart'
../…/lib/schema.schema.gql.dart:7
import 'package:gql_code_builder/src/serializers/default_scalar_serializer.dart'
       ^
: Error: Method not found: 'OperationSerializer'.
../…/lib/serializers.gql.dart:141
  ..add(OperationSerializer())
        ^^^^^^^^^^^^^^^^^^^
: Error: Method not found: 'DefaultScalarSerializer'.
../…/lib/schema.schema.gql.dart:1380
  static Serializer<GJSON> get serializer => _i2.DefaultScalarSerializer<GJSON>(

main.dart(存储层)

// ignore_for_file: avoid_print, avoid_void_async, unnecessary_lambdas,

import 'package:data_provider/data_provider.dart';
import 'package:ferry/ferry.dart';
import 'package:get_it/get_it.dart';
import 'package:profile_repository/profile_repository.dart';

void main() async {
  final client = await initClient();
  GetIt.I.registerLazySingleton<Client>(() => client);

  try {
    final profiles = await ProfileRepository().getProfiles();
    print('Profiles: $profiles');
  } on Exception catch (e) {
    print(e);
  }
}

profile_repository:

import 'package:data_provider/data_provider.dart';

/// Thrown when an error occurs while looking up for profiles.
class ProfilesException implements Exception {}

/// {@template profile_repository}
/// Profiles from different categories fetched
/// {@endtemplate}
class ProfileRepository {
  /// {@macro profile_repository}
  ProfileRepository({ProfileService? profileService})
      : _profileService = profileService ?? ProfileService();

  final ProfileService _profileService;

  /// Returns a list of all club and players profiles.
  ///
  /// Throws a [ProfilesException] if an error occurs.
  Future<List<GGetProfilesData_profiles>?> getProfiles() async {
    try {
      final profiles = await _profileService.getProfiles();
      return profiles;
    } on Exception {
      throw ProfilesException();
    }
  }
}

profile_service(数据层):

// ignore_for_file: avoid_print

import 'package:built_collection/built_collection.dart';
import 'package:data_provider/data_provider.dart';
import 'package:ferry/ferry.dart';
import 'package:get_it/get_it.dart';

class ProfileService {
  final client = GetIt.I<Client>();

  Future<List<GGetProfilesData_profiles>?> getProfiles() async {
    try {
      final profilesReq = GGetProfilesReq();
      BuiltList<GGetProfilesData_profiles>? result;

      final value = await client.request(profilesReq).first;

      RequestHelper.checkError(value);

      if (value.data != null && value.data!.profiles != null) {
        result = value.data!.profiles;
      }

      return result?.toList();
    } on DataProviderGraphqlErrorException catch (e) {
      print(e.toString());
    } on DataProviderLinkException catch (e) {
      print(e.toString());
    }
    return List.empty();
  }
}

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

// ignore_for_file: avoid_print, avoid_void_async, unnecessary_lambdas,

import 'package:data_provider/data_provider.dart';
import 'package:ferry/ferry.dart';
import 'package:get_it/get_it.dart';

void main() async {
  final client = await initClient();
  GetIt.I.registerLazySingleton<Client>(() => client);

  try {
    final profiles = await ProfileService().getProfiles();
    print('Profiles: $profiles');
  } on Exception catch (e) {
    print(e);
  }
}

编辑:似乎导入实现看起来不正确。但是文件是生成的...

【问题讨论】:

  • 您是否尝试将 gql_code_builder 明确放入您的依赖项中:pubspec.yaml 中的部分?
  • 我遇到了完全相同的问题。您找到解决方法了吗? @knaecke 明确放置依赖项并不能解决问题。
  • 不幸的是我没有。我现在正在使用 artemis。

标签: flutter dart serialization graphql


【解决方案1】:

我找到了解决方案。不是一个完美的,但它的工作原理。

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

它很丑而且很奇怪,但是很好用……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多