Flutter 文本未显示在颤振上的有状态小部件中

Flutter 文本未显示在颤振上的有状态小部件中,flutter,dart,Flutter,Dart,我正在尝试创建一个非常简单的应用程序,当单击中心小部件时,将显示列表中的元素 这是我的代码: import 'package:flutter/material.dart'; import 'dart:math'; void main() => runApp( MaterialApp(home: MyApp()), ); class MyApp extends StatelessWidget { @override Widget build(BuildCont

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

这是我的代码:

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'),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“dart:math”;
void main()=>runApp(
MaterialApp(主页:MyApp()),
);
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“欢迎来到弗利特”,
家:脚手架(
背景颜色:Colors.white,
appBar:appBar(
标题:文本(“欢迎光临颤振”),
),
主体:中心(),
),
);
}
}
类选择器扩展StatefulWidget{
@凌驾
_pickerState createState();
}
类_pickerState扩展状态{
列出你的清单=[“是”、“否”、“可能”];
int随机指数;
_pickerState(){
int randomIndex=Random().nextInt(yourList.length);
}
@凌驾
小部件构建(构建上下文){
返回中心(
孩子:文本按钮(
已按下:(){
设置状态(){
打印(您的列表[随机索引]);
});
},
子项:文本(“$randomIndex”),
),
);
}
}
没有显示任何错误,但同时,由于没有显示任何文本,因此没有达到我的目标,即使我添加了此代码打印(yourList[randomIndex]),终端中也不会打印任何内容;。如何显示文本并显示打印内容


尝试使用
this.randomIndex=Random().nextInt(yourList.length)

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

下次尝试调试此错误时,请在初始化之外设置一个默认值,以检查是否存在类似问题,例如初始化未进入状态


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

尝试使用
this.randomIndex=Random().nextInt(yourList.length)

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

下次尝试调试此错误时,请在初始化之外设置一个默认值,以检查是否存在类似问题,例如初始化未进入状态

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

两个错误:

  • 您没有为实际要在此处使用的
    变量赋值:
  • 没有调用方法
    \u pickerState()
    ,这就是为什么
    TextButton
    中存在
    null
    值的原因
  • 这是工作代码,您只需复制粘贴即可:

    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'),
            ),
          ),
        );
      }
    }
    
    class\u PickerState扩展状态{
    列出你的清单=[“是”、“否”、“可能”];
    int随机指数;
    _pickerState(){
    randomIndex=Random().nextInt(yourList.length);
    }
    @凌驾
    小部件构建(构建上下文){
    返回脚手架(
    正文:中(
    孩子:文本按钮(
    已按下:(){
    _pickerState();
    设置状态(){
    打印(您的列表[随机索引]);
    });
    },
    子项:文本(“$randomIndex”),
    ),
    ),
    );
    }
    }
    
    快速提示:尝试使用
    大写
    命名
    或任何
    自定义小部件
    其更方便的方式

    两个错误:

  • 您没有为实际要在此处使用的
    变量赋值:
  • 没有调用方法
    \u pickerState()
    ,这就是为什么
    TextButton
    中存在
    null
    值的原因
  • 这是工作代码,您只需复制粘贴即可:

    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'),
            ),
          ),
        );
      }
    }
    
    class\u PickerState扩展状态{
    列出你的清单=[“是”、“否”、“可能”];
    int随机指数;
    _pickerState(){
    randomIndex=Random().nextInt(yourList.length);
    }
    @凌驾
    小部件构建(构建上下文){
    返回脚手架(
    正文:中(
    孩子:文本按钮(
    已按下:(){
    _pickerState();
    设置状态(){
    打印(您的列表[随机索引]);
    });
    },
    子项:文本(“$randomIndex”),
    ),
    ),
    );
    }
    }
    

    快速提示:尝试使用
    大写
    来命名
    或任何
    自定义小部件
    其更方便的方法是设置

    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]),
          ),
        );
      }
    }
    
    导入“包装:颤振/材料.省道”;
    导入“dart:math”;
    void main()=>runApp(
    MaterialApp(主页:MyApp()),
    );
    类MyApp扩展了无状态小部件{
    @凌驾
    小部件构建(构建上下文){
    返回材料PP(
    标题:“欢迎来到弗利特”,
    家:脚手架(
    背景颜色:Colors.white,
    appBar:appBar(
    标题:文本(“欢迎光临颤振”),
    ),
    主体:选择器(),
    ),
    );
    }
    }
    类选择器扩展StatefulWidget{
    @凌驾
    _pickerState createState();
    }
    类_pickerState扩展状态{
    列出你的清单=[“是”、“否”、“可能”];
    int随机指数=0;
    @凌驾
    小部件构建(构建上下文){
    返回中心(
    孩子:文本按钮(
    已按下:(){
    设置状态(){
    randomIndex=Random().nextInt(yourList.length);
    });
    },
    child:Text(您的列表[随机索引]),
    ),
    );
    }
    }
    
    要获得起始文本,需要在单独的函数中取出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),
         ),
       );
     }
    }
    
    class\u pickerState扩展状态{
    列出你的清单=[“是”、“否”、“可能”];
    字符串buttonText=“初始文本”;
    int随机指数=0;
    无效的