【发布时间】:2021-07-16 09:49:37
【问题描述】:
我只需要当用户打开屏幕时通知图标按钮在他点击时发生变化,它的价值来自共享偏好。问题是图标永远不会改变! initState 代码:
@override
void initState() {
super.initState();
_isActiveNotification = _notificationGetState();
}
_notificationGetState 函数是:
//getting notification on/off
Future<bool> _notificationGetState() async {
final SharedPreferences _prefs = await SharedPreferences.getInstance();
return _prefs.getBool('notification') ?? true;
}
_isActiveNotification 变量是:
late Future<bool> _isActiveNotification;
通知图标按钮的类为:
class _NoificationActivationButton extends StatefulWidget {
_NoificationActivationButton();
@override
_NoificationActivationButtonState createState() =>
_NoificationActivationButtonState();
}
class _NoificationActivationButtonState
extends State<_NoificationActivationButton> {
@override
Widget build(BuildContext context) {
return FutureBuilder<bool>(
//function haveing the return value
future: _isActiveNotification,
builder: (context, snapshot) {
bool data = snapshot.data!;
return IconButton(
icon: Icon(
data
? Icons.notifications_active_outlined
: Icons.notifications_off_outlined,
color: Colors.white,
size: 40,
),
onPressed: () {
setState(() {
data = !data;
});
},
);
});
}
【问题讨论】:
-
将
data设为_NoificationActivationButtonState类的全局变量,并将其赋值给return data = _prefs.getBool('notification') ?? true;。不要忘记删除bool data = snapshot.data!;。 -
同样的问题!
-
你确定?可以更新代码吗?
-
我正在使用 FutureBuilder 来避免您的解决方案,因为 FutureBuilder 采用未来变量根据未来值构建小部件。如果您尝试了代码,您就会明白我在说什么。 @rickimaru
-
其实也一样。如果你想在
FutureBuilder中设置data,看我的回答(_isOtherVersion = true)。
标签: flutter dart flutter-futurebuilder