当前位置: 首页 > 知识库问答 >
问题:

Flutter上有状态小部件中未显示文本

殷宾白
2023-03-14

我正在尝试创建一个非常简单的应用程序,当点击中心小部件时,列表中的元素会显示出来。

这是我的代码:

import 'package:flutter/material.dart';
import 'dart:math';

void main() => runApp(
      MaterialApp(home: MyApp()),
    );

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          title: Text('Welcome to Flutter'),
        ),
        body: Center(),
      ),
    );
  }
}

class picker extends StatefulWidget {
  @override
  _pickerState createState() => _pickerState();
}

class _pickerState extends State<picker> {
  List yourList = ["Yes", "No", "Maybe"];
  int randomIndex;

  _pickerState() {
    int randomIndex = Random().nextInt(yourList.length);
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: TextButton(
        onPressed: () {
          setState(() {
            print(yourList[randomIndex]);
          });
        },
        child: Text('$randomIndex'),
      ),
    );
  }
}

没有显示任何错误,但同时,我的目标没有达到,因为没有显示任何文本,即使我添加了这个代码打印(yourList[randomIndex]),也不会在终端中打印任何内容;。我如何显示文本,并使打印出现?

共有3个答案

闻人鸿文
2023-03-14

尝试使用<code>这个。randomIndex=Random().nextInt(yourList.length)

否则,您将在初始化类时声明一个不同的局部变量。

下次尝试通过在初始化之外设置默认值来调试此错误,以检查是否存在类似问题,例如您的初始化没有进入您的状态。

我还建议您将类名更改为CamelCase,以避免混淆,这样人们就可以看到初始化类时的代码。这是一篇关于样式代码的dart文章。

谷梁涵忍
2023-03-14

两个错误:

  1. 您没有将值赋给您实际想要在此处使用的变量
  int randomIndex;

  _pickerState() {
    // you declared a local variable here and you were using value of variable you declared on top
    int randomIndex = Random().nextInt(yourList.length);
  }

这是工作代码,您可以简单地复制粘贴它:

class _PickerState extends State<Picker> {
  List yourList = ["Yes", "No", "Maybe"];
  int randomIndex;

  _pickerState() {
    randomIndex = Random().nextInt(yourList.length);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: TextButton(
          onPressed: () {
            _pickerState();
            setState(() {
              print(yourList[randomIndex]);
            });
          },
          child: Text('$randomIndex'),
        ),
      ),
    );
  }
}

快速提示:尝试使用<code>大写

孟文栋
2023-03-14

另一种解决方案是设置

randomIndex = Random().nextInt(yourList.length);

在setState((){)中,如下所示。

import 'package:flutter/material.dart';
import 'dart:math';

void main() => runApp(
      MaterialApp(home: MyApp()),
    );

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          title: Text('Welcome to Flutter'),
        ),
        body: picker(),
      ),
    );
  }
}

class picker extends StatefulWidget {
  @override
  _pickerState createState() => _pickerState();
}

class _pickerState extends State<picker> {
  List yourList = ["Yes", "No", "Maybe"];
  int randomIndex = 0;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: TextButton(
        onPressed: () {
          setState(() {
            randomIndex = Random().nextInt(yourList.length);
          });
        },
        child: Text(yourList[randomIndex]),
      ),
    );
  }
}

要获得起始文本,需要在一个单独的函数中取出setState,如下所示:

class _pickerState extends State<picker> {
 List yourList = ["Yes", "No", "Maybe"];
 String buttonText = "Initial Text";
 int randomIndex = 0;
 
 void _newRandomIndex() {
   setState(() {
     randomIndex = Random().nextInt(yourList.length);
     buttonText = yourList[randomIndex];
   });
 }

 @override
 Widget build(BuildContext context) {
   return Center(
     child: TextButton(
       onPressed: _newRandomIndex,
       child: Text(buttonText),
     ),
   );
 }
}
 类似资料:
  • 我想在左边部分显示个人资料图像,中间部分显示名称和公司(一个在另一个下面),右边部分显示列表图块内的评论和评级。我能够正确显示图像,评论和评级,但文本不显示。我想实现这一点: 图片和评级之间的空白是我想要显示文本的地方(姓名和公司,一个在另一个下面)。不知道我在这里错过了什么。 下面的代码片段: 在我看来,这似乎是一个返回

  • 有状态小部件被定义为在其生命周期内改变其状态的任何小部件。但是,将作为它的一个子元素是非常常见的做法。如果作为其子元素之一,,它不是变成有状态的吗? 我试图将文档作为代码的一部分进行查看,但无法弄清楚如何具有作为其子级,并且仍然保持。 Flutter中有状态和无状态小部件之间的关系和区别是什么?

  • 我想在API调用时在flutter中显示全屏加载视图。但是当我在脚手架体中添加加载小部件时,它出现在appbar和底部导航器之后。 我花了很多时间在全屏显示加载视图。另外,我希望在API调用时防止后退操作。

  • 我试图在用户登录后显示我的json响应。当用户输入正确的信息时,它成功地在我的应用程序中显示响应。但是当用户在这里输入错误的凭证时,应用程序会崩溃,这是当用户输入错误信息时我的json响应。它应该显示状态=0在我的应用程序显示(或任何我想显示的响应 这是当用户按下登录按钮时我的API调用 } 我的模型类 然后在这里,我显示我的响应,当用户输入正确的凭据时,该响应成功执行。但是在输入错误的凭据时崩溃

  • 问题内容: 在Android中,每个子类都有一个方法,可让您修改对象的可见性 设置可见性有3个选项: 可见:在布局内渲染可见 看不见:隐藏,但留下的间隙等于可见时将占据的间隙 消失:隐藏,并将其完全从布局中删除。这是因为如果它和人 Flutter中的小部件是否具有与上述等同的功能? 快速参考:https : //developer.android.com/reference/android/vie

  • 在Android中,每个子类都有一个方法,它允许您修改对象的可见性 设置可见性有3个选项: 可见:在布局中呈现可见 invisible:隐藏,但会留下一个间隙,该间隙相当于在可见时所占的位置 gone:隐藏并将其完全从布局中删除。就好像它的和是 Flutter中的Widgets是否有与上面等价的东西? 有关快速参考:https://developer.android.com/reference/a