如何在颤振中执行 VoidCallback

Has*_*sef 4 dart flutter

我正在尝试测试VoidCallback所以我创建了主文件,该文件具有从小部件中的平面按钮调用的函数,该函数位于单独的文件中,但不起作用。

main.dart

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Retrieve Text Input',
      home: MyCustomForm(),
    );
  }
}

// Define a Custom Form Widget
class MyCustomForm extends StatefulWidget {
  @override
  _MyCustomFormState createState() => _MyCustomFormState();
}

class _MyCustomFormState extends State<MyCustomForm> {
  final myController = TextEditingController();

  @override
  void initState() {
    super.initState();

    myController.addListener(_printLatestValue);
  }

  _printLatestValue() {
    print("Second text field: ${myController.text}");
  }

  _test() {
    print("hi there");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Retrieve Text Input'),
      ),
      body: Con(_test, myController)
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

controller_test.dart

import 'package:flutter/material.dart';

class Con extends StatelessWidget {
  Con(this.clickCallback, this.tc);
  final TextEditingController tc;
  final VoidCallback clickCallback;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        children: <Widget>[
          TextField(
            onChanged: (text) {
              print("First text field: $text");
            },
          ),
          TextField(
            controller: tc,
          ),
          FlatButton(
            onPressed: () => clickCallback,
            child: Text("click me"),
          )
        ],
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

当我单击FlatButton小部件中的 时,什么也没有发生,我期待hi there被打印

Has*_*sef 8

我刚刚在另一个答案中找到它, 我缺少 (),所以正确的调用是:

      FlatButton(
        onPressed: () => clickCallback(),
        child: Text("click me"),
      )
Run Code Online (Sandbox Code Playgroud)


Har*_*dia 6

这里有两种选择。

  1. onPressed: () => fun() 就像 onPressed 参数是一个调用 fun 的匿名方法。

  2. onPressed: fun 就像 onPressed 参数是函数乐趣。