Database 注销时删除数据库,登录dart后重新创建
我正在使用SQFLite数据库和Firestore在Flatter和dart中开发一个应用程序,我希望当用户单击注销按钮时,应用程序删除SQFLite数据库并返回用户登录屏幕,登录时从Firestore获取数据用户信息登录,并删除数据库,但问题是,当我想再次登录应用程序时,它会显示此错误 需要帮助吗Database 注销时删除数据库,登录dart后重新创建,database,flutter,dart,sqflite,Database,Flutter,Dart,Sqflite,我正在使用SQFLite数据库和Firestore在Flatter和dart中开发一个应用程序,我希望当用户单击注销按钮时,应用程序删除SQFLite数据库并返回用户登录屏幕,登录时从Firestore获取数据用户信息登录,并删除数据库,但问题是,当我想再次登录应用程序时,它会显示此错误 需要帮助吗 [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: DatabaseException(database_closed
[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)
[错误:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:DatabaseException(database\u关闭1)
#0 wrapDatabaseException(包:sqflite/src/exception\u impl.dart:12:7)
E/颤振(28706):
E/颤振(28706):#1 sqflitedDatabaseFactoryImpl.wrapDatabaseException
(包装:sqflite/src/factory_impl.dart:25:7)
E/颤振(28706):#2 sqflietedatabasemixin.safeInvokeMethod
(软件包:sqflite/src/database_mixin.dart:188:15)
E/颤振(28706):#3 sqflitedDatabaseMixin.txnRawInsert。
(软件包:sqflite/src/database_mixin.dart:363:14)
E/颤振(28706):#4 SqflitedDatabaseMixin.txn同步。
(软件包:sqflite/src/database_mixin.dart:307:22)
E/flatter(28706):#5 BasicLock.synchronized(包:synchronized/src/basic_lock.dart:32:26)
E/颤振(28706):#6 SqflitedDatabaseMixin.txn同步
(软件包:sqflite/src/database_mixin.dart:303:43)
E/颤振(28706):#7 sqflietedatabasemixin.txnWriteSynchronized
(软件包:sqflite/src/database_mixin.dart:325:7)
E/颤振(28706):#8 sqflitedDatabaseMixin.txnRawInsert
(软件包:sqflite/src/database_mixin.dart:362:12)
E/颤振(28706):#9 SqflitedDatabaseExecutorMixin.rawInsert
(软件包:sqflite/src/database_mixin.dart:49:15)
E/颤振(28706):#10 sqflitedDatabaseExecutorMixin.insert
(软件包:sqflite/src/database_mixin.dart:59:12)
E/颤振(28706):#11 SQFliteDBHelper.SAVE#u用户
(套餐:健康\卡路里\数据库/设置\在\应用程序/sqflite\数据库\助手中。dart:86:20)
E/颤振(28706):
E/flatter(28706):#12 userServices.saveToSQFLiteDB
(套餐:health_calorie_db/dbServicesManager/userServices.dart:72:13)
E/颤振(28706):#13 userServices.logInCheck
(套餐:health_calorie_db/dbServicesManager/userServices.dart:99:10)
E/颤振(28706):
E/颤振(28706):#14 loginState.checkValidationForms
(套餐:健康卡db/ui课程/登录页面/登录页面。dart:25:22)
E/颤振(28706):#15登录状态。构建。。
(套餐:健康卡db/ui课程/登录页面/登录页面。dart:112:60)
E/颤振(28706):#16"createButton.build。
(套餐:健康、卡路里、db/ui课程、登录页面、登录页面。dart:165:9)
E/颤振(28706):#17#
(包装:颤振/src/材料/墨水井。省道:706:14)
E/颤振(28706):#18#InkResponseState.build。
(包装:颤振/src/材料/墨水井。省道:789:36)
E/颤振(28706):#19手势识别器。调用回调
(软件包:颤振/src/手势/识别器。dart:182:24)
E/颤振(28706):#20 TapGestureRecognitor.HandletUp
(包装:颤振/src/signatures/tap.dart:486:11)
E/颤振(28706):#21 BaseTapgestureRecognitor.#检查
(套装:颤振/src/signatures/tap.dart:264:5)
E/颤振(28706):#22 BaseTapgestureRecognitor.Accept手势
(包装:颤振/src/signatures/tap.省道:236:7)
E/flatter(28706):#23 GestureArenaManager.sweep(包:flatter/src/signatures/arena.dart:156:27)
E/颤振(28706):#24手势绑定。手部通风
(包装:颤振/src/signatures/binding.dart:222:20)
E/颤振(28706):#25 GestureBinding.dispatchEvent
(包装:颤振/src/signatures/binding.dart:198:22)
E/颤振(28706):26手势绑定
(包装:颤振/src/signatures/binding.省道:156:7)
E/颤振(28706):#27个手势绑定。(冲洗点已关闭)
(包装:颤振/src/signatures/binding.dart:102:7)
E/颤振(28706):#28手势绑定。"手持指针数据包
(包装:颤振/src/signatures/binding.dart:86:7)
E/颤振(28706):#29 RootRun一元(dart:async/zone.dart:1138:13)
E/flatter(28706):#30 _CustomZone.runUnary(dart:async/zone.dart:1031:19)
E/颤振(28706):#31 _CustomZone.runUnaryGuarded(dart:async/zone.dart:933:7)
E/颤振(28706):#32_调用1(省道:ui/钩子。省道:273:10)
E/flatter(28706):#33 dispatchPointerDataPacket(dart:ui/hooks.dart:182:5)
这是代码
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);
}
FlatButton(
子项:文本('Yes'),
onPressed:()异步{
设置状态(){
dbHelper.deleteDB();
var持续时间=新的持续时间(秒:8);
返回新计时器(持续时间,(){
exitApp();
});
});
},
Future deleteDB()异步{
试一试{
删除数据库(路径);
}捕获(e){
打印(如toString());
}
打印(‘删除数据库’);
}
exitApp()异步{
Navigator.of(context).pushandremoveintil(newmaterialpageroute(builder:(context)=>login()),
(路由)=>false);
}
未来登录检查(字符串名称、字符串电子邮件、BuildContext BuildContext)异步
{
用户模型用户;
最终QuerySnapshot结果=等待userCollection.where('user_email',isEqualTo:email)
.where('user_name',isEqualTo:name).limit(1).getDocuments();//搜索特定用户
如果(result.documents.length>0){
最终列表ds=结果文件;
对于(int i=0;i<1;i++)
{
user=newusermodel(ds[i].documentID,ds[i]['user\u name',ds[i]['user\u email'],
ds[i][“用户性别”],
ds[i][‘用户体重’]、ds[i][‘用户身高’]、ds[i][‘城市点’]、ds[i][‘检查登录’];
打印(user.user_电子邮件+':'+user.user_id);
saveToSQFLiteDB(用户);
打印(“添加”);
}
导航(构建上下文、电子邮件);
}//如果
否则{
字符串msg='找不到有电子邮件的用户\n请填写正确的信息';
nav.showSnackBar(buildContext,msg);
}
}
void saveToSQFLiteDB(userModel用户){
userInApp u=new userInApp(user.user\u id,user.user\u name,user.us
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;
Future<void> deleteDB() async {
try{
print('deleting db');
db=null;
deleteDatabase(path);
}catch( e){
print(e.toString());
}
print('db is deleted');
}