如何在Flutter中将RefreshIndicator与FutureBuilder一起使用?

Thi*_*tal 8 dart flutter

我正在尝试找到一种方法,以在FutureBuilder完成加载时指示周围的类。RefreshIndicator将a Future作为参数,并在Future完成时停止显示刷新指示符。我无法访问传递给的完全相同的Future变量FutureBuilder,尤其是当它们位于两个单独的类中时,除非我可以传递对一个的引用,而当它在另一个类中完成时,我就会知道...

Sol*_*f93 13

我也在寻找这个答案。最后我想通了...

这是我做的

FutureBuilder<String>(
  future: _calculation, // a previously-obtained Future<String> or null
  builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
    switch (snapshot.connectionState) {
      case ConnectionState.none:
        return Text('Press button to start.');
      case ConnectionState.active:
      case ConnectionState.waiting:
        return Text('Awaiting result...');
      case ConnectionState.done:
        if (snapshot.hasError)
          return Text('Error: ${snapshot.error}');
        return  new RefreshIndicator(
                    key: _refreshIndicatorKey,
                    color: Colors.blue,
                    onRefresh: () {             
                      return _calculation= getCalculation(); // EDITED
                    },
               child: SingleChildScrollView(
              SingleChildScrollView 
                      physics: AlwaysScrollableScrollPhysics(), 
                      child: Text('Result: ${snapshot.data}')
               )


              );
           break;
           default:
             return null; 
    }

  },
) 

Future<String> getCalculation() async {
         /*Write your API here or what ever u want to get when pull to refresh*/
return null;
}  
Run Code Online (Sandbox Code Playgroud)


Rub*_*elo 1

您必须访问快照,提供builder参数:

因此,snapshot.data 为您带来未来。

new FutureBuilder<String>(
  future: _calculation, // a Future<String> or null
  builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
    switch (snapshot.connectionState) {
      case ConnectionState.none: return new Text('Press button to start');
      case ConnectionState.waiting: return new Text('Awaiting result...');
      default:
        if (snapshot.hasError)
          return new Text('Error: ${snapshot.error}');
        else
          return new Text('Result: ${snapshot.data}');
    }
  },
)
Run Code Online (Sandbox Code Playgroud)

例子: https: //flutter.io/cookbook/networking/background-parsing/

文档: https: //docs.flutter.io/flutter/widgets/FutureBuilder-class.html