GetDutchie / brick

An intuitive way to work with persistent data in Dart

Home Page:https://getdutchie.github.io/brick/#/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Get 'is not a Dart library. It may be a part file or a file without Dart source code.' error on run build runner

pkozlovskiy opened this issue · comments

In all places where I use
part of 'some_class.dart';
Get this error after migrate to Brick 2

[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/features/events/presentation/widgets/events_list_item/event_item_title.dart (cached):

@pkozlovskiy that looks like you are trying to import Flutter code into a Brick model. Is that the case?

If it is, the problem is that Flutter ships with a version of Dart that is incompatible with build_runner.

Instead, consider using extensions to your Brick models within your Flutter code to avoid importing packages/code that are dependent on Flutter to .model.dart files.

I copy 'brick' folder in clean project and 'build_runner build" run without error.
I had to remove the use in the project
'part' and 'part of'
as a solution.

@pkozlovskiy is this issue resolved? Or are you still having problems?

Same problem here.

[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/features/auth/cubit/auth_login_state.dart:  Asset [bable2_tracking_app|lib/features/auth/cubit/auth_login_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 

Looks like brick_offline_first_with_rest_build:brickAdaptersBuilder is considering every file with 'part of' on it. However, when using, for example, flutter_bloc, it is usual to have 'part of' for state and event files

Is there a way to ignore specific folders like bloc and cubit around the project? Or another solution?

@edgarbs1998 are you importing auth_login_state into the Brick model? Can you share your model file?

My current model file is as follows (there is no import of any state file):

import 'package:bable2_tracking_app/features/diary/enums/diary_entry_category.dart';
import 'package:bable2_tracking_app/features/diary/enums/diary_entry_type.dart';
import 'package:brick_offline_first_with_rest/offline_first_with_rest.dart';

@ConnectOfflineFirstWithRest()
class DiaryEntry extends OfflineFirstWithRestModel {
  DiaryEntry({
    this.id,
    required this.category,
    required this.type,
    required this.createdAt,
  });

  @Sqlite(unique: true)
  final String? id;

  @Rest(enumAsString: true)
  @Sqlite(enumAsString: true)
  final DiaryEntryCategory category;

  final DiaryEntryType type;

  final DateTime createdAt;
}

However, the builder is picking up all my state files from flutter_bloc.

I will let the full Log of the build runner task. Note I have to run two times the build runner in order to my schema.g.dart have the part '20230103165504.migration.dart'; line for the imports to work.

Buld runner log:

flutter pub run build_runner build --delete-conflicting-outputs
[INFO] Generating build script... 
[INFO] Generating build script completed, took 479ms  
[INFO] Precompiling build script...... 
[INFO] Precompiling build script... completed, took 10.3s  
FlutterGen v5.0.0 Loading ... pubspec.yaml 
[INFO] Initializing inputs 
[INFO] Building new asset graph... 
[INFO] Building new asset graph completed, took 2.5s  [INFO] Checking for unexpected pre-existing outputs.... 
[INFO] Checking for unexpected pre-existing outputs. completed, took 1ms  
[INFO] Running build... 
[INFO] Generating SDK summary... 
[INFO] 4.5s elapsed, 0/16 actions completed. 
[INFO] Generating SDK summary completed, took 4.3s  
[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/boot/cubit/boot_state.dart:  Asset [bable2_tracking_app|lib/boot/cubit/boot_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 
[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/features/home/cubit/home_state.dart:  Asset [bable2_tracking_app|lib/features/home/cubit/home_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 
[WARNING] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/main_development.dart: Your current `analyzer` version may not fully support your current SDK version.  Analyzer language version: 2.17.0 SDK language version: 2.18.0  Please update to the latest `analyzer` version (5.3.1) by running `flutter packages upgrade`.  If you are not getting the latest version by running the above command, you can try adding a constraint like the following to your pubspec to start diagnosing why you can't get the latest version:  dev_dependencies:   analyzer: ^5.3.1  
[INFO] 6.5s elapsed, 2/18 actions completed. 
[INFO] 7.6s elapsed, 3/18 actions completed. 
[INFO] 8.9s elapsed, 3/18 actions completed. 
[INFO] 9.9s elapsed, 3/19 actions completed. 
[INFO] 10.9s elapsed, 3/19 actions completed. 
[INFO] 12.0s elapsed, 3/19 actions completed. 
[INFO] 13.1s elapsed, 3/19 actions completed. 
[INFO] 22.8s elapsed, 3/19 actions completed. 
[WARNING] No actions completed for 15.5s, waiting on:   - brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/main_development.dart   - brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/l10n/l10n.dart   - brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/bootstrap.dart   - brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/app/view/app.dart   - brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/app/app.dart   .. and 11 more  
[INFO] 28.2s elapsed, 4/19 actions completed. 
[INFO] 30.0s elapsed, 8/23 actions completed. 
[INFO] 32.7s elapsed, 8/24 actions completed. 
[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/features/sign_up_survivor/cubit/sign_up_form_state.dart:  Asset [bable2_tracking_app|lib/features/sign_up_survivor/cubit/sign_up_form_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 
[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/features/sign_up_survivor/cubit/sign_up_validation_state.dart:  Asset [bable2_tracking_app|lib/features/sign_up_survivor/cubit/sign_up_validation_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 
[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/features/auth/cubit/auth_login_state.dart:  Asset [bable2_tracking_app|lib/features/auth/cubit/auth_login_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 
[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/features/diary/diary_create_edit/cubit/diary_create_edit_state.dart:  Asset [bable2_tracking_app|lib/features/diary/diary_create_edit/cubit/diary_create_edit_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 
[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/features/diary/diary_list/cubit/diary_list_state.dart:  Asset [bable2_tracking_app|lib/features/diary/diary_list/cubit/diary_list_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 
[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/features/diary/diary_details/cubit/diary_details_state.dart:  Asset [bable2_tracking_app|lib/features/diary/diary_details/cubit/diary_details_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 
[INFO] Generated diary_entry_adapter.g.dart (DiaryEntry), took 408ms 
[INFO] 37.0s elapsed, 83/85 actions completed. 
[INFO] Aggregating models and migrations... 
[INFO] Generated brick.g.dart, took 142ms 
[INFO] Generated new migration (db/20230103165504.migration.dart), took 2ms 
[INFO] Generated db/schema.g.dart, took 39ms 
Generated: lib/gen/assets.gen.dart FlutterGen finished. 
[INFO] 39.3s elapsed, 155/155 actions completed. 
[INFO] Running build completed, took 40.2s  [INFO] Caching finalized dependency graph... 
[INFO] Caching finalized dependency graph completed, took 340ms  
[SEVERE] Failed after 40.6s 

@edgarbs1998 what is the contents of DiaryEntryType?

[WARNING] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/main_development.dart: Your current analyzer version may not fully support your current SDK version. Analyzer language version: 2.17.0 SDK language version: 2.18.0 Please update to the latest analyzer version (5.3.1) by running flutter packages upgrade. If you are not getting the latest version by running the above command, you can try adding a constraint like the following to your pubspec to start diagnosing why you can't get the latest version: dev_dependencies: analyzer: ^5.3.1

This line is also a concern. Can you upgrade to analyzer 5.3.1, and if that doesn't work, 4.7.0?

I had some trouble updating the analyzer due to flutter_test from the SDK being outdated I think. I am using last Flutter version, 3.3.10 with Dart 2.18.6.

I am new to Flutter, so not fully aware of of Flutter package version solving. Is tthere anything I can change in order to force the use go analyzer: ^5.3.1?

analyzer 5.3.1 gives me the following conflicts:

Running "flutter pub get" in brick_test...                      
Because every version of flutter_test from sdk depends on collection 1.16.0 and analyzer >=5.3.1 depends on collection ^1.17.0, flutter_test from sdk is incompatible with analyzer >=5.3.1.
So, because brick_test depends on both analyzer ^5.3.1 and flutter_test from sdk, version solving failed.
pub get failed (1; So, because brick_test depends on both analyzer ^5.3.1 and flutter_test from sdk, version solving failed.)

analyzer 4.7.0 gives me the following conflicts:

Running "flutter pub get" in brick_test...                      
Because brick_offline_first_with_rest_build <1.0.0 depends on logging ^0.11.3 and brick_offline_first_with_rest_build >=1.3.0 depends on analyzer ^3.2.0, brick_offline_first_with_rest_build <1.0.0-∞ or >=1.3.0 requires logging ^0.11.3 or analyzer ^3.2.0.
And because brick_offline_first_with_rest_build ^1.0.0 depends on brick_offline_first_abstract ^1.0.0+1, every version of brick_offline_first_with_rest_build requires brick_offline_first_abstract ^1.0.0+1 or logging ^0.11.3 or analyzer ^3.2.0.
And because brick_offline_first_with_rest 1.1.0 depends on both brick_offline_first_abstract ^2.0.0 and logging ^1.0.0, if brick_offline_first_with_rest_build any and brick_offline_first_with_rest 1.1.0 then analyzer ^3.2.0.
And because no versions of brick_offline_first_with_rest match >1.1.0 <2.0.0 and brick_test depends on brick_offline_first_with_rest ^1.1.0, every version of brick_offline_first_with_rest_build requires analyzer ^3.2.0.
So, because brick_test depends on both analyzer ^4.7.0 and brick_offline_first_with_rest_build any, version solving failed.
pub get failed (1; So, because brick_test depends on both analyzer ^4.7.0 and brick_offline_first_with_rest_build any, version solving failed.)

Also I will let my pubspec file:

name: brick_test
description: A Very Good Project created by Very Good CLI.
version: 1.0.0+1
publish_to: none

environment:
  sdk: ">=2.18.0 <3.0.0"
  flutter: 3.3.8

dependencies:
  bloc: ^8.1.0
  brick_offline_first_with_rest: ^1.1.0
  brick_sqlite: any
  flutter:
    sdk: flutter
  flutter_bloc: ^8.1.1
  flutter_localizations:
    sdk: flutter
  intl: ^0.17.0
  sqflite: any

dev_dependencies:
  analyzer: ^4.7.0
  bloc_test: ^9.1.0
  brick_offline_first_with_rest_build: any
  build_runner: any
  flutter_test:
    sdk: flutter
  mocktail: ^0.3.0
  very_good_analysis: ^3.1.0

flutter:
  uses-material-design: true
  generate: true

Also, I will let my project folder structure, not sure if it may affect anything on Brick 2.

| [lib]
| - [brick]
| | - [adapters]
| | - [db]
| | - data_repository.dart
| - [features]
| | - [diary]
| | | - [diary_list]
| | | | - [cubit]
| | | | | - diary_list_cubit.dart
| | | | | - diary_list_state.dart
| | | - [models]
| | | | - diary_entry.model.dart

Providing a full example repository of this issue.
Repository: https://github.com/edgarbs1998/brick_issue_309/blob/main/README.md

Log of the build_runer run:

flutter pub run build_runner build --delete-conflicting-outputs
[INFO] Generating build script... 
[INFO] Generating build script completed, took 198ms  
[INFO] Precompiling build script...... 
[INFO] Precompiling build script... completed, took 3.4s  
[INFO] Initializing inputs 
[INFO] Building new asset graph... 
[INFO] Building new asset graph completed, took 407ms  [INFO] Checking for unexpected pre-existing outputs.... 
[INFO] Checking for unexpected pre-existing outputs. completed, took 0ms  
[INFO] Running build... 
[INFO] Generating SDK summary... 
[INFO] 1.8s elapsed, 0/14 actions completed. 
[INFO] Generating SDK summary completed, took 1.8s  
[SEVERE] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/notes/cubit/notes_state.dart:  Asset [brick_issue_309|lib/notes/cubit/notes_state.dart] is not a Dart library. It may be a part file or a file without Dart source code. 
[WARNING] brick_offline_first_with_rest_build:brickAdaptersBuilder on lib/main_development.dart: Your current `analyzer` version may not fully support your current SDK version.  Analyzer language version: 2.17.0 SDK language version: 2.18.0  Please update to the latest `analyzer` version (5.3.1) by running `flutter packages upgrade`.  If you are not getting the latest version by running the above command, you can try adding a constraint like the following to your pubspec to start diagnosing why you can't get the latest version:  dev_dependencies:   analyzer: ^5.3.1  
[INFO] 3.1s elapsed, 1/14 actions completed. 
[INFO] 4.2s elapsed, 1/14 actions completed. 
[INFO] 6.3s elapsed, 1/14 actions completed. 
[INFO] 8.1s elapsed, 3/14 actions completed. 
[INFO] Generated note_adapter.g.dart (Note), took 44ms 
[INFO] Aggregating models and migrations... 
[INFO] Generated brick.g.dart, took 2ms 
[INFO] Generated db/schema.g.dart, took 7ms 
[INFO] Running build completed, took 8.3s  [INFO] Caching finalized dependency graph... 
[INFO] Caching finalized dependency graph completed, took 31ms  
[SEVERE] Failed after 8.4s 

@edgarbs1998 This is helpful, thank you. Let me poke around. The logging dependency is likely what's causing this.

@edgarbs1998 I mistakenly did not publish brick_offline_first_with_rest_build v2.1.0. I apologize for this.

I've used your pubspec and am able to bundle analyzer 4.7.0 . Please try using build_runner again cc @pkozlovskiy

@tshedor The build_runner is now working with no errors or warnings. I think the analyzer conflict was also caused by the incorrect version of brick_offline_first_with_rest_build. Thank you for your work, it is an amazing library.