【问题标题】:Update text widget onTap更新文本小部件 onTap
【发布时间】:2021-01-14 03:11:37
【问题描述】:

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

【问题讨论】:

  • 把它放在initState 中。 String cardDetails = widget.question;

标签: flutter dart setstate


【解决方案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) {
 ...

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 2019-09-14
      • 2014-04-16
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      相关资源
      最近更新 更多