首页 > 解决方案 > Flutter 以编程方式进入暗模式保留过渡

问题描述

我已经构建了一个颤振的 Cupertino 应用程序,它可以通过 Provider 状态更改以编程方式进入黑暗模式。

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // setup
    bool _themeDark = Provider.of<Global>(context).themeDark;

return CupertinoApp(
title: 'MyApp',
      theme:
          CupertinoThemeData(brightness: _themeDark ? Brightness.dark : null),
...

CupertinoDynamicColor然后,我为整个应用程序的小部件设置了大量属性。

Container(
  color: CupertinoDynamicColor.withBrightness(
    color: _myColorLight, 
    darkColor: _myColorDark),
  child: ... 

直到现在我才意识到,Brightness 的动画过渡仅在设备亮度变化时执行,而不是在我用_themeDark.

我显然可以解决这个问题,我制作每个使用CupertinoDynamicColorAnimatedContainer或类似的小部件,但在只处理颜色变化时这似乎是一个沉重的反应。

AnimatedContainer(
      duration: Duration(milliseconds: 500),
      color: _themeDark ? _myColorDark : _myColorLight,
      child: ... 

有没有一种简单的方法来实现 iOS 系统从亮到暗的动画过渡,我的状态覆盖会影响所有CupertinoDynamicColor具有正常过渡的属性。

标签: flutteranimationtransitionios-darkmode

解决方案


推荐阅读