可以在函数“ onPress”上调用didChangeDependencies吗?

时间:2020-09-29 07:25:28

标签: flutter dart

我正在尝试触发didChangeDependencies RefreshIndicator时呼叫onRefresh。那有可能吗?这是我的代码/尝试:

RefreshIndicator(
  onRefresh: () {
    return didChangeDependencies;
  },
  child: ...
),

但是这段代码给我一个错误

返回的类型'void Function()'不是闭包上下文所要求的'Future'。

当我在didChangeDependencies中进行一些业务登录并且想触发onRefresh时要重用它时,您能告诉我如何使此代码起作用吗?

编辑:我也尝试过这种方式

RefreshIndicator(
  onRefresh: didChangeDependencies,
  child: ...
),

但是我得到另一个错误:

类型'()=>无效'不是类型'()=>未来'的子类型

EDIT2:这是我的didChangeDependencies方法

@override
  void didChangeDependencies() {
    if (_isInit) {
      setState(() {
        _isLoading = true;
      });
      standings = Provider.of<Matches>(context).standings;

      if (standings.length == 0) {
        Provider.of<Matches>(context).fetchStanding().then((fetchedStandings) {
          standings = fetchedStandings;
          if (mounted) {
            setState(() {
              _isLoading = false;
            });
          }
        });
      } else {
        setState(() {
          _isLoading = false;
        });
      }
    }

    _isInit = false;
    super.didChangeDependencies();
  }

2 个答案:

答案 0 :(得分:1)

我将在didChangeDependencies中提取整个函数,然后在didChangeDependencies中将其与super.didChangeDependencies();一起调用

然后在:

中使用新功能
RefreshIndicator(
  onRefresh: () {
    newFunction();
  },
  child: ...
),

答案 1 :(得分:1)

另一个答案比这更好的方法,但是要解决您的特定问题:

在更新和评论中,您获得了90%的访问权限。

类型'()=>无效'不是类型'()=>未来'的子类型

onRefresh返回一个Future。这与说RaiseButton的onPressed不同,后者将返回非未来。

https://api.flutter.dev/flutter/material/RefreshCallback.html

所以您需要给它一个未来。例如,您可以将didChangeDependencies标记为异步。