0
votes

I am developing an app in Flutter and dart , using SQFLite database and Firestore , I want when the user click on logout button , app deletes the sqflite database and return the user to Log In Screen and when Log In fetch the data user info log in from Firestore ,and it deletes the DB , but the problem is when I want to log in again to app , it shows me this error ..

Please need help

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: DatabaseException(database_closed 1)
#0      wrapDatabaseException (package:sqflite/src/exception_impl.dart:12:7)
E/flutter (28706): <asynchronous suspension>
E/flutter (28706): #1      SqfliteDatabaseFactoryImpl.wrapDatabaseException 
(package:sqflite/src/factory_impl.dart:25:7)
E/flutter (28706): #2      SqfliteDatabaseMixin.safeInvokeMethod 
 (package:sqflite/src/database_mixin.dart:188:15)
  E/flutter (28706): #3      SqfliteDatabaseMixin.txnRawInsert.<anonymous closure> 
 (package:sqflite/src/database_mixin.dart:363:14)
E/flutter (28706): #4      SqfliteDatabaseMixin.txnSynchronized.<anonymous closure> 
(package:sqflite/src/database_mixin.dart:307:22)
E/flutter (28706): #5      BasicLock.synchronized (package:synchronized/src/basic_lock.dart:32:26)
E/flutter (28706): #6      SqfliteDatabaseMixin.txnSynchronized 
(package:sqflite/src/database_mixin.dart:303:43)
E/flutter (28706): #7      SqfliteDatabaseMixin.txnWriteSynchronized 
(package:sqflite/src/database_mixin.dart:325:7)
E/flutter (28706): #8      SqfliteDatabaseMixin.txnRawInsert 
(package:sqflite/src/database_mixin.dart:362:12)
E/flutter (28706): #9      SqfliteDatabaseExecutorMixin.rawInsert 
(package:sqflite/src/database_mixin.dart:49:15)
E/flutter (28706): #10     SqfliteDatabaseExecutorMixin.insert 
 (package:sqflite/src/database_mixin.dart:59:12)
E/flutter (28706): #11     SQFliteDBHelper.SAVE_USER 
(package:health_calorie_db/settings_in_app/sqflite_db_helper.dart:86:20)
E/flutter (28706): <asynchronous suspension>
E/flutter (28706): #12     userServices.saveToSQFLiteDB 
(package:health_calorie_db/dbServicesManager/userServices.dart:72:13)
E/flutter (28706): #13     userServices.logInCheck 
(package:health_calorie_db/dbServicesManager/userServices.dart:99:10)
E/flutter (28706): <asynchronous suspension>
E/flutter (28706): #14     loginState.checkValidationForms 
(package:health_calorie_db/ui_classes/log_in_up_pages/log_in_page.dart:25:22)
E/flutter (28706): #15     loginState.build.<anonymous closure>.<anonymous closure> 
(package:health_calorie_db/ui_classes/log_in_up_pages/log_in_page.dart:112:60)
E/flutter (28706): #16     _createButton.build.<anonymous closure> 
(package:health_calorie_db/ui_classes/log_in_up_pages/log_in_page.dart:165:9)
E/flutter (28706): #17     _InkResponseState._handleTap 
(package:flutter/src/material/ink_well.dart:706:14)
E/flutter (28706): #18     _InkResponseState.build.<anonymous closure> 
 (package:flutter/src/material/ink_well.dart:789:36)
E/flutter (28706): #19     GestureRecognizer.invokeCallback 
(package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter (28706): #20     TapGestureRecognizer.handleTapUp 
(package:flutter/src/gestures/tap.dart:486:11)
E/flutter (28706): #21     BaseTapGestureRecognizer._checkUp 
(package:flutter/src/gestures/tap.dart:264:5)
E/flutter (28706): #22     BaseTapGestureRecognizer.acceptGesture 
 (package:flutter/src/gestures/tap.dart:236:7)
E/flutter (28706): #23     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter (28706): #24     GestureBinding.handleEvent 
 (package:flutter/src/gestures/binding.dart:222:20)
E/flutter (28706): #25     GestureBinding.dispatchEvent 
(package:flutter/src/gestures/binding.dart:198:22)
E/flutter (28706): #26     GestureBinding._handlePointerEvent 
 (package:flutter/src/gestures/binding.dart:156:7)
 E/flutter (28706): #27     GestureBinding._flushPointerEventQueue 
 (package:flutter/src/gestures/binding.dart:102:7)
  E/flutter (28706): #28     GestureBinding._handlePointerDataPacket 
 (package:flutter/src/gestures/binding.dart:86:7)
 E/flutter (28706): #29     _rootRunUnary (dart:async/zone.dart:1138:13)
 E/flutter (28706): #30     _CustomZone.runUnary (dart:async/zone.dart:1031:19)
 E/flutter (28706): #31     _CustomZone.runUnaryGuarded (dart:async/zone.dart:933:7)
 E/flutter (28706): #32     _invoke1 (dart:ui/hooks.dart:273:10)
 E/flutter (28706): #33     _dispatchPointerDataPacket (dart:ui/hooks.dart:182:5)

and here is the Code

 FlatButton(
            child: Text('Yes'),
            onPressed: ()async {
              setState(() {
                dbHelper.deleteDB();
                var duration = new Duration(seconds: 8);
                return new Timer(duration, (){
                  exitApp();
                });
              });
            },

Future<bool> deleteDB() async {
  try{
 deleteDatabase(path);
 }catch( e){
 print(e.toString());
}
 print('deleting db');
}

  exitApp()async {
  Navigator.of(context).pushAndRemoveUntil(new MaterialPageRoute(builder: (context)=>login()), 
  (Route<dynamic> route) => false);
}


Future logInCheck(String name , String email, BuildContext buildContext) async
{
  userModel user ;
  final QuerySnapshot result = await userCollection.where('user_email', isEqualTo: email)
    .where('user_name' , isEqualTo: name).limit(1).getDocuments(); // searching for a particular user

  if(result.documents .length > 0){
  final List<DocumentSnapshot> ds = result.documents;
  for(int i=0; i< 1; i++ )
  {
     user = new userModel(ds[i].documentID, ds[i]['user_name'],ds[i]['user_email'],
     ds[i]['user_gender'],
     ds[i]['user_weight'],ds[i]['user_height'] ,ds[i]['cityPoint'] ,ds[i]['checkLogIn']);
     print(user.user_email + '  :  ' +user.user_id);
     saveToSQFLiteDB(user);
     print('Added');
 }
nav.HOMEnavigate(buildContext,email);
} // if

else{
  String msg = 'Couldnt find user with email \n fill with correct info' ;
  nav.showSnackBar(buildContext , msg);
}

}

void saveToSQFLiteDB(userModel user) {

  userInApp u = new userInApp(user.user_id, user.user_name, user.user_email, user.user_weight,
   user.user_height, user.cityPoint.latitude, user.cityPoint.longitude,user.checkLogIN);
  dbHelper.SAVE_USER(u);
  }


 Future<userInApp> SAVE_USER (userInApp user) async{
  var dbClient = await datebase;
//user.user_id =
  await dbClient.insert(userTable, user.toMap()).toString();
  print('user has been saved');
  return user;

}

1

1 Answers

2
votes

I found the problem , I have to set db = null before deleting db , When I change deleteDB method to this , I t worked As I want .. Thanks

  Future<void> deleteDB() async {
   try{
    print('deleting db');
    db=null;
    deleteDatabase(path);
    }catch( e){
    print(e.toString());
     }

print('db is deleted');
}