flutter 抖动:如何使应用程序的屏幕之一能够显示,即使手机被锁定

fnvucqvd  于 2023-03-19  发布在  Flutter
关注(0)|答案(1)|浏览(138)

具有两个屏幕/有状态小部件的应用程序,第二个屏幕即使在手机锁定时也能显示,而不是整个应用程序,例如,警报应用程序,其中警报提醒屏幕即使在手机锁定时也能显示,用户将能够在手机锁定时在该屏幕上执行操作,或任何带有callScreen的信使或呼叫应用程序,用户将看到屏幕且能够在不解锁电话情况下执行接受/拒绝。

void main() {
          runApp(const MyApp());
        }
        
        class MyApp extends StatelessWidget {
          const MyApp({super.key});
        
          @override
          Widget build(BuildContext context) {
            return MaterialApp(
              title: 'MAIN SCREEN HOME',
              theme: ThemeData(
                primarySwatch: Colors.blue,
              ),
              home: const MyHomePage(title: 'FIRST SCREEN'),
            );
          }
        }
        
        class MyHomePage extends StatefulWidget {
          const MyHomePage({super.key, required this.title});
        
          final String title;
        
          @override
          State<MyHomePage> createState() => _MyHomePageState();
        }
        
        class _MyHomePageState extends State<MyHomePage> {
        
          @override
          Widget build(BuildContext context) {
            return Scaffold(
              appBar: AppBar(
                title: Text(widget.title),
              ),
              body: Center(
                child:  TextButton(child: const Text('GO TO SECOND SCREEN SCREEN'),onPressed: (){
                  Navigator.push(context, MaterialPageRoute(builder:(context) => const SecondScreen()));
                }, ),
        
              ),
            );
          }
        }
        
        
        
        
        
        
        class SecondScreen extends StatefulWidget {
          const SecondScreen({Key? key}) : super(key: key);
        
          @override
          State<SecondScreen> createState() => _SecondScreenState();
        }
        
        class _SecondScreenState extends State<SecondScreen> {
          @override
            Widget build(BuildContext context) {
              return Scaffold(
                appBar: AppBar(
                  title: Text('SECOND SCREEN'),
                ),
                body: const Center(
                  child:  Text('THIS IS SECOND SCREEN THAT SHOULD BE ACCESSIBLE EVEN WHEN PHONE IS LOCKED'),
                ),
              );
            }
        }

MyHomePage是登录页面,当用户在此屏幕上时,手机被锁定,然后如果我们尝试解锁它,它需要解锁手机,这是正常的
但如果我们通过手动点击第一个屏幕上的按钮导航到SecondScreen,或者在后台使用任何自动触发器,即使手机被锁定,第二个屏幕也应该是可见的,类似于呼叫屏幕在正常呼叫应用程序或WhatsApp或任何其他具有呼叫功能的应用程序上的工作方式,只有呼叫屏幕是可见的,
我尝试将这些属性放在单个活动的androidManifest文件中,
android:showWhenLocked="true" android:turnScreenOn="true"
但整个应用程序正在变得可访问,所需行为是在锁定屏幕上只能访问SecondScreen,其余应需要解锁手机
我还尝试在AndroidManifest.xml文件下创建另一个元素,但不确定它是否在Flutter中正确,因为我读取了它的单个活动流,
如果你们中的任何人尝试过这个,或类似的,请分享你的想法。

vu8f3i0k

vu8f3i0k1#

我确认Flutter使用单个Activity来管理您的应用,因此,使用android:showWhenLocked="true",您的整个应用将打开并可访问。
您可以尝试使用此软件包来确定您的屏幕是否被锁定以拒绝访问其他部分:https://pub.dev/packages/is_lock_screen

相关问题