如何在共享首选项中保存颜色

Lal*_*wat -1 sharedpreferences dart flutter

我试图将颜色保存在共享首选项中,但它只有有限的数据类型(字符串、整数、双精度等),我不知道

Future getColor() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    Color color = prefs.getString("color"); //error 
    return color;
  }

  Future setColor(Color themeColor) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setString("color", (themeColor); //error
  }
Run Code Online (Sandbox Code Playgroud)

}

Sum*_*jan 6

我希望这段代码对您有帮助。它可以写得更漂亮,但我希望你能明白。

//Convert the color to hex, Save it in preferences
var myColor = Colors.blue;
var hex = '#${myColor.value.toRadixString(16)}';
//save Hex value in sharedpreference.
Run Code Online (Sandbox Code Playgroud)
//get the hex value from shared preferences and convert it into color.
Color yourColor= hexToColor(colorStringFromSharedPreference);

Color hexToColor(String code) {
  return Color(int.parse(code.substring(1, 7), radix: 16) + 0xFF000000);
}

Run Code Online (Sandbox Code Playgroud)

另外,正如评论中所建议的,您还可以存储颜色的 int 值。


int myColorInteger = myColor.value
//store integer value in sharedpreference
Run Code Online (Sandbox Code Playgroud)

并检索它并使用 Color 的构造函数

//retrieve intValue of color from sharedpreference and
Color myColor = Color(intValue)
Run Code Online (Sandbox Code Playgroud)