Чтобы изменить эффект 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
.