Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tried calling: writeInto(Instance of 'GenerationContext'), while updating table. This happened when i tried using " Future updateBalance(BalanceCompanion data) => update(balance).replace(data);" #587

Closed
suvedG opened this issue May 22, 2020 · 12 comments

Comments

@suvedG
Copy link

suvedG commented May 22, 2020

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The method 'writeInto' was called on null.
E/flutter (26333): Receiver: null
E/flutter (26333): Tried calling: writeInto(Instance of 'GenerationContext')
E/flutter (26333): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
E/flutter (26333): #1      Where.writeInto (package:moor/src/runtime/query_builder/components/where.dart:15:15)
E/flutter (26333): #2      Query.constructQuery.writeWithSpace (package:moor/src/runtime/query_builder/statements/query.dart:51:17)
E/flutter (26333): #3      Query.constructQuery (package:moor/src/runtime/query_builder/statements/query.dart:58:19)
E/flutter (26333): #4      UpdateStatement._performQuery (package:moor/src/runtime/query_builder/statements/update.dart:33:17)
E/flutter (26333): #5      UpdateStatement.replace (package:moor/src/runtime/query_builder/statements/update.dart:134:31)
E/flutter (26333): #6      BalanceDao.updateBalance (package:expenseapp/database/moordatabase.dart:160:66)
E/flutter (26333): #7      _LandingState.showIncomeDialouge.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:expenseapp/pages/landing.dart:142:49)   
E/flutter (26333): #8      _rootRun (dart:async/zone.dart:1180:38)
E/flutter (26333): #9      _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter (26333): #10     _FutureListener.handleWhenComplete (dart:async/future_impl.dart:165:18)
E/flutter (26333): #11     Future._propagateToListeners.handleWhenCompleteCallback (dart:async/future_impl.dart:652:39)
E/flutter (26333): #12     Future._propagateToListeners (dart:async/future_impl.dart:708:37)
E/flutter (26333): #13     Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter (26333): #14     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15)
E/flutter (26333): #15     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13)
E/flutter (26333): #16     InsertStatement.insert (package:moor/src/runtime/query_builder/statements/insert.dart)
E/flutter (26333): <asynchronous suspension>
E/flutter (26333): #17     IncomeDao.addIncome (package:expenseapp/database/moordatabase.dart:180:63)
E/flutter (26333): #18     _LandingState.showIncomeDialouge.<anonymous closure>.<anonymous closure> (package:expenseapp/pages/landing.dart:138:52)
E/flutter (26333): #19     _NeumorphicButtonState.build.<anonymous closure> (package:flutter_neumorphic/src/widget/button.dart:172:25)
E/flutter (26333): #20     TapGestureRecognizer.handleTapUp.<anonymous closure> (package:flutter/src/gestures/tap.dart:502:56)
E/flutter (26333): #21     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter (26333): #22     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:502:11)
E/flutter (26333): #23     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:282:5)
E/flutter (26333): #24     BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:217:7)
E/flutter (26333): #25     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:475:9)
E/flutter (26333): #26     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
E/flutter (26333): #27     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:122:9)
E/flutter (26333): #28     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
E/flutter (26333): #29     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18)
E/flutter (26333): #30     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106:7)
E/flutter (26333): #31     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
E/flutter (26333): #32     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter (26333): #33     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter (26333): #34     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter (26333): #35     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter (26333): #36     _rootRunUnary (dart:async/zone.dart:1196:13)
E/flutter (26333): #37     _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter (26333): #38     _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)
E/flutter (26333): #39     _invoke1 (dart:ui/hooks.dart:275:10)
E/flutter (26333): #40     _dispatchPointerDataPacket (dart:ui/hooks.dart:184:5)
E/flutter (26333):
@simolus3
Copy link
Owner

Thanks for the report, can you show me the definition of the Balance table and which value you tried to insert? Thanks!

@suvedG
Copy link
Author

suvedG commented May 22, 2020

Thank you for replying.
The Definition of balance table is as follows:

class Balance extends Table{
IntColumn get id=> integer().nullable().autoIncrement()();
IntColumn get userId=> integer()();
RealColumn get totalBalance=> real()();
DateTimeColumn get balanceDate=> dateTime().nullable()();

}

And what i am trying to do is create/update the values for the balance table on the basis of income and expense. So, if user enters income, it gets added to balance table and if he enters Expense , it will get deducted form the balance.

//Code for update
final income = IncomeCompanion(userId: moor.Value(userId),totalIncome: moor.Value(addamount),incomeDate:moor.Value(dateTime));
await database.incomeDao.addIncome(income).whenComplete((){
print('New Balance: ${addamount+currentBalance}');
final data = BalanceCompanion(userId: moor.Value(userId),
totalBalance: moor.Value(addamount+currentBalance),balanceDate:moor.Value(dateTime));
database.balanceDao.updateBalance(data);
scaffoldkey.currentState.showSnackBar(new SnackBar(content: Text('Sucessfully Added')));
priceController.clear();
Navigator.pop(context);

                      });

