Aqueduct db generate error: Bad state: NoSuchMethodError: The getter 'length' was called on null

794 Views Asked by At

On the system: Dart VM version: 2.9.0-14.0.dev.flutter-2b917f5b6a (be) (Wed Jun 10 15:46:47 2020 +0000) on "windows_x64"

It is OK when run "aqueduct db generate" to create 00000001_initial.migration.dart But, after edit models and rerun "aqueduct db generate", I get the message as below. After delete 00000001_initial.migration.dart and rerun, it is OK.

The message:

-- Aqueduct CLI Version: 3.3.0+1 -- Aqueduct project version: 3.2.0 *** Uncaught error Bad state: NoSuchMethodError: The getter 'length' was called on null. Receiver: null Tried calling: length **** Stacktrace

  • #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
  • #1 _ClassMirror.newInstance (dart:mirrors-patch/mirrors_impl.dart:653:44)
  • #2 Executable.instanceOf (data:application/dart:14:813)
  • #3 SchemaBuilderExecutable.execute (data:application/dart:13:873)
  • #4 main (data:application/dart:9:35)
  • #5 _startIsolate. (dart:isolate-patch/isolate_patch.dart:297:32)
  • #6 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)

Please help me!

4

There are 4 best solutions below

2
J. Pelaez On

It's a bug and it's still there. Happens when there is a previous migration file.

Just erase migrations/00000001_initial.migration.dart and then aqueduct db generate will work as expected.

Tested on Aqueduct 4.0.0-b1

p.s. I know it's the same solution given in the question but I was having the same problem and the solution wasn't clear at first.

0
lukas83 On

They actually fixed it

It's just not on pub.dev yet.

3
Oleksandr Nahirniak On

You can try to downgrade the Dart version.

brew tap dart-lang/dart

brew uninstall dart

brew install [email protected]

It helped me.

UPDATED:

Here is the content of my pubspec.yaml file:

name: mysecurename
description: mysecuredescription
version: 0.1.0

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  aqueduct: ^4.0.0-b1
  analyzer: '>=0.32.0 <0.41.0'
  runtime: ^1.0.0-5
  http: ^0.12.0+4
  mime: ^0.9.6+3

dev_dependencies:
  test: ^1.0.0
  aqueduct_test: ^2.0.0-b1
0
Tony On

With the isolate_executor package (for aqueduct 3.2.0, dart 2.10.0 on Windows 10), I just added the default value "const {}" for namedArguments of "instanceOf" function definition of class Executable in lib\src\isolate_executor.dart as follows: (origin)

U instanceOf<U> (String typeName, {List positionalArguments: const [], Map <Symbol, dynamic> namedArguments, Symbol constructorName}) {...}

(modified):

U instanceOf<U> (String typeName, {List positionalArguments: const [], Map <Symbol, dynamic> namedArguments: const {}, Symbol constructorName}) {...}

It worked fine, including dart 2.10.0. I don't know why, because in the function definition of dart already has this default value declaration.

InstanceMirror newInstance (
       Symbol constructorName, List <dynamic> positionalArguments,
       [Map <Symbol, dynamic> namedArguments = const <Symbol, dynamic> {}]);

Please check and correct me if I am wrong.