Flutter -如何隐藏或更改最近使用的应用程序概述中显示的小部件

k2arahey  于 2022-11-17  发布在  Flutter
关注(0)|答案(3)|浏览(177)

我正在开发一个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 6 T上)。E.g. -我仍然可以在最近的应用程序/应用程序切换器概览中看到余额。
有没有一种方法可以做到这一点与Flutter?

4c8rllxm

4c8rllxm1#

您是说不调用此函数吗?如果是,则需要添加以下内容,

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

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

wgmfuz8q2#

你应该使用它的原生平台实现。在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);
}
hwazgwia

hwazgwia3#

将此软件包添加到您的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());

相关问题