Flutter:有没有一种方法可以防止屏幕关闭?

3
我想开发一个“床头闹钟”应用程序,只要应用程序处于活动状态,就希望手机长时间显示时钟而不会关闭屏幕。
在Flutter中有没有办法实现这一点?
我找到了this个SO答案,但使用“screen”插件对我没有用。在将依赖项添加到“pubspecc.yaml”并运行flutter packages get后,我的应用程序无法运行,Android SDK卡在“正在解决依赖关系”的阶段。
不管怎样,在Flutter中除了“screen”插件之外,还有其他方法实现这个目标吗?

顺便说一下,屏幕插件解决方案对我起作用了。我认为你应该调查一下依赖关系的问题,因为这种情况只会再次发生,而且了解发生了什么以及如何解决问题对你有好处。 - Ian
1
@Ian 谢谢!事实证明,我只是把 'Screen.keepOn(true);' 选项放错了地方。我试图将其放在根小部件的 build 方法中。这就是为什么应用程序无法运行的原因。在你告诉我它对你起作用后,我尝试将其放在主函数中,现在它可以工作了!谢谢! - Curtwagner1984
也许有点晚了 =) 这是另一种做法 https://dev59.com/6lUL5IYBdhLWcg3w27Nq#56918918 - Volodymyr Bilovus
1个回答

2

在同一个Stack Overflow帖子中提到,screen插件遇到了一些问题。我已经检查了该插件,似乎自2019年3月13日以来没有更新过。另一个可以提供所需功能的插件是wakelock插件。目前作者仍在维护。实际上,最新版本0.5.0+2于2021年3月7日发布。

嗨,我仍在维护它 :) 我们最近增加了macOS支持。此外,Flutter是开源的 - 他们有官方插件,但是他们自己说,如果存在更好的第三方项目,他们将放弃自己的官方解决方案。那么为什么他们要为已经完美运行的东西创建一个呢?- creativecreatorormaybenot 2月8日16:17

我已经测试了wakelock package中给出的示例:

import 'package:flutter/material.dart';
import 'package:wakelock/wakelock.dart';

void main() {
  runApp(WakelockExampleApp());
}

class WakelockExampleApp extends StatefulWidget {
  @override
  _WakelockExampleAppState createState() => _WakelockExampleAppState();
}

class _WakelockExampleAppState extends State<WakelockExampleApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Wakelock example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              const Spacer(
                flex: 3,
              ),
              OutlinedButton(
                onPressed: () {
                  setState(() {
                    Wakelock.enable();
                  });
                },
                child: const Text('enable wakelock'),
              ),
              const Spacer(),
              OutlinedButton(
                onPressed: () {
                  setState(() {
                    Wakelock.disable();
                  });
                },
                child: const Text('disable wakelock'),
              ),
              const Spacer(
                flex: 2,
              ),
              FutureBuilder(
                future: Wakelock.enabled,
                builder: (context, AsyncSnapshot<bool> snapshot) {
                  final data = snapshot.data;
                  if (data == null) {
                    return Container();
                  }

                  return Text('The wakelock is currently '
                      '${data ? 'enabled' : 'disabled'}.');
                },
              ),
              const Spacer(
                flex: 3,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Here is the output in Android:

enter image description here

在iOS中的输出:

enter image description here

此外,看起来您已经解决了代码中的上一个问题。很好的是,为了让社区更好地理解这个问题,分享一个最小化、完整和可验证的示例会很不错。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接