dart 如何在flutter中通过引用传递函数?

gkl3eglg  于 2023-05-04  发布在  Flutter
关注(0)|答案(3)|浏览(234)

有没有什么方法可以通过引用而不是通过flutter中的值来调用函数。

iovurdzv

iovurdzv1#

如果你想问的是是否可以通过引用而不是值来调用函数并传递参数,那么不完全是这样。从技术上讲,Dart始终使用按值传递(although I prefer calling it "pass-by-assignment")。
如果你想模拟按引用传递,你可以在其他对象中 * Package * 你的参数,以增加一个间接级别:

class Reference<T> {
  T value;

  Reference(this.value);
}

void trimString(Reference<String> string) {
  string.value = string.value.trim();
}
9nvpjoqh

9nvpjoqh2#

在flutter函数也是一级对象,所以你可以在任何地方传递它们。
你就像

typedef ProfileFormSubmitCallback = void Function(
  String? photoUrl,
  String firstName,
  String lastName,
  String email,
);
then

你可以像这样引用你的函数

ProfileFormSubmitCallback myFunction;
pjngdqdw

pjngdqdw3#

这就是函数的传递和使用方式。希望这是你想要的

class ButtonPrimary extends StatelessWidget {
  final String text;
  final double? height;
  final double? width;
  final VoidCallback onPressed;
 

  const ButtonPrimary({
    Key? key,
    required this.onPressed,
    required this.text,
    this.height,
    this.width,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      height: height ?? 50,
      width: width ?? MediaQuery.of(context).size.width * .6,
      child: ElevatedButton(
        onPressed: onPressed,
        child: Widget(...),
      ),
    );
  }
}

和用法

ButtonPrimary(
   onPressed: onLoginPressed,
   text: 'Register',
   width: MediaQuery.of(context).size.width * .9,
  )

  ....

  void onLoginPressed() {
    // Do sth
  }

相关问题