Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 更新文本窗口小部件onTap_Flutter_Dart_Setstate - Fatal编程技术网

Flutter 更新文本窗口小部件onTap

Flutter 更新文本窗口小部件onTap,flutter,dart,setstate,Flutter,Dart,Setstate,我有一个文本小部件,我想将文本更改为问答变量ontap,但它无法帮助任何人。 正在从上一页传递问题和答案字符串。 在此页面上,首先显示问题,当用户点击文本小部件时,问题必须更改为回答文本。 但它没有更新,我不知道为什么。我是初学者,请帮忙 import 'package:flutter/material.dart'; class ShowCard extends StatefulWidget { final String question; final String answer;

我有一个文本小部件,我想将文本更改为问答变量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;
              }
            });
          },
        ))),
    );
  }
}
导入“包装:颤振/材料.省道”;
类ShowCard扩展StatefulWidget{
最后一道弦乐题;
最后的字符串答案;
展示卡({@required this.question,@required this.answer});//接受问答
@凌驾
_ShowCardState createState()=>\u ShowCardState();
}
类_ShowCardState扩展状态{
@凌驾
小部件构建(构建上下文){
String cardDetails=widget.question;//初始化问题文本
返回脚手架(
正文:中(
子:容器(
儿童:手势检测器(
子项:文本(cardDetails),
onTap:(){
设置状态(){
if(cardDetails==widget.question){
cardDetails=widget.answer;
}否则{
cardDetails=widget.question;
}
});
},
))),
);
}
}

点击后,cardDetails会在
构建中再次分配相同的值

String cardDetails = widget.question;    
就这样做吧

class _ShowCardState extends State<ShowCard> {

  String cardDetails;

  @override
  void initState() {
    cardDetails = widget.question;
    super.initState();
  }


 @override
 Widget build(BuildContext context) {
 ...
class\u ShowCardState扩展状态{
字符串详细信息;
@凌驾
void initState(){
cardDetails=widget.question;
super.initState();
}
@凌驾
小部件构建(构建上下文){
...

在生成函数之外声明cardDetails初始化,否则,它会为每个生成重置。您可以复制以下代码:

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;
              }
            });
          },
        ))),
    );
  }
}
导入“包装:颤振/材料.省道”;
类ShowCard扩展StatefulWidget{
最后一道弦乐题;
最后的字符串答案;
展示卡({@required this.question,@required this.answer});//接受问答
@凌驾
_ShowCardState createState()=>\u ShowCardState();
}
类_ShowCardState扩展状态{
String cardDetails=widget.question;//初始化问题文本
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子:容器(
儿童:手势检测器(
子项:文本(cardDetails),
onTap:(){
设置状态(){
if(cardDetails==widget.question){
cardDetails=widget.answer;
}否则{
cardDetails=widget.question;
}
});
},
))),
);
}
}

将其放入
initState
中。
String cardDetails=widget.question;