使用回调删除listview项的颤振/省道问题
这可能只是一个小错误,但我的回调不起作用。 我试图使用回调删除Listview项,但当我按下图标按钮时,什么也没有发生。 我已经编写了一个示例代码,因为我的代码太长了 我正在使用回调删除listview项的颤振/省道问题,listview,flutter,dart,callback,Listview,Flutter,Dart,Callback,这可能只是一个小错误,但我的回调不起作用。 我试图使用回调删除Listview项,但当我按下图标按钮时,什么也没有发生。 我已经编写了一个示例代码,因为我的代码太长了 我正在UserListView中构建列表视图,并将数据传递给User小部件 class UserListView extends StatefulWidget { @override _UserListViewState createState() => _UserListViewState(); } class
UserListView
中构建列表视图,并将数据传递给User
小部件
class UserListView extends StatefulWidget {
@override
_UserListViewState createState() => _UserListViewState();
}
class _UserListViewState extends State<UserListView> {
List<User> user = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("User")),
body: StreamBuilder<QuerySnapshot>(
stream: userRef.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text("something happend");
}
user = snapshot.data.documents
.map((doc) => User.fromDocument(doc))
.toList();
if (user.isEmpty) {
return Text("no user");
}
return ListView.builder(
itemCount: user.length,
itemBuilder: (BuildContext context, int index) {
final item = user[index];
return User(
index: item.index,
username: item.username,
uid: item.uid,
country: item.country,
removeUser: () {
setState(() {
user.removeAt(item.index);
});
},
);
},
);
}));
}
}
使用回调“removeUser”在这里缺少什么?您在用于删除项目的索引方面犯了错误。 在代码中,您为列表中的每个项目分配索引,并尝试使用预先分配的索引从列表中动态删除该项目 如何从列表中正确删除项目? 使用单击的位置,而不是存储在自己对象中的静态索引值 那么,换掉这个
setState(() {
user.removeAt(item.index);
});
与
有关完整的工作示例,请参见下面的代码
此示例应用程序显示项目列表,并允许用户从列表中的任何位置删除单击的项目
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// Define the default brightness and colors.
brightness: Brightness.light,
primaryColorLight: Colors.blue[600],
accentColor: Colors.blueAccent,
),
debugShowCheckedModeBanner: false,
home: UserListView(),
),
);
}
class UserListView extends StatefulWidget {
@override
_UserListViewState createState() => _UserListViewState();
}
class _UserListViewState extends State<UserListView> {
List<User> user = [];
@override
void initState() {
super.initState();
user.add(User(username: "someone1",uid: "1",country: "country",index: 1,removeUser: null,));
user.add(User(username: "someone2",uid: "1",country: "country",index: 2,removeUser: null,));
user.add(User(username: "someone3",uid: "1",country: "country",index: 3,removeUser: null,));
user.add(User(username: "someone4",uid: "1",country: "country",index: 4,removeUser: null,));
user.add(User(username: "someone5",uid: "1",country: "country",index: 5,removeUser: null,));
user.add(User(username: "someone6",uid: "1",country: "country",index: 6,removeUser: null,));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("User")),
body: ListView.builder(
itemCount: user.length,
itemBuilder: (BuildContext context, int index) {
final item = user[index];
return User(
index: item.index,
username: item.username,
uid: item.uid,
country: item.country,
removeUser: () {
setState(() {
user.removeAt(index);
});
},
);
},
));
}
}
class User extends StatefulWidget {
final int index;
final String username;
final String uid;
final String country;
final VoidCallback removeUser;
User({this.username, this.country, this.uid, this.index, this.removeUser});
/* factory User.fromDocument(DocumentSnapshot doc) {
return User(
uid: doc['uid'],
username: doc['username'],
country: doc['country'],
);
}*/
@override
_UserState createState() => _UserState();
}
class _UserState extends State<User> {
@override
Widget build(BuildContext context) {
return Container(
height: 200.0,
child: Column(
children: <Widget>[
Text(widget.uid),
Text(widget.username),
Text(widget.country),
IconButton(
icon: Icon(Icons.delete),
onPressed: () => widget.removeUser(),
)
],
),
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(
材料聚丙烯(
标题:“颤振演示”,
主题:主题数据(
//定义默认亮度和颜色。
亮度:亮度,亮度,
primaryColorLight:颜色。蓝色[600],
accentColor:Colors.blueAccent,
),
debugShowCheckedModeBanner:false,
主页:UserListView(),
),
);
}
类UserListView扩展了StatefulWidget{
@凌驾
_UserListViewState createState()=>\u UserListViewState();
}
类_UserListViewState扩展状态{
列表用户=[];
@凌驾
void initState(){
super.initState();
添加(用户(用户名:“someone1”,uid:“1”,国家:“country”,索引:1,移除用户:null,);
添加(用户(用户名:“someone2”,uid:“1”,国家:“country”,索引:2,移除用户:null,);
添加(用户(用户名:“someone3”,uid:“1”,国家:“country”,索引:3,移除用户:null,);
添加(用户(用户名:“someone4”,uid:“1”,国家:“country”,索引:4,移除用户:null,);
添加(用户(用户名:“someone5”,uid:“1”,国家:“country”,索引:5,移除用户:null,);
添加(用户(用户名:“someone6”,uid:“1”,国家:“country”,索引:6,移除用户:null,);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“用户”)),
正文:ListView.builder(
itemCount:user.length,
itemBuilder:(构建上下文,int索引){
最终项目=用户[索引];
返回用户(
索引:item.index,
用户名:item.username,
uid:item.uid,
国家:item.country,
removeUser:(){
设置状态(){
user.removeAt(索引);
});
},
);
},
));
}
}
类用户扩展StatefulWidget{
最终整数指数;
最终字符串用户名;
最后一个字符串uid;
最终字符串国家;
最终用户撤销;
用户({this.username,this.country,this.uid,this.index,this.removeUser});
/*工厂用户.fromDocument(DocumentSnapshot文档){
返回用户(
uid:doc['uid'],
用户名:doc['username'],
国家:doc[“国家”],
);
}*/
@凌驾
_UserState createState()=>\u UserState();
}
类_UserState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回容器(
高度:200.0,
子:列(
儿童:[
文本(widget.uid),
文本(widget.username),
文本(widget.country),
图标按钮(
图标:图标(Icons.delete),
onPressed:()=>widget.removeUser(),
)
],
),
);
}
}
您在用于删除项目的索引方面出错。
在代码中,您为列表中的每个项目分配索引,并尝试使用预先分配的索引从列表中动态删除该项目
如何从列表中正确删除项目?
使用单击的位置,而不是存储在自己对象中的静态索引值
那么,换掉这个
setState(() {
user.removeAt(item.index);
});
与
有关完整的工作示例,请参见下面的代码
此示例应用程序显示项目列表,并允许用户从列表中的任何位置删除单击的项目
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// Define the default brightness and colors.
brightness: Brightness.light,
primaryColorLight: Colors.blue[600],
accentColor: Colors.blueAccent,
),
debugShowCheckedModeBanner: false,
home: UserListView(),
),
);
}
class UserListView extends StatefulWidget {
@override
_UserListViewState createState() => _UserListViewState();
}
class _UserListViewState extends State<UserListView> {
List<User> user = [];
@override
void initState() {
super.initState();
user.add(User(username: "someone1",uid: "1",country: "country",index: 1,removeUser: null,));
user.add(User(username: "someone2",uid: "1",country: "country",index: 2,removeUser: null,));
user.add(User(username: "someone3",uid: "1",country: "country",index: 3,removeUser: null,));
user.add(User(username: "someone4",uid: "1",country: "country",index: 4,removeUser: null,));
user.add(User(username: "someone5",uid: "1",country: "country",index: 5,removeUser: null,));
user.add(User(username: "someone6",uid: "1",country: "country",index: 6,removeUser: null,));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("User")),
body: ListView.builder(
itemCount: user.length,
itemBuilder: (BuildContext context, int index) {
final item = user[index];
return User(
index: item.index,
username: item.username,
uid: item.uid,
country: item.country,
removeUser: () {
setState(() {
user.removeAt(index);
});
},
);
},
));
}
}
class User extends StatefulWidget {
final int index;
final String username;
final String uid;
final String country;
final VoidCallback removeUser;
User({this.username, this.country, this.uid, this.index, this.removeUser});
/* factory User.fromDocument(DocumentSnapshot doc) {
return User(
uid: doc['uid'],
username: doc['username'],
country: doc['country'],
);
}*/
@override
_UserState createState() => _UserState();
}
class _UserState extends State<User> {
@override
Widget build(BuildContext context) {
return Container(
height: 200.0,
child: Column(
children: <Widget>[
Text(widget.uid),
Text(widget.username),
Text(widget.country),
IconButton(
icon: Icon(Icons.delete),
onPressed: () => widget.removeUser(),
)
],
),
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(
材料聚丙烯(
标题:“颤振演示”,
主题:主题数据(
//定义默认亮度和颜色。
亮度:亮度,亮度,
primaryColorLight:颜色。蓝色[600],
accentColor:Colors.blueAccent,
),
debugShowCheckedModeBanner:false,
主页:UserListView(),
),
);
}
类UserListView扩展了StatefulWidget{
@凌驾
_UserListViewState createState()=>\u UserListViewState();
}
类_UserListViewState扩展状态{
列表用户=[];
@凌驾
void initState(){
super.initState();
添加(用户(用户名:“someone1”,uid:“1”,国家:“country”,索引:1,移除用户:null,);
添加(用户(用户名:“someone2”,uid:“1”,国家:“country”,索引:2,移除用户:null,);
添加(用户(用户名:“someone3”,uid:“1”,国家:“country”,索引:3,移除用户:null,);
添加(用户(用户名:“someone4”,uid:“1”,国家:“country”,索引:4,移除用户:null,);
添加(用户(用户名:“someone5”,uid:“1”,国家:“country”,索引:5,移除用户:null,);
添加(用户(用户名:“someone6”,uid:“1”,国家:“country”,索引:6,移除用户:null,);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“用户”)),
正文:ListView.builder(
itemCount:user.length,
itemBuilder:(构建上下文,int索引){
最终项目=用户[索引];
返回用户(
索引:item.index,
用户名:item.username,
uid:item.uid,
国家:item.country,
removeUser:(){
设置状态()
import 'package:flutter/material.dart';
class UserListView extends StatefulWidget {
@override
_UserListViewState createState() => _UserListViewState();
}
class _UserListViewState extends State<UserListView> {
List<User> user = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("User")),
body: StreamBuilder<QuerySnapshot>(
stream: userRef.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text("something happend");
}
user = snapshot.data.documents
.map((doc) => User.fromDocument(doc))
.toList();
if (user.isEmpty) {
return Text("no user");
}
return ListView.builder(
itemCount: user.length,
itemBuilder: (BuildContext context, int index) {
return Container(
height: 200.0,
child: Column(
children: <Widget>[
Text(user[index].uid),
Text(user[index].username),
Text(user[index].country),
IconButton(
icon: Icon(Icons.delete),
onPressed: () => setState(() {
user.removeAt(index);
}))
],
),
);
},
);
}));
}
}
class User {
final String username;
final String uid;
final String country;
User({this.username, this.uid, this.country});
factory User.fromDocument(DocumentSnapshot doc) {
return User(
username: doc['username'], uid: doc['uid'], country: doc['country']);
}
}
import 'package:flutter/material.dart';
class UserListView extends StatefulWidget {
@override
_UserListViewState createState() => _UserListViewState();
}
class _UserListViewState extends State<UserListView> {
static List<User> user = [];
Widget _commonPart() {
return ListView.builder(
itemCount: user.length,
itemBuilder: (BuildContext context, int index) {
return Container(
height: 200.0,
child: Column(
children: <Widget>[
Text(user[index].uid),
Text(user[index].username),
Text(user[index].country),
IconButton(
icon: Icon(Icons.delete),
onPressed: () => setState(() {
user.removeAt(index);
}))
],
),
);
},
);
}
Widget _buildBody() {
if (user == null) {
// since the list is empty, fetch the data
return StreamBuilder<QuerySnapshot>(
stream: userRef.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text("something happend");
}
user = snapshot.data.documents
.map((doc) => User.fromDocument(doc))
.toList();
if (user.isEmpty) {
return Text("no user");
} else {
return _commonPart();
}
});
} else {
return _commonPart();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(appBar: AppBar(title: Text("User")), body: _buildBody());
}
}
class User {
final String username;
final String uid;
final String country;
User({this.username, this.uid, this.country});
factory User.fromDocument(DocumentSnapshot doc) {
return User(
username: doc['username'], uid: doc['uid'], country: doc['country']);
}
}