Flutter ListView 改变值
Flutter ListView changing values
我有一个问题:
我在 Flutter with Songs 中有一个 ListView.builder,每个 Song 项目的左侧都有一个播放按钮。因此,我单击播放按钮,图标发生变化,歌曲开始播放。
当我单击列表中的另一首歌曲时,如何将图标设置为从上一首歌曲停止?喜欢这个视频:
所以只需将前一个图标的 icon/bool 设置为 false,将新图标设置为 true。
我相信这就是您要找的。
您应该创建一个状态变量,在本例中为 _index
。该值保存当前正在播放的项目的索引。在 ListView
小部件的 builder
方法中,您可以检查它的索引是否与州的索引相同。
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: App()));
class App extends StatefulWidget {
const App({
Key? key,
}) : super(key: key);
@override
_AppState createState() => _AppState();
}
class _AppState extends State<App> {
/// The song that is currently selected.
int? _index;
void _updateSelected(int index) => setState(() => _index = index);
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: 10,
itemBuilder: (context, index) {
// Check whether the index is the selected index.
final _isSelected = index == _index;
return ListTile(
title: Text('Song title'),
// Change the icon based on `isSelected`.
leading: Icon(_isSelected ? Icons.pause : Icons.play_arrow),
// Call the method when the tile is tapped.
onTap: () => _updateSelected(index),
);
},
);
}
}
我有一个问题: 我在 Flutter with Songs 中有一个 ListView.builder,每个 Song 项目的左侧都有一个播放按钮。因此,我单击播放按钮,图标发生变化,歌曲开始播放。 当我单击列表中的另一首歌曲时,如何将图标设置为从上一首歌曲停止?喜欢这个视频:
所以只需将前一个图标的 icon/bool 设置为 false,将新图标设置为 true。
我相信这就是您要找的。
您应该创建一个状态变量,在本例中为 _index
。该值保存当前正在播放的项目的索引。在 ListView
小部件的 builder
方法中,您可以检查它的索引是否与州的索引相同。
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: App()));
class App extends StatefulWidget {
const App({
Key? key,
}) : super(key: key);
@override
_AppState createState() => _AppState();
}
class _AppState extends State<App> {
/// The song that is currently selected.
int? _index;
void _updateSelected(int index) => setState(() => _index = index);
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: 10,
itemBuilder: (context, index) {
// Check whether the index is the selected index.
final _isSelected = index == _index;
return ListTile(
title: Text('Song title'),
// Change the icon based on `isSelected`.
leading: Icon(_isSelected ? Icons.pause : Icons.play_arrow),
// Call the method when the tile is tapped.
onTap: () => _updateSelected(index),
);
},
);
}
}