更新文本小部件 onTap

时间:2021-01-14 03:11:37

标签: flutter dart setstate

我有一个文本小部件,我想在其中将文本更改为 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;
              }
            });
          },
        ))),
    );
  }
}

2 个答案:

答案 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;
              }
            });
          },
        ))),
    );
  }
}