0

我想在我的颤振计算器应用程序中使用暗模式。我使用动态主题插件从暗模式切换到亮模式。

以前,我使用 _darkmode 变量,通过它我为深色和浅色模式自定义按钮的颜色。但是每当我关闭我的应用程序时,它的颜色就会出现切换或不同颜色的不匹配组合。因此,我想使用共享偏好来解决这个问题。因此,如果 SP 中不存在 _darkMode 变量,则最初使用 False 定义它。并根据 SharedPreference 获取数据我想设置按钮的颜色。此外,我使用了一个开关来设置和更改共享首选项。

所以这是我的代码:
我最初定义 _darkmode 的初始状态。

class _SimpleCalculatorState extends State<SimpleCalculator> {
Future<SharedPreferences> _prefs = SharedPreferences.getInstance(); // shared preferences
Future<bool> _darkmode;      // this variable to store in SP and for darkmode.

@override
void initState() {
    // ! init
    super.initState();
    _darkmode = _prefs.then((SharedPreferences prefs) {
    return (prefs.getBool('darkMode') ?? false);
    });
}

要在共享首选项上设置暗模式变量的值:

// to set the values on SP
void setBoolToSP(bool boolValue) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setBool('darkMode', boolValue);
}

要从共享偏好中获取暗模式变量的值:

// to get values from sp
getBoolValuesSP() async {
    try {
        SharedPreferences prefs = await SharedPreferences.getInstance();
        print("inside getboolvaluesf");
        return prefs.getBool('darkMode');
    } catch (e) {
        print("getbool" + e);
    }
}

所以,现在我想在这里调用这个getBoolValuesSP()以便我可以根据 _darkMode 变量的值动态更改按钮的颜色:

child: FlatButton(
    // ! here
    color: getBoolValuesSP()   // here
        ? (buttonColor != Colors.white ? buttonColor : Colors.black54)
        : buttonColor,
  }

但是我收到一个错误,例如“无法将'bool'类型的值分配给'Future'类型的变量”

我正在使用一个开关来切换黑暗和光明模式。

Switch(
   activeColor: Colors.orange,
   inactiveThumbColor: Colors.black,
   value: _darkMode, // !
   onChanged: (value) {
       setState(() {
       DynamicTheme.of(context).setBrightness(
       Theme.of(context).brightness == Brightness.dark ? Brightness.light : Brightness.dark);
                    
       darkMode = !darkMode;
       setBoolToSF(darkMode);
       print("check    " + darkMode.toString());
   });
})

谁能告诉我如何调用颜色中的getBoolValuesSP以及如何使用共享首选项动态更改按钮的颜色?

4

0 回答 0