【问题标题】:Any thoughts on why I cannot get this freezed (flutter/dart) example (with generics) to build?关于为什么我无法构建这个冻结的(颤振/飞镖)示例(使用泛型)有什么想法吗?
【发布时间】:2022-08-18 03:02:26
【问题描述】:

我是扑扑和飞镖的新手。我试图让以下示例在我的测试项目中工作:

https://pub.dev/packages/freezed#deserializing-generic-classes

这是我的整个飞镖文件(api_response.dart):

import \'package:freezed_annotation/freezed_annotation.dart\';
import \'package:flutter/foundation.dart\';

part \'api_response.freezed.dart\';
part \'api_response.g.dart\';

@Freezed(genericArgumentFactories: true)
class ApiResponse<T> with _$ApiResponse {
  const factory ApiResponse<T>.data(T data) = ApiResponseData;
  const factory ApiResponse<T>.error(String message) = ApiResponseError;

  factory ApiResponse<T>.fromJson(Map<String, dynamic> json, T Function(Object?) fromJsonT) => _$ApiResponseFromJson(json, fromJsonT);
}

当我使用此命令构建时:

flutter pub run build_runner build --delete-conflicting-outputs

我收到以下错误:

[INFO] Running build...
[SEVERE] freezed:freezed on lib/models/api_response.dart:

This builder requires Dart inputs without syntax errors.
However, package:psf_provider/models/api_response.dart (or an existing part) contains the following errors.
api_response.dart:9:32: Functions must have an explicit list of parameters.
api_response.dart:9:3: Only redirecting factory constructors can be declared to be \'const\'.
api_response.dart:9:32: A function body must be provided.
And 13 more...

这是我的 pubspec.yaml 文件定义,用于显示我正在使用的版本:

environment:
  sdk: \">=2.17.0 <3.0.0\"

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2
  flutter_hooks: ^0.18.0
  hooks_riverpod: ^2.0.0-dev.9
  dio: ^4.0.0
  flutter_secure_storage: ^4.1.0
  easy_localization: ^3.0.1
  settings_ui: ^2.0.0
  freezed_annotation: ^2.1.0
  json_annotation: ^4.6.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^1.0.0
  build_runner: ^2.2.0
  freezed: ^2.1.0+1
  json_serializable: ^6.3.1

有任何想法吗?感谢您的关注!

    标签: flutter dart generics freezed


    【解决方案1】:

    看起来文档已经过时了。它应该如下所示:

    @Freezed(genericArgumentFactories: true)
    class ApiResponse<T> with _$ApiResponse<T> {
      factory ApiResponse.data(T data) = ApiResponseData;
      factory ApiResponse.error(String message) = ApiResponseError;
    
      factory ApiResponse.fromJson(
        Map<String, dynamic> json,
        T Function(Object? json) fromJsonT,
      ) =>
          _$ApiResponseFromJson<T>(json, fromJsonT);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-05
      • 1970-01-01
      • 2021-11-18
      • 2021-08-14
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2021-03-26
      • 2022-08-17
      相关资源
      最近更新 更多