Flutter-如何隐藏或更改窗口小部件,如“最近使用的应用程序”概述中所示

时间:2019-01-29 16:17:34

标签: security flutter

我正在开发一种处理加密货币(钱包)的Flutter应用程序。有人要求该应用采取一些措施来隐藏自己的余额,等等。

但是,我不知道的一件事是从最近的应用程序菜单中隐藏信息(例如Android上的安全窗口模式,或者只是更改界面以使平衡不可见。)

我在主窗口小部件中添加了WidgetsBindingObserver,并尝试了以下操作:

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
  switch (state) {
    case AppLifecycleState.paused:
      setState(() {
          _hideBalance = true;
      });
      super.didChangeAppLifecycleState(state);
      break;
    case AppLifecycleState.resumed:
      setState(() {
          _hideBalance = false;
      });
      super.didChangeAppLifecycleState(state);
      break;
    default:
      super.didChangeAppLifecycleState(state);
      break;
  }
}

@override
void initState() {
   super.initState();
   WidgetsBinding.instance.addObserver(this);
}

@override
void dispose() {
   WidgetsBinding.instance.removeObserver(this);
   super.dispose();
}

@override
Widget build(BuildContext context) {
    return _hideBalance ? SizedBox() : Text("$12,234");
}

但是,这对最近的应用程序没有任何影响,这似乎是按下主屏幕按钮后的确切快照(至少在我的OnePlus 6T上)。例如。 -我仍然可以在最近的应用程序/应用程序切换器概述中看到余额。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

您是不是在说这个函数?如果是,则需要添加以下内容,

@override
void initState() {
   super.initState();
   WidgetsBinding.instance.addObserver(this);
}

@override
void dispose() {
   WidgetsBinding.instance.removeObserver(this);
   super.dispose();
}

答案 1 :(得分:0)

您应该使用本机平台实现。 android中有一个称为窗口管理器的东西,您必须对其进行设置。

将此内容粘贴到MainActivity文件中,您应该会看到它起作用。

@Override
protected void onPause() {
    super.onPause();
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, 
     WindowManager.LayoutParams.FLAG_SECURE);

 }

@Override
protected void onResume() {
    super.onResume();
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
}