【问题标题】:How to call a function from RaisedButton onPressed - Flutter如何从 RaisedButton onPressed 调用函数 - Flutter
【发布时间】:2021-04-10 11:26:07
【问题描述】:

我是 Flutter 的新手,最近几天我有一个非常简单的问题让我很烦恼。我有这个简单的凸起按钮:

          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              TextField(),
              RaisedButton(
                  child: Text("Clicou"),
                  onPressed: () {
                    _changeText();
                  }),
              MyText(myText)
            ],
          )

在那里我调用onPressed_changeText(),这是一个更改屏幕上标签的简单函数,但是检查我在最后使用() 调用我的方法。 好吧,我从 youtube 视频中学习,那里的人说我应该在没有 () 的情况下通过我的方法,但是当我尝试这种方式时,按钮根本不起作用。

所以,我的问题实际上是:我应该如何调用 onPressed 或任何其他事件监听器的方法?

这是我的代码文件:

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

// entry point for the app,
// the => operator is shorthand for {} when there is only one line of code
void main() => runApp(Root());

class Root extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MyApp();
  }
}

// the root widget of our application
class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MyAppState();
  }
}

class MyAppState extends State<MyApp> {
  String myText = "";

  void _changeText() {
    print("TESETSSS");

    setState(() {
      myText = "batman";
    });

  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: Text("Building layouts"),
          ),
          body: Container(
              padding: const EdgeInsets.all(15.0),
              margin: EdgeInsets.all(15.0),
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  TextField(),
                  RaisedButton(
                      child: Text("Clicou"),
                      onPressed: () {
                        _changeText();
                      }),
                  MyText(myText)
                ],
              ))),
    );
  }
}


class MyText extends StatelessWidget {

  final String myText;

  MyText(this.myText);

  @override
  Widget build(BuildContext context) {
    return Text(myText);
  }

}

【问题讨论】:

  • 正如我对您的问题的理解,您只想将一个函数引用到onPressed。如果是这样,onPressed: _changeText 将解决您的问题。
  • 这就是问题所在,当我引用该函数时,按钮停止工作,但是如果我调用该函数,它又开始工作了。
  • 奇怪...我尝试了您的代码并使用了函数引用方法,它工作正常。
  • @rickimaru 我知道我做错了什么,我要回答我自己的问题。

标签: flutter mobile event-handling flutter-onpressed


【解决方案1】:

过了一段时间,我弄清楚出了什么问题。 在这段代码中,我创建了一个匿名函数,他们在其中调用了我的更改文本函数,所以引用什么也不做。

                  RaisedButton(
                      child: Text("Clicou"),
                      onPressed: () {
                        _changeText();
                      }),

正确的做法是:

                  RaisedButton(
                      child: Text("Clicou"),
                      onPressed: _changeText
                      ),

在第二种情况下,我正在向“onPressed”分配对 _changeText 的引用; 就是这样,就像一个魅力。

【讨论】:

    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2023-01-04
    • 2019-08-21
    相关资源
    最近更新 更多