【问题标题】:Function in flutter颤振中的功能
【发布时间】:2021-12-27 06:58:21
【问题描述】:

我尝试在小部件中使用函数,但收到此错误 错误:参数类型“Function”不能分配给参数类型“void Function()?”。

我在这里搜索,发现有人建议使用我在代码中设置的相同方法,那么问题是什么?

import 'package:flutter/material.dart';

class ReusableCard extends StatelessWidget {
  ReusableCard(
      {required this.colour, required this.cardChild, required this.onPress});
  final Color colour;
  final Widget cardChild;
  final Function onPress;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onPress,
      child: Container(
        child: cardChild,
        margin: EdgeInsets.all(15.0),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(10.0),
          color: colour,
        ),
      ),
    );
  }
}

【问题讨论】:

    标签: flutter android-studio dart


    【解决方案1】:

    默认情况下,Function 类型是一个没有参数的动态类型值返回函数。

    通常,Flutter 期望其按钮内部有 void 回调,这意味着它期望 void Function 类型,没有参数。

    解决此问题的一种常见、灵活且易读的方法是使用 void 函数包装您的函数,例如:

    () => myFunction()

    即使您的函数非常不同(例如,它有一些参数),这也会起作用,从而使您的代码更加灵活。

    () => myFunctionThatAcceptsAnInteger(5)

    【讨论】:

      【解决方案2】:

      在 Flutter 中,我们已经有了不带参数且不返回数据的回调的签名 - VoidCallback

      你可以使用它:

      final VoidCallback onPress;
      

      此外,我们还有 ValueSetter<T>, ValueGetter<T> 等。 foundation-library

      【讨论】:

        【解决方案3】:

        onTap: onPress 替换为onTap: () => onPress()

        【讨论】:

          【解决方案4】:

          final Function onPress; 更改为final Function() onPress;

          【讨论】:

          • 这将起作用,尽管我建议您通过包含返回类型来指定函数类型的完整签名:final void Function() onPress;
          猜你喜欢
          • 2020-10-03
          • 2021-06-02
          • 2022-01-26
          • 2020-09-25
          • 2021-09-19
          • 2021-03-06
          • 2021-05-21
          • 1970-01-01
          • 2023-02-08
          相关资源
          最近更新 更多