You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Retrofit报错:文件多库归属及构造函数找不到

Flutter编译报错:A file can't be part of more than one library 解决方法

报错现象

应用编译失败,核心错误提示:

  • A file can't be part of more than one library
  • 找不到_AppServiceClient构造函数

问题代码

app_api.dart(手写核心代码)

import 'package:dio/dio.dart';
import 'package:firstproject/app/constants.dart';
import 'package:firstproject/data/response/responses.dart';
import 'package:retrofit/http.dart';
part 'app_api.g.dart';

@RestApi(baseUrl: Constants.baseUrl)
abstract class AppServiceClient {
 factory AppServiceClient(Dio dio, {String baseUrl}) = _AppServiceClient;

  // POST请求实现
  @POST("customers/login")
  Future<AuthenticationResponse> login(
    @Field("email") String email,
    @Field("password") String password,
  );
}

app_api.g.dart(Retrofit自动生成代码)

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'app_api.dart';

// **************************************************************************
// RetrofitGenerator
// **************************************************************************

// ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers

class _AppServiceClient implements AppServiceClient {
  _AppServiceClient(
    this._dio, {
    this.baseUrl,
  }) {
    baseUrl ??= 'http://hesham060.mocklab.io/';
  }

  final Dio _dio;

  String? baseUrl;

  @override
  Future<AuthenticationResponse> login(
    email,
    password,
  ) async {
    const _extra = <String, dynamic>{};
    final queryParameters = <String, dynamic>{};
    final _headers = <String, dynamic>{};
    final _data = {
      'email': email,
      'password': password,
    };
    final _result = await _dio.fetch<Map<String, dynamic>>(
        _setStreamType<AuthenticationResponse>(Options(
      method: 'POST',
      headers: _headers,
      extra: _extra,
    )
            .compose(
              _dio.options,
              'customers/login',
              queryParameters: queryParameters,
              data: _data,
            )
            .copyWith(baseUrl: baseUrl ?? _dio.options.baseUrl)));
    final value = AuthenticationResponse.fromJson(_result.data!);
    return value;
  }

  RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
    if (T != dynamic &&
        !(requestOptions.responseType == ResponseType.bytes ||
            requestOptions.responseType == ResponseType.stream)) {
      if (T == String) {
        requestOptions.responseType = ResponseType.plain;
      } else {
        requestOptions.responseType = ResponseType.json;
      }
    }
    return requestOptions;
  }
}

完整报错详情

lib/data/network/app_api.g.dart: Error: A file can't be part of more than one library.
Try moving the shared declarations into the libraries, or into a new library.
lib/data/network/app_api.dart: Context: Used as a part in this library.
lib/data/network/app_Api.dart: Context: Used as a part in this library.
lib/data/network/app_Api.dart:9:56: Error: Couldn't find constructor '_AppServiceClient'.
 factory AppServiceClient(Dio dio, {String baseUrl}) = _AppServiceClient;
                                                       ^
lib/data/network/app_Api.dart:9:56: Error: Redirection constructor target not found: '_AppServiceClient'
 factory AppServiceClient(Dio dio, {String baseUrl}) = _AppServiceClient;
                                                       ^
lib/data/network/app_api.g.dart : error : A file can't be part of more than one library. [C:\Users\hesha\OneDrive\Desktop\coding\Mena advanced Course\First Project\firstproject\build\windows\flutter\flutter_assemble.vcxproj]
lib/data/network/app_Api.dart(9,56): error GF7CA4DBF: Couldn't find constructor '_AppServiceClient'. [C:\Users\hesha\OneDrive\Desktop\coding\Mena advanced Course\First Project\firstproject\build\windows\flutter\flutter_assemble.vcxproj]
lib/data/network/app_Api.dart(9,56): error G22A956AA: Redirection constructor target not found: '_AppServiceClient' [C:\Users\hesha\OneDrive\Desktop\coding\Mena advanced Course\First Project\firstproject\build\windows\flutter\flutter_assemble.vcxproj]


FAILURE: Build failed with an exception.

* Where:
Script 'C:\Users\hesha\OneDrive\Desktop\coding\flatter coding\flutter_windows_2.8.1-stable\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 1159

* What went wrong:
Execution failed for task ':app:compileFlutterBuildDebug'.
> Process 'command 'C:\Users\hesha\OneDrive\Desktop\coding\flatter coding\flutter_windows_2.8.1-stable\flutter\bin\flutter.bat'' finished with non-zero exit value 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

解决步骤

  • 拆分代码到独立文件:将手写的app_api.dart和Retrofit生成的app_api.g.dart分别保存为两个独立文件,禁止合并在同一文件中。
  • 修复文件名大小写问题:报错中出现app_api.dart和app_Api.dart两种大小写命名,Dart的part语句对文件名大小写敏感,需确保:
    • app_api.dart中的part 'app_api.g.dart';语句与实际生成文件的文件名完全一致
    • 所有文件引用使用统一的大小写命名
  • 重新生成Retrofit代码:删除现有app_api.g.dart,执行命令重新生成:
    flutter pub run build_runner build
    
  • 清理项目缓存:若问题仍存在,执行以下命令后重新编译:
    flutter clean
    flutter pub get
    flutter pub run build_runner build --delete-conflicting-outputs
    

内容的提问来源于stack exchange,提问作者Hesham Khaled

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:56:09