结合使用电池和唤醒锁不会产生预期的结果

Combining Battery and Wakelock does not give desired outcome

目前我正在尝试构建一个执行以下操作的应用程序:

1) 接通电源后不允许设备进入休眠状态 2) 断开电源后让设备进入睡眠状态

目前我正在使用电池插件来检测设备是否正在充电。

https://pub.dev/packages/battery

我正在使用的唤醒锁包是。

https://pub.dev/packages/wakelock

代码是:

class _MyHomePageState extends State<MyHomePage> {
  Battery _battery = Battery();
  bool wakeLockEnabled;
  BatteryState _batteryState;
  StreamSubscription<BatteryState> _batteryStateSubscription;
  Color bgColor = Colors.white;

  @override
  void initState() {
    super.initState();
    _batteryStateSubscription =
        _battery.onBatteryStateChanged.listen((BatteryState state) {
      setState(() {
        _batteryState = state;
        _shouldWakelock();
      });
    });
  }

  void _shouldWakelock() async {
    wakeLockEnabled = await Wakelock.isEnabled;
    if (_batteryState == BatteryState.charging) {
      if (!wakeLockEnabled) {
        setState(() {
          Wakelock.enable();
          bgColor = Colors.green;
        });
      }
    } else if (_batteryState == BatteryState.discharging) {
      if (wakeLockEnabled) {
        setState(() {
          Wakelock.disable();
          bgColor = Colors.red;
        });
      }
    } else if (_batteryState == BatteryState.full) {
      setState(() {
        Wakelock.disable();
        bgColor = Colors.yellow;
      });
    }
    wakeLockEnabled = await Wakelock.isEnabled;
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('$_batteryState'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              width: 100,
              height: 100,
              color: bgColor,
            ),
            Text('$wakeLockEnabled'),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
    if (_batteryStateSubscription != null) {
      _batteryStateSubscription.cancel();
    }
  }
}

目前以下测试给出以下结果(这都是使用 iPhone 7)

我创建了一个新项目,其中保留了所有样板,并将其添加到 _incrementCounter() 函数中。 (我也让它异步。在这里,每当我按下一个按钮在启用和禁用唤醒锁之间切换时,它工作得很好,只有当唤醒锁响应电池变化时它才会因为某种原因不起作用。

var isEnabled = await Wakelock.isEnabled;

if (isEnabled) {
  await Wakelock.disable();
} else {
  await Wakelock.enable();
}

我希望有人知道可能导致奇怪行为的原因。

FWIW:我认为这只会在调试时发生。这意味着当为发布构建代码时,问题没有发生。