Flutter 如何将参数(int)传递给回调?

Pen*_*bra 3 callback dart flutter

如何在 Flutter 中通过回调传递参数?

我有两个文件main.dartblock.dart我的目标是向block.dart中的myCallback添加一个 int (例如 12) ,以便在main.dart 的函数WhatToDo中使用它(而不是)print ('Should receive the Value from myCallback');

这是main.dart文件的代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MainBlock(),
    );
  }
}

class MainBlock extends StatefulWidget {
  @override
  _MainBlockState createState() => _MainBlockState();
}

class _MainBlockState extends State<MainBlock> {
  void whatToDo() {
    print('Should receive the Value from myCallback');
  }

  @override
  Widget build(BuildContext context) {
    // print(getraenke.asMap());
    // print(getraenke.asMap().keys);
    // print(getraenke);

    return Scaffold(
      body: Container(
        margin: EdgeInsets.all(30.0),
        color: Color(0xFF122C39),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Expanded(
              child: Block(
                myCallback: whatToDo,
              ),
            ),
          ],
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

这是来自block.dart的带有回调的代码:

import 'package:flutter/material.dart';

class Block extends StatelessWidget {
  final Function myCallback;

  Block({this.myCallback});

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.all(10.0),
      color: Color(0xFF722662),
      child: Center(
        child: GestureDetector(
          onTap: myCallback,
          child: Text(
            'Button',
            style: TextStyle(
              color: Color(0xFFFFFFFF),
              fontSize: 22.0,
            ),
          ),
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

Ehs*_*ari 5

如果我理解正确的话,你希望你的函数接受一个参数。像这样做。

class Block extends StatelessWidget {
  final Function(int num) myCallback;

  Block({this.myCallback});
Run Code Online (Sandbox Code Playgroud)

当你调用它时,你向它提供参数

GestureDetector(
          onTap:()=> myCallback(12),
          child: ...
Run Code Online (Sandbox Code Playgroud)

最后你可以从你的主目录访问它

void whatToDo(int num) {
    print(num);
  }
Run Code Online (Sandbox Code Playgroud)