flutter - 尝试从子窗口小部件调用 setState 时未调用回调函数

2024-05-08

我正在使用 VoidCallback 从子小部件调用 setState 。但回调函数根本没有执行。

下面是我的代码的本质。

子部件:

class TextFormMentorHashtag extends StatefulWidget {
  const TextFormMentorHashtag({Key? key, required this.callback}) : super(key: key);

  final VoidCallback callback;

  @override
  _TextFormMentorHashtagState createState() =>
      _TextFormMentorHashtagState();
}

class _TextFormMentorHashtagState extends State<TextFormMentorHashtag> {

  @override
  Widget build(BuildContext context) {
  ...
    TextFormField(
      ...
      onChanged: (value) {
        if(_formKey.currentState!.validate()) {
          ...
          print('call callback');
          widget.callback;
        }
      }
    )
  }
}

父小部件:

class ApplyMentorPage extends StatefulWidget {
  const ApplyMentorPage({Key? key}) : super(key: key);

  @override
  State<ApplyMentorPage> createState() => _ApplyMentorPageState();
}

class _ApplyMentorPageState extends State<ApplyMentorPage> {

  ...
  bool _disabled = true;

  @override
  Widget build(BuildContext context) {

    void callback() {
      print('callback called');
      setState(() {
        _disabled = !_mentorProvider.check();
      });
    }

    return Scaffold(
      ...
      child: Column(
        children: [
          TextFormMentorHashtag(callback: callback), 
          ...

// _disabled turns submit button on and off in the later code

当我运行代码并按子小部件终端时,会打印“调用回调”,但不会打印“调用回调”。我缺少什么?


你没有打电话callback在你的_TextFormMentorHashtagState。你应该这样称呼它widget.callback() or widget.callback.invoke().

完整代码:

class _TextFormMentorHashtagState extends State<TextFormMentorHashtag> {

  @override
  Widget build(BuildContext context) {
  ...
    TextFormField(
      ...
      onChanged: (value) {
        if(_formKey.currentState!.validate()) {
          ...
          print('call callback');
          // or widget.callback()
          widget.callback.invoke();
        }
      }
    )
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter - 尝试从子窗口小部件调用 setState 时未调用回调函数 的相关文章

随机推荐

  • 如何在前端和后端之间共享javascript代码(ES6)

    这是 ES6 特定的副本这个所以线程 https stackoverflow com questions 3225251 how can i share code between node js and the browser 其中详细介绍
  • MySQL 一起使用 LIKE、AND、OR

    我正在创建一个搜索功能来搜索一些图片 每张图片都有一个状态 表示它是被批准还是被拒绝 mysql 在返回之前检查状态 但是它仍然返回不应该返回的图像 这是我的查询 SELECT FROM Pictures WHERE ImageTitle
  • Jenkins - Xcode 构建工作协同设计失败

    下面是我的构建脚本 不使用 xcodebuild 插件 构建步骤工程 我使用所需的证书和私钥创建了一个单独的钥匙串 它们在钥匙串访问中可见 脚本中的钥匙串命令不会失败 安全列表钥匙串将这些显示为有效的钥匙串 它的表现就像解锁命令并未真正成功
  • (无限?)JavaScript 代码中的循环

    我有以下 JavaScript 代码来在网站上 显示 XML function createChild node tabindex var child node childNodes var r var tabs for i 0 i
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 为什么.NET中的每个类都继承自Object?

    我不明白 为什么他们需要一个共同的基础 这个问题预设了一个谎言 他们不need一个共同的基础类型 这个选择并不是出于必要 这是出于为客户提供最佳价值的愿望 当设计类型系统或任何其他相关问题时 有时您会遇到决策点 您必须决定 X 或非 X 公
  • Clojure Web 应用程序 - 我从哪里开始?

    最近我一直在研究 Clojure 我喜欢这门语言 我想看看我是否可以在其中制作一个小型网络应用程序 只是为了挑战自己 但是 我完全没有设置任何与 Java 相关的 Web 应用程序的经验 事实上 我对 Java 并没有太多的经验 我从哪说起
  • spring启动时如何加载@Cache?

    我正在使用 spring cache 来改进数据库查询 其工作原理如下 Bean public CacheManager cacheManager return new ConcurrentMapCacheManager books Cac
  • MongoDB - 解释特定的解释输出

    我使用的是 MongoDB 版本 2 4 8 test 2014 03 25 14 42 13 0 gt gt gt db users getIndexes v 1 key id 1 ns test users name id v 1 ke
  • 如何以编程方式在导航栏中设置图片?

    我有一个带有导航栏的详细视图 其中带有后退按钮和视图名称 导航栏以编程方式设置 呈现的名称是这样设置的 self title NSLocalizedString name 该名称取决于所呈现的视图 现在我还想在导航栏上显示一个小图标 这也取
  • 使用简单的 ActionFilterAttribute 运行时出错

    开始编写一个简单的过滤器 从每个操作加载的请求中提取一些内容 从其他 stackoverflow 复制一些代码 如下所示 public class TestKeyAttribute ActionFilterAttribute public
  • Visual Studio 2015 RC:Android 模拟器:安装程序失败。 (代码:1603)

    当我安装 Microsoft Visual Studio 2015 Professional RC 时 出现以下错误 适用于 Android 的 Microsoft Visual Studio 模拟器 安装程序失败 安装过程中发生致命错误
  • Android OpenGLES 渲染到纹理

    我为 iPhone 编写图形应用程序 并且希望将我最新的应用程序 Layers 移植到 Android 平台 Layers 是一款绘画应用程序 允许用户在屏幕上绘画并使用不同的画笔 颜色等创建多层绘画 并导出到 PSD 它有桌面同步 涂抹工
  • 四舍五入到 25、50、75、100

    我不是一个数学爱好者 所以我很难想出一个将小数四舍五入到 25 50 75 和 100 的计算方法 这不会是典型的四舍五入 因为小数不会减少但只增加了 Example 如果 11 12 则舍入为 11 25 如果为 11 34 则舍入为 1
  • ajax jQuery asp.net 错误意外的标记 <

    我在向现有的 asp net 4 网站添加 ajax 功能时遇到问题 我都尝试过在 aspx 页面中创建 webmethod 并尝试过 asmx 但在这两种情况下我都会收到此错误Unexpected token lt 这是我的 jQuery
  • CSS3 矩阵 3d 矩形到梯形的转换

    我正在尝试使用 webkit 对 CSS3 的支持transform matrix3d
  • 在选择选项标签中循环 Ajax 响应

    我必须选择多个测试和日期 当根据测试单击提交时 实验室名称将加载到选择选项中 阿贾克斯脚本 name submits click function e e preventDefault var array select selected e
  • golang从sdin扫描一行数字

    我正在尝试从标准输入读取输入 3 2 1
  • 如何在批处理文件中测试当前驱动器号?

    我正在尝试编写一个批处理文件 该文件获取运行批处理文件的驱动器号 并使用它的 IF 语句 例如如果字母是M 则会跳转到标签 mSection 这可能吗 您可以使用 d0 来获取驱动器号 像这样的东西 IF d0 M CALL mSectio
  • flutter - 尝试从子窗口小部件调用 setState 时未调用回调函数

    我正在使用 VoidCallback 从子小部件调用 setState 但回调函数根本没有执行 下面是我的代码的本质 子部件 class TextFormMentorHashtag extends StatefulWidget const