Изменить цвет прокрутки ListView во Flutter: несколько методов

Чтобы изменить эффект ListView при прокрутке цвета во Flutter, вы можете попробовать следующие методы:

Метод 1: использование ScrollController

import 'package:flutter/material.dart';
class MyListView extends StatefulWidget {
  @override
  _MyListViewState createState() => _MyListViewState();
}
class _MyListViewState extends State<MyListView> {
  ScrollController _scrollController;
  bool _isScrolled = false;
  @override
  void initState() {
    super.initState();
    _scrollController = ScrollController();
    _scrollController.addListener(_onScroll);
  }
  @override
  void dispose() {
    _scrollController.removeListener(_onScroll);
    _scrollController.dispose();
    super.dispose();
  }
  void _onScroll() {
    if (_scrollController.offset > 0) {
      setState(() {
        _isScrolled = true;
      });
    } else {
      setState(() {
        _isScrolled = false;
      });
    }
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ListView Scroll Color'),
      ),
      body: ListView.builder(
        controller: _scrollController,
        itemCount: 100,
        itemBuilder: (context, index) {
          return Container(
            height: 50,
            color: _isScrolled ? Colors.blue : Colors.white,
            child: Center(
              child: Text(
                'Item $index',
                style: TextStyle(
                  color: _isScrolled ? Colors.white : Colors.black,
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}
void main() {
  runApp(MaterialApp(
    home: MyListView(),
  ));
}

Метод 2: использование ScrollNotification

import 'package:flutter/material.dart';
class MyListView extends StatefulWidget {
  @override
  _MyListViewState createState() => _MyListViewState();
}
class _MyListViewState extends State<MyListView> {
  bool _isScrolled = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ListView Scroll Color'),
      ),
      body: NotificationListener<ScrollNotification>(
        onNotification: (notification) {
          if (notification is ScrollUpdateNotification) {
            setState(() {
              _isScrolled = notification.metrics.pixels > 0;
            });
          }
          return true;
        },
        child: ListView.builder(
          itemCount: 100,
          itemBuilder: (context, index) {
            return Container(
              height: 50,
              color: _isScrolled ? Colors.blue : Colors.white,
              child: Center(
                child: Text(
                  'Item $index',
                  style: TextStyle(
                    color: _isScrolled ? Colors.white : Colors.black,
                  ),
                ),
              ),
            );
          },
        ),
      ),
    );
  }
}
void main() {
  runApp(MaterialApp(
    home: MyListView(),
  ));
}

В обоих методах мы используем логическую переменную (_isScrolled), чтобы отслеживать, прокручивается ли ListView или нет. Мы обновляем переменную в зависимости от позиции прокрутки, используя либо ScrollController, либо ScrollNotification. Затем мы динамически меняем цвет элемента ListView на основе значения _isScrolled.