簡體   English   中英

如何在 stream 構建器 flutter 之外添加刷新指示器

[英]How to add refresh indicator outside stream builder flutter

我正在嘗試在我的 streambuilder 小部件中添加拉動以刷新。這是我到目前為止嘗試過的部分代碼

@override
  Widget build(BuildContext context) {
    return RefreshIndicator(
      key: _refreshIndicatorKey,
      onRefresh: _handleRefresh,
      child: StreamBuilder<DataModel>(
          stream: dataBloc.subject.stream,
          builder: (context, AsyncSnapshot<DataModel> snapshot) {
            if (snapshot.hasData) {
              return passData(snapshot.data);
            } else if (snapshot.hasError) {
              return .....
            } else {
              return ......
            }
          }),
    );
  }

Future<void> _handleRefresh() async {
    try {
      bool trustSelfSigned = true;
      HttpClient httpClient = new HttpClient()
        ..badCertificateCallback =
            ((X509Certificate cert, String host, int port) => trustSelfSigned);
      IOClient http = new IOClient(httpClient);
      final response = await http.post('...',
          headers: {
            HttpHeaders.contentTypeHeader: 'application/json',
          },
          body: json.encode({...}));
      Map<String, dynamic> responseJson = json.decode(response.body);
      return;
    } catch (ex) {
      print(ex.message);
    }
  }

但是每當我嘗試向下滑動時...我看不到刷新指示器的重新加載圖標..我應該添加更多內容嗎? 我也添加了這段代碼

final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
      GlobalKey<RefreshIndicatorState>();

您需要將刷新指示器放入 stream 構建器中:

    @override
    Widget build(BuildContext context) {
        return StreamBuilder<DataModel>(
        stream: dataBloc.subject.stream,
            builder: (context, AsyncSnapshot<DataModel> snapshot) {
                if (snapshot.hasData) {
                    return Expanded(
                        child: RefreshIndicator(
                            child: methodToHandleTheData(snapshot.data)
                        )
                    );
                } else if (snapshot.hasError) {
                    return .....
                } else {
                    return ......
                }
            }
        );
    }

    Widget methodToHandleTheData(DataModel data) {
        return SingleChildScrollView(
            physics: const AlwaysScrollableScrollPhysics(),
            child: MyAwesomeWidget(data)
        );
    }

RefreshIndicator 的第一個子項必須是可滾動的小部件,即 SingleChildScrollView 或 ListView,並且您還需要添加參數physics: const AlwaysScrollableScrollPhysics()以使其工作。

是的,你需要一個可滾動的孩子。 在 RefreshIndicator 之后放置一個 SingleChildScrollView,它應該可以工作

過去,當我在返回構建器的 ListView 中分配配置錯誤的 ScrollController 時,我遇到了這個問題。 一旦我刪除了 ScrollController,就會顯示循環刷新指示器,並調用 onRefresh。

我不必使用 SingleChildScrollView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM