我有一个文本小部件,我想在其中将文本更改为 ontap 问答变量,但没有任何帮助。 问题和答案字符串是从上一页传递的。 在此页面上,它首先显示问题,当用户点击该文本小部件时,问题必须更改为回答文本。 但它不更新不知道为什么。我是初学者,请帮忙
import 'package:flutter/material.dart';
class ShowCard extends StatefulWidget {
final String question;
final String answer;
ShowCard({@required this.question, @required this.answer}); //accepting question and answer
@override
_ShowCardState createState() => _ShowCardState();
}
class _ShowCardState extends State<ShowCard> {
@override
Widget build(BuildContext context) {
String cardDetails = widget.question; //initializing question text
return Scaffold(
body: Center(
child: Container(
child: GestureDetector(
child: Text(cardDetails),
onTap: () {
setState(() {
if (cardDetails == widget.question) {
cardDetails = widget.answer;
} else {
cardDetails = widget.question;
}
});
},
))),
);
}
}
答案 0 :(得分:1)
点击后,cardDetails 在build
中再次被赋予相同的值,
String cardDetails = widget.question;
改成这样
class _ShowCardState extends State<ShowCard> {
String cardDetails;
@override
void initState() {
cardDetails = widget.question;
super.initState();
}
@override
Widget build(BuildContext context) {
...
答案 1 :(得分:0)
在 build 函数之外声明 cardDetails 初始化,否则,它会为每个 build 重置。您可以复制以下代码:
import 'package:flutter/material.dart';
class ShowCard extends StatefulWidget {
final String question;
final String answer;
ShowCard({@required this.question, @required this.answer}); //accepting question and answer
@override
_ShowCardState createState() => _ShowCardState();
}
class _ShowCardState extends State<ShowCard> {
String cardDetails = widget.question; //initializing question text
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
child: GestureDetector(
child: Text(cardDetails),
onTap: () {
setState(() {
if (cardDetails == widget.question) {
cardDetails = widget.answer;
} else {
cardDetails = widget.question;
}
});
},
))),
);
}
}