Flutter:从应用程序注销后如何清除Firebase缓存?

时间:2019-01-25 07:39:44

标签: firebase dart flutter

我正在尝试在用户从应用程序注销后清除Firebase缓存。我已经尝试过了,但是代码似乎清除了我所有的文件,因为注销前我有背景图片,注销后所有这些图片都消失了。

private DataBuffer<Employee> processedSyslogDataBuffer = new DataBuffer<>(Employee.class, 1000);
 processedSyslogDataBuffer.put(processedMessage);
if(processedSyslogDataBuffer.remainingCapacity() == 0) {
    List<Employee> data = processedSyslogDataBuffer.getAll();
    logger.info("Writing processed data with size :: "+data.size());
    writerService.writeProcessed(data);
   logger.info("resetting the buffer to accomodate next batch of records");
    processedSyslogDataBuffer.reset();
}

这不是我想要的效果。我只想清除Firebase缓存并保留其余应用程序文件。我将如何实现这一目标?

这是注销代码段

void clearCache() async{
var appDir = (await getTemporaryDirectory()).path;
new Directory(appDir).delete(recursive: true); }

}

new FlatButton(
          child: new Text("Yes",style: new TextStyle(fontFamily: 'DroidSansChinese', color: Colors.white),),
          onPressed: () {_signOut(); clearPreferences();clearCache();},
        ),

void _signOut() async {
await _auth.signOut();
Navigator.of(context)
    .pushAndRemoveUntil(MaterialPageRoute(builder: (context) => LoginPage()), (Route<dynamic> route) => false);

}

void clearPreferences() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('name', '');
await prefs.setString('surname', '');
await prefs.setString('email', '');
await prefs.setString('id', '');
print(prefs.getString('name'));

}

1 个答案:

答案 0 :(得分:0)

<块引用>

但代码清除了我所有的文件

检查您提供的代码段,应用程序创建的文件已使用 Directory(appDir).delete(recursive: true); 删除。您在这里所做的是清除您存储的 SharedPreferences,不一定清除 Firebase 创建的缓存。

来自 FirebaseAuth 的

Signing out 应该清除用户实例。无需将用户详细信息存储在 SharedPreferences 中,当用户使用 FirebaseAuth.instance.currentUser 登录时,可以轻松获取用户详细信息。这将返回包含用户详细信息的 User class

var user = FirebaseAuth.instance.currentUser;
String? name = user.displayName;
String? email = user.email;
String? id = user.uid;