【发布时间】:2022-01-18 17:09:40
【问题描述】:
我正在使用 getx 和 get_storage 制作一个待办事项应用程序,并且在标题文本字段的 todoEditing 屏幕中,每当我添加一个新字符时,之前的值都会重复,然后出现新字符。然而,这只发生在标题文本字段中,而不是在注释文本字段中。我无法在代码中找到问题的根源,我们将不胜感激。
class TodoScreen extends StatelessWidget {
final int? index;
final TodoController todoController = Get.find();
TodoScreen({this.index});
@override
Widget build(BuildContext context) {
String title = '';
String detail = '';
if (this.index != null) {
title = todoController.todos[index!].title;
detail = todoController.todos[index!].details;
}
Color add = Color(0xFFA8A8A8);
TextEditingController titleEditingController =
TextEditingController(text: title);
TextEditingController detailEditingController =
TextEditingController(text: detail);
return Scaffold(
appBar: AppBar(
title: Text((this.index == null) ? 'New Reminder' : 'Edit Reminder',
style: TextStyle(
fontSize: 22,
color: Theme.of(context).textTheme.headline2!.color)),
leadingWidth: 80.0,
leading: Center(
child: TextButton(
style: const ButtonStyle(
splashFactory: NoSplash.splashFactory,
),
onPressed: () {
Get.back();
},
child: const Text(
"Cancel",
style: TextStyle(fontSize: 20.0, color: Color(0xFF39A7FD)),
),
),
),
centerTitle: true,
actions: [
Center(
child: TextButton(
style: const ButtonStyle(
splashFactory: NoSplash.splashFactory,
),
onPressed: () {
if (this.index == null) {
todoController.todos.add(Todo(
details: detailEditingController.text,
title: titleEditingController.text,
));
} else {
var editing = todoController.todos[index!];
editing.title = titleEditingController.text;
editing.details = detailEditingController.text;
todoController.todos[index!] = editing;
}
;
Get.back();
},
child: Text((this.index == null) ? 'Add' : 'Update',
style:
TextStyle(color: Color(0xFF39A7FD), fontSize: 20.0))),
)
],
),
body: SafeArea(
child: Container(
width: double.infinity,
padding: const EdgeInsets.symmetric(horizontal: 15.0, vertical: 20.0),
child: Container(
decoration: BoxDecoration(
color: Color(0xFF414141),
boxShadow: const [
BoxShadow(
color: Color(0xFF414141),
offset: Offset(2.5, 2.5),
blurRadius: 5.0,
spreadRadius: 1.0,
), //B
],
borderRadius: BorderRadius.circular(14.0)),
padding:
const EdgeInsets.symmetric(horizontal: 24.0, vertical: 15.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
TextField(
controller: titleEditingController,
autofocus: true,
autocorrect: false,
cursorColor: Colors.grey,
maxLines: 1,
textInputAction: TextInputAction.next,
decoration: const InputDecoration(
hintText: "Title", border: InputBorder.none),
style: GoogleFonts.notoSans(
color: Color(0xFFA8A8A8), fontSize: 20.0),
),
const Divider(
color: Color(0xFF707070),
),
TextField(
controller: detailEditingController,
maxLines: null,
autocorrect: false,
cursorColor: Colors.grey,
textInputAction: TextInputAction.done,
decoration: const InputDecoration(
hintText: "Notes", border: InputBorder.none),
style: GoogleFonts.notoSans(
color: Color(0xFFA8A8A8), fontSize: 20.0),
),
],
)),
),
),
);
}
}
【问题讨论】:
-
把你所有的初始化放在 iniState 方法中。 TexField 启动重建方法。
-
你能解释一下如何解决这个问题
标签: flutter flutter-getx