@kuhnroyal
Copy link
Contributor

Your id column should not be nullable if it is autoIncrement. Probably has nothing to do with this problem.

@suvedG
Copy link
Author

suvedG commented May 22, 2020

@kuhnroyal i was not using nullable for primary entity, until i upgraded moor to 3.0.0. After the upgrade, it started throwing errors like id cannot be null, even when using Companions to insert data. So, this was a temporary solution for me. It works fine without a problem, even it's a bad practice! :)

@kuhnroyal
Copy link
Contributor

kuhnroyal commented May 22, 2020

Ok. Can you post your balanceDao.updateBalance query please. I still wonder if this has to do with the nullable PK. Maybe the correct Where clause can no be created.

@suvedG
Copy link
Author

suvedG commented May 22, 2020

@kuhnroyal
Future updateBalance(BalanceCompanion data) => update(balance).replace(data);
Strange thing is, the insert queries are working but updates and deletes don't work properly, even if am following the exact process given on the official documentation

@kuhnroyal
Copy link
Contributor

I believe you are running into a problem when the WHERE clause is constructed here query.dart#L191 because no primary key can be found by moor. This may really be due to the nullable id.
Do you run this in release mode where assertions are disabled?

@suvedG
Copy link
Author

suvedG commented May 22, 2020

Not running on release, just on debug

