颤振 - 如何隐藏或更改小部件,如最近的应用程序概述所示



我正在开发一个处理加密货币(钱包)的 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上)。 例如 - 我仍然可以在最近的应用程序/应用程序切换器概述中看到余额。

有没有办法用颤振做到这一点?

你是说没有调用这个函数吗?如果是,则需要添加以下内容,

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

你应该使用它的原生平台实现。在Android中有一种叫做窗口管理器的东西,你必须设置它。

将其粘贴到主活动文件中,您应该会看到它正在工作。

@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);
}

将此软件包添加到您的 pubspec.yaml privacy_screen

然后只需将此代码添加到您的 main 中:

  WidgetsFlutterBinding.ensureInitialized();
  await PrivacyScreen.instance.enable(
    iosOptions: const PrivacyIosOptions(
      enablePrivacy: true,
      privacyImageName: "LaunchImage",
      lockTrigger: IosLockTrigger.didEnterBackground,
    ),
    androidOptions: const PrivacyAndroidOptions(
      enableSecure: true,
    ),
    backgroundColor: Colors.white.withOpacity(0.0),
    blurEffect: PrivacyBlurEffect.light,
  );
  runApp(MyApp());

相关内容

最新更新