在此,我使用了一個同意復選框,并且沒有選擇,當單擊可以選擇復選框時,值為 true,效果很好。但是我想為此添加共享首選項添加時,在選擇的單詞之后并關閉應用程式并再次重新打開,然后應該顯示最后選擇的復選框值 true。像這樣

我的代碼
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class AgreeScreen extends StatefulWidget {
const AgreeScreen({Key? key}) : super(key: key);
@override
State<AgreeScreen> createState() => _AgreeScreenState();
}
class _AgreeScreenState extends State<AgreeScreen> {
// 1st dropdown button
@override
void initState() {
super.initState();
valueAgree;
checkValueAgree();
}
// // are you agree button
String? valueAgree;
// //boolean value (are you agree)
bool isChecked = false;
checkValueAgree() {
_getDataAgree();
}
_saveDataAgree(bool isChecked) async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
sharedPreferences.setBool("Agree", isChecked);
}
_getDataAgree() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
var result = sharedPreferences.getBool("Agree");
if (result != null) {
isChecked;
setState(() {});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: [
Padding(
padding: const EdgeInsets.only(top: 100, left: 15.0),
child: Row(
children: <Widget>[
const Icon(
Icons.brightness_1,
color: Colors.black,
size: 10,
),
const Padding(
padding: EdgeInsets.only(left: 15.0),
child: Text(
"Are you agree",
style:
TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
),
),
const Padding(
padding: EdgeInsets.only(left: 30),
child: Text(
'yes',
style:
TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
),
),
Checkbox(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
),
side: MaterialStateBorderSide.resolveWith(
(states) =>
BorderSide(width: 3.0, color: Colors.blueAccent),
),
value: isChecked,
onChanged: (bool? value) {
setState(() {
isChecked = value!;
});
},
),
],
),
),
Padding(
padding: const EdgeInsets.only(bottom: 0.0, top: 150),
child: SizedBox(
width: 160.0,
height: 35.0,
child: ElevatedButton(
style: ButtonStyle(
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
side: const BorderSide(
color: Colors.blueAccent,
),
),
),
),
onPressed: () {
//do null check 1st
_saveDataAgree(isChecked);
},
child: const Text('next')),
),
),
],
),
),
);
}
}
uj5u.com熱心網友回復:
在這里,您需要將SharedPreferences值傳遞給isChecked,因為您Checkbox使用isChecked,您不需要 String? valueAgree將其洗掉:
_getDataAgree() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
var result = sharedPreferences.getBool("Agree");
if (result != null){
isChecked = result;
setState(() {});
}
}
并將您的更改_saveDataAgree為:
_saveDataAgree(bool isChecked) async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
sharedPreferences.setBool("Agree", isChecked);
}
uj5u.com熱心網友回復:
如果您將問題保存為鍵并將選定的專案保存為值,那就很好了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520955.html
標籤:扑镖共享偏好
下一篇:獲取此RangeError(索引):無效值:有效值范圍為空:1嘗試將json資料填充到ListView.builder
