【发布时间】:2021-05-31 06:04:53
【问题描述】:
在我的一页上,我希望我的用户从一个变量 (codeDialog) 上的默认文本开始,然后我希望他们更改该文本,之后他们编写的文本将成为我的新默认文本。遗憾的是我无法让它工作。
现在,当我重新启动应用程序并打开该屏幕时,它会重置为 null。我认为这是因为初始化变量(它为空),但我找不到解决这个问题的方法。任何想法?
谢谢。
所有这些都在 statefulwidget 的状态类中:
void initState() {
super.initState();
print(codeDialog);
isFirstTime().then((isFirstTime) {
isFirstTime ? defaultText() : readFromShared();
});
setText();
print(codeDialog);
_textEditingController = new TextEditingController(text: codeDialog);
}
Future<bool> isFirstTime() async {
final prefs = await SharedPreferences.getInstance();
var isFirstTime = prefs.getBool('first_time');
if (isFirstTime != null && !isFirstTime) {
prefs.setBool('first_time', false);
return false;
} else {
prefs.setBool('first_time', false);
return true;
}
}
static String codeDialog;
void defaultText(){
print("first time");
codeDialog="This is what i want my default variable to be when my app first opened.";
}
void readFromShared() async{
print("not first");
final prefs = await SharedPreferences.getInstance();
codeDialog = prefs.getString('sharedmessage');
}
void setText() async {
final prefs = await SharedPreferences.getInstance();
prefs.setString('sharedmessage', codeDialog);
}
然后我有 AlertDialog ,它可以工作并保存数据。
AlertDialog(
scrollable: true,
contentPadding: EdgeInsets.fromLTRB(20, 20, 20, 0),
content: Column(
children: [
Container(
height: maxLines * 10.0,
child: TextField(
controller: new TextEditingController(text: codeDialog),//_textEditingController,
maxLines: maxLines,
onChanged: (value){
setState(() {
valueText=value;
});
},
decoration: InputDecoration(
hintText: "Text here",
),
),
),
],
),
actions: [
TextButton(
onPressed: Navigator.of(context).pop, child: Text("Cancel")),
TextButton(
onPressed: () {
setState(() {
Navigator.pop(context);
codeDialog = valueText;
print(codeDialog);
setText();
});
},
child: Text("Save"))
],
)
编辑:同样值得注意的是可能会看到这个问题的人。如果您不更改 TextField 的值并提交它(由于某种原因重新启动应用程序后)该值将更改为 null(我认为由于字符串没有更改)。您可以通过添加if(value==null) 来修复它,如果它不为空则保存它。
【问题讨论】:
-
您可以使用共享偏好来存储值并在应用重启后使用。检查这个例子:suragch.medium.com/…
-
我确实使用共享偏好。
标签: android flutter dart asynchronous sharedpreferences