I just removed all the nullable notation, and i got following while registering the user:
[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: InvalidDataException: Sorry, Instance of 'UsersCompanion' cannot be used for that because:
E/flutter (31165): • id: This value was required, but isn't present
E/flutter (31165):
E/flutter (31165): #0 VerificationContext.throwIfInvalid (package:moor/src/runtime/data_verification.dart:74:5)
E/flutter (31165): #1 InsertStatement._validateIntegrity (package:moor/src/runtime/query_builder/statements/insert.dart:197:51)
E/flutter (31165): #2 InsertStatement.createContext (package:moor/src/runtime/query_builder/statements/insert.dart:96:5)
E/flutter (31165): #3 InsertStatement.insert (package:moor/src/runtime/query_builder/statements/insert.dart:64:17)
E/flutter (31165): #4 UserDao.addUser (package:expenseapp/database/moordatabase.dart:89:52)
E/flutter (31165): #5 _RegisterState.build.. (package:expenseapp/pages/sign_in/register.dart:170:53)
E/flutter (31165): #6 _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter (31165): #7 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter (31165): #8 _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
E/flutter (31165): #9 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
E/flutter (31165): #10 Future._propagateToListeners (dart:async/future_impl.dart:711:32)
E/flutter (31165): #11 Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter (31165): #12 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15)
E/flutter (31165): #13 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13)
E/flutter (31165): #14 SimpleSelectStatement._getWithQuery (package:moor/src/runtime/query_builder/statements/select/select.dart)
E/flutter (31165):
E/flutter (31165): #15 SimpleSelectStatement.get (package:moor/src/runtime/query_builder/statements/select/select.dart:35:12)
E/flutter (31165): #16 UserDao.getAllUsers (package:expenseapp/database/moordatabase.dart:90:52)
E/flutter (31165): #17 UserDao.checkUser (package:expenseapp/database/moordatabase.dart:129:10)
E/flutter (31165): #18 _RegisterState.build. (package:expenseapp/pages/sign_in/register.dart:167:51)
E/flutter (31165): #19 _NeumorphicButtonState.build. (package:flutter_neumorphic/src/widget/button.dart:172:25)
E/flutter (31165): #20 TapGestureRecognizer.handleTapUp. (package:flutter/src/gestures/tap.dart:502:56)
E/flutter (31165): #21 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter (31165): #22 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:502:11)
E/flutter (31165): #23 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:282:5)
E/flutter (31165): #24 BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:254:7)
E/flutter (31165): #25 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter (31165): #26 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:222:20)
E/flutter (31165): #27 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter (31165): #28 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter (31165): #29 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter (31165): #30 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter (31165): #31 _rootRunUnary (dart:async/zone.dart:1196:13)
E/flutter (31165): #32 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter (31165): #33 _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)
E/flutter (31165): #34 _invoke1 (dart:ui/hooks.dart:275:10)
E/flutter (31165): #35 _dispatchPointerDataPacket (dart:ui/hooks.dart:184:5)

Table for Users
class Users extends Table{
IntColumn get id=> integer().autoIncrement()();
TextColumn get phone=> text()();
TextColumn get fullname=>text()();
TextColumn get password=> text()();
@OverRide
Set<Column> get primaryKey=> {phone};
}

Insert query for users
Future addUser(UsersCompanion user)=>into(users).insert(user);

Method for inserting user
final adduser = UsersCompanion(fullname: moor.Value(username.text),password: moor.Value(password.text),phone: moor.Value(phone.text)); appDatabase.userDao.addUser(adduser);

Why is it asking for id, is it because i set phone as PK? Should i set it as unique key?

@kuhnroyal
Copy link
Contributor

Did you regenerate?

@kuhnroyal
Copy link
Contributor

And I believe you can not have an autoincrement column that is not a primary key. If you want phone to be your primary key, then you should probably remove the id field. However it is usually better to keep the id field as a primary key and make phone unique - but that always depends on the use case.

@suvedG
Copy link
Author

suvedG commented May 22, 2020

@kuhnroyal Thank you, it solved the problem for users table!

And Yes I always run this when regenerating:
flutterl packages run build_runner watch --delete-conflicting-outputs

I removed all the nullable annotation, but still get the error while updating balance.
[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The method 'writeInto' was called on null.
E/flutter ( 7385): Receiver: null
E/flutter ( 7385): Tried calling: writeInto(Instance of 'GenerationContext')
E/flutter ( 7385): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
E/flutter ( 7385): #1 Where.writeInto (package:moor/src/runtime/query_builder/components/where.dart:15:15)
E/flutter ( 7385): #2 Query.constructQuery.writeWithSpace (package:moor/src/runtime/query_builder/statements/query.dart:51:17)
E/flutter ( 7385): #3 Query.constructQuery (package:moor/src/runtime/query_builder/statements/query.dart:58:19)
E/flutter ( 7385): #4 UpdateStatement._performQuery (package:moor/src/runtime/query_builder/statements/update.dart:33:17)
E/flutter ( 7385): #5 UpdateStatement.replace (package:moor/src/runtime/query_builder/statements/update.dart:134:31)
E/flutter ( 7385): #6 BalanceDao.updateBalance (package:expenseapp/database/moordatabase.dart:159:66)
E/flutter ( 7385): #7 _LandingState.showIncomeDialouge... (package:expenseapp/pages/landing.dart:142:49)
E/flutter ( 7385): #8 _rootRun (dart:async/zone.dart:1180:38)
E/flutter ( 7385): #9 _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter ( 7385): #10 _FutureListener.handleWhenComplete (dart:async/future_impl.dart:165:18)
E/flutter ( 7385): #11 Future._propagateToListeners.handleWhenCompleteCallback (dart:async/future_impl.dart:652:39)
E/flutter ( 7385): #12 Future._propagateToListeners (dart:async/future_impl.dart:708:37)
E/flutter ( 7385): #13 Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter ( 7385): #14 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:36:15)
E/flutter ( 7385): #15 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:298:13)
E/flutter ( 7385): #16 InsertStatement.insert (package:moor/src/runtime/query_builder/statements/insert.dart)
E/flutter ( 7385):
E/flutter ( 7385): #17 IncomeDao.addIncome (package:expenseapp/database/moordatabase.dart:179:63)
E/flutter ( 7385): #18 _LandingState.showIncomeDialouge.. (package:expenseapp/pages/landing.dart:138:52)
E/flutter ( 7385): #19 _NeumorphicButtonState.build. (package:flutter_neumorphic/src/widget/button.dart:172:25)
E/flutter ( 7385): #20 TapGestureRecognizer.handleTapUp. (package:flutter/src/gestures/tap.dart:502:56)
E/flutter ( 7385): #21 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter ( 7385): #22 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:502:11)
E/flutter ( 7385): #23 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:282:5)
E/flutter ( 7385): #24 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:217:7)
E/flutter ( 7385): #25 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:475:9)
E/flutter ( 7385): #26 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
E/flutter ( 7385): #27 PointerRouter._dispatchEventToRoutes. (package:flutter/src/gestures/pointer_router.dart:122:9)
E/flutter ( 7385): #28 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
E/flutter ( 7385): #29 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18)
E/flutter ( 7385): #30 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106:7)
E/flutter ( 7385): #31 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
E/flutter ( 7385): #32 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter ( 7385): #33 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter ( 7385): #34 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter ( 7385): #35 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter ( 7385): #36 _rootRunUnary (dart:async/zone.dart:1196:13)
E/flutter ( 7385): #37 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter ( 7385): #38 _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)
E/flutter ( 7385): #39 _invoke1 (dart:ui/hooks.dart:275:10)
E/flutter ( 7385): #40 _dispatchPointerDataPacket (dart:ui/hooks.dart:184:5)

@suvedG
Copy link
Author

suvedG commented May 22, 2020

I solved the problem by removing id and setting userId as primary key on balance table as well.

Note: The error persisted even when i did not put id and userId both as primary key as i did on users table. Don't know what caused the problem, but removing id and puting userId as primary worked.

@suvedG suvedG closed this as completed May 22, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants