Как проверить позицию при прокрутке списка во флаттере?

Я хочу записать положение элемента в представлении списка во флаттере, и на основании этого я хочу изменить некоторую информацию, которая будет отображаться, ниже приведен код для использования представления списка

ListView.separated(
  scrollDirection: Axis.horizontal,
  separatorBuilder: (context, index) =>
      SizedBox(width: MediaQuery.of(context).size.width / 150),
      itemCount: myList.length + 1,
      itemBuilder: (context, index) => index == 0
          ? SizedBox(width: MediaQuery.of(context).size.width / 2.2)
          : ClipRRect(
              child: Padding(
                  padding: EdgeInsets.fromLTRB(2, 14, 18, 14),
                  child: Container(
                      width: MediaQuery.of(context).size.width / 2.55,
                      height: 150,
                      child: Center(
                          child: GestureDetector(
                              onTap: (){
                                  index2 = myList[index-1];
                              },
                              child: Text(
                              myList[index - 1].toString(),
                                 style: TextStyle(
                                     color: Colors.black,
                                     fontSize: 24,
                                     fontWeight: FontWeight.bold),
                                  ),
                           )
                        ),
                        decoration: BoxDecoration(
                           borderRadius:
                                BorderRadius.all(Radius.circular(10)),
                           boxShadow: [
                                BoxShadow(
                                  color: Colors.grey,
                                  offset: Offset(2.0, 2.0), //(x,y)
                                  blurRadius: 4.0,
                                ),
                              ],
                            gradient: LinearGradient(
                                colors: [Colors.blue[200], Colors.white],
                                begin: Alignment.topLeft,
                                end: Alignment.bottomRight
                            )
                        ),
                ),
          )
    )
),

как мне записать положение элемента, а затем отобразить другую установленную информацию в соответствии с этим?


person Community    schedule 30.07.2020    source источник


Ответы (1)


чтобы получить offSets из вашего списка, вам нужно добавить слушателей в scrollController, чтобы вы могли получать offSets каждый раз, когда он изменяется. вот пример кода:

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

class _RadioTestState extends State<RadioTest> {
  ScrollController _scrollController;
  List<String> list;
  @override
  void initState() {
    super.initState();
    _scrollController = ScrollController()
      ..addListener(() {
        print("offset = ${_scrollController.offset}");
      });
    list = List<String>();
    for (var i = 0; i < 50; i++) {
      list.add("test");
    }
  }

  @override
  Widget build(BuildContext context) {
    return ListView(
      controller: _scrollController,
      children: [
        ...list.map(
          (item) => ListTile(
            title: Text("test"),
          ),
        ),
      ],
    );
  }
}

удачи .

person Kadri Nadir    schedule 30.07.2020