【发布时间】:2020-05-21 06:57:13
【问题描述】:
我开发了一个应用程序,它有一个带有卡片的LisView。当用户点击ListView 中的项目时,我想重新加载/刷新整个ListView。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<String> itemsList = [
"item0",
"item1",
"item2",
"item3",
"item4",
"item5"
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: ListView.builder(
itemCount: itemsList.length,
itemBuilder: (context, index) {
return ListItemCard(item: itemsList[index]);
})),
);
}
}
class ListItemCard extends StatefulWidget {
final String item;
ListItemCard({this.item});
_ListItemCardState createState() => _ListItemCardState();
}
class _ListItemCardState extends State<ListItemCard> {
@override
Widget build(BuildContext context) {
return Card(
elevation: 10,
child: Padding(
padding: EdgeInsets.all(0.0),
child: Container(
child:
Align(
alignment: Alignment.centerRight,
child:Text(
widget.item,
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),),
width: 100,
height: 100,
color: Colors.red)));
}
}
我正在使用 Flutter 1.17。我想在用户点击时选择一个项目。我的问题是在选择第二个项目时,应该取消选择已选择的项目。为此,我需要更新整个列表。我的点击事件处理程序位于 _ListItemCardState 类中,调用 setState() 只会更新我理解的特定卡片。
【问题讨论】:
-
如何将 selectedItem 变量保持为类的全局变量并在卡片项目中使用 setState{} 更新它,并在 ternary(?:) 运算符中使用 selectedItem 变量来调节卡片中的卡片项目选择状态查看