flutter_acrylic icon indicating copy to clipboard operation
flutter_acrylic copied to clipboard

can not get windows dark -> light switch, but macOS is OK

Open lucasjinreal opened this issue 3 years ago • 7 comments

Hi, I have a same logic like this:

if (brightness == InterfaceBrightness.dark) {
                            brightness = InterfaceBrightness.light;
                          } else if (brightness == InterfaceBrightness.light) {
                            brightness = InterfaceBrightness.dark;
                          } else {
                            brightness = InterfaceBrightness.dark;
                          }
                          bool v = brightness == InterfaceBrightness.dark;
                          // aboutBloc.setForceDark(v);
                          if (v) {
                            Get.changeTheme(themeDataDark);
                          } else {
                            Get.changeTheme(themeData);
                          }
                          print('[brightness] crt brightness: ${brightness}');
                          this.setWindowEffect(WindowEffect.acrylic,
                              brightness == InterfaceBrightness.dark);

...

void setWindowEffect(WindowEffect value, bool dark) {
    Window.setEffect(
      effect: value,
      color: this.color,
      dark: dark,
    );
    if (Platform.isMacOS) {
      if (brightness != InterfaceBrightness.auto) {
        Window.overrideMacOSBrightness(
            dark: brightness == InterfaceBrightness.dark);
      }
    }
    this.setState(() => this.effect = value);
  }



the printed out brightness is dark and light when switch.

But the setWindowEffect can not make window to bright. While same code on macOS is ok.

what'sthe problem here?

lucasjinreal avatar Oct 06 '22 13:10 lucasjinreal

Hi @jinfagang,

The dark argument in Window.setEffect controls the "darkness" of the acrylic effect on Windows. This is only applicable for Windows 11!

alexmercerind avatar Oct 07 '22 08:10 alexmercerind

For Windows 10 or lower, changing the value of passed color can tint your acrylic darker/lighter. This API is made public/documented by Microsoft after Windows 11 release. Windows 10 still uses an old "hack".

alexmercerind avatar Oct 07 '22 08:10 alexmercerind

@alexmercerind My windows verison exactly windows 11.

lucasjinreal avatar Oct 07 '22 11:10 lucasjinreal

Does the example app not work? What's your Windows 11 build number?

alexmercerind avatar Oct 08 '22 06:10 alexmercerind

@alexmercerind The code above should be identical to example (copied from there). Am on latest windows 11

lucasjinreal avatar Oct 08 '22 06:10 lucasjinreal

Please try this: https://github.com/alexmercerind/flutter_acrylic/releases/download/v1.0.0/flutter_acrylic_example_windows_x64.7z

Switching dark & light.

alexmercerind avatar Oct 08 '22 06:10 alexmercerind

@alexmercerind thank u, let me have a try.

lucasjinreal avatar Oct 08 '22 11:10 lucasjinreal