StarCue
StarCue

Reputation: 73

Flutter : RefreshIndicator with ListView Scroll

i have ListView. and listview have many item. Scroll through the screen.(vertical) and if scroll position is Top, i want to RefreshIndicator work. i don't know what i have to do..

now, only worked listview scroll. but when scroll position is Top, not work RefreshIndicator..

this is my code..

  @override


Widget build(BuildContext context) {
    return FutureBuilder<List<BoadModel>>(
      future: getData(),
      builder: (context, snapshot) {
        List<BoadModel> dataList = snapshot.data ?? [];
        if (snapshot.hasError) print(snapshot.error);
        return RefreshIndicator(
          onRefresh: () async {
            setState(() {});
          },
          child: SingleChildScrollView(
            child: Column(
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Opacity(
                        opacity: 0.0,
                        child: ElevatedButton(
                            onPressed: () {}, child: Text("button"))),
                    Text(getCategoryName(widget.categoryPage)),
                    ElevatedButton(
                        onPressed: () {
                          Navigator.push(
                            context,
                            MaterialPageRoute(
                              builder: (context) => WriteBoadPage(
                                category: widget.categoryPage,
                              ),
                            ),
                          );
                        },
                        child: Text("글쓰기"))
                  ],
                ),
                snapshot.hasData
                    ? Column(
                        children: [
                          ListView.builder(
                            physics: NeverScrollableScrollPhysics(),
                            shrinkWrap: true,
                            itemCount: dataList.length,
                            itemBuilder: (BuildContext context, int index) {
                              return ListViewItem(
                                  title: dataList[index].title,
                                  nickname: dataList[index].nickname,
                                  time: dataList[index].time,
                                  view: dataList[index].view,
                                  commentCount: dataList[index].comment);
                            },
                          ),
                          Row(
                            children: [Text("dafs")],
                          )
                        ],
                      )
                    : Center(
                        child: CircularProgressIndicator(),
                      )
              ],
            ),
          ),
        );
      },
    );
  }

Upvotes: 1

Views: 1636

Answers (1)

StarCue
StarCue

Reputation: 73

I found a solution but there is another problem. The problem is that I have SingleChildScrollView already in parent widget like shown below:

    return SingleChildScrollView( //have SingleChildScrollView already
      child: Column(
        children: [
          RefreshIndicator(
              child: SingleChildScrollView(
                child: ListView.builder(
                  itemBuilder: (BuildContext context, int index) {
                    return ListViewItem();
                  },
                ),
              ),
              onRefresh: () async {}),
        ],
      ),
    );

So I did it like shown below:

    @override
      Widget build(BuildContext context) {
        return RefreshIndicator(
          child: SingleChildScrollView(
            child: Column(
              children: [
                ListView.builder(
                  itemBuilder: (BuildContext context, int index) {
                    return ListViewItem();
                  },
                ),
              ],
            ),
          ),
          onRefresh: () async {},
        );

Upvotes: 1

Related Questions