我正在开发一个处理加密货币(钱包)的 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());