我想我做了一些 setstate 在 flutter 中不起作用的事情
I think i have done something that's setstate is not working in flutter
我是这个领域的新手,所以请放轻松。我正在学习 flutter 我在我的应用程序中制作了一张卡片并给它一个删除按钮但该按钮没有删除任何卡片。请帮帮我。
这是我的代码。
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'quotes.dart';
import 'quotes_list.dart';
void main() => runApp(new MaterialApp(
home: Quotelist(),
));
class Quotelist extends StatefulWidget {
Quotelist({Key? key}) : super(key: key);
@override
_QuotelistState createState() => _QuotelistState();
}
class _QuotelistState extends State<Quotelist> {
List<quotes> q = [
quotes(text: "once upon a time", author: "Shayan Ali"),
quotes(text: "once upon a time", author: "Sumair Ali"),
quotes(text: "once upon a time", author: "Umair Ali")
];
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.amber[200],
appBar: AppBar(
title: Text("list"),
centerTitle: true,
backgroundColor: Colors.amber[800],
),
body: Column(
children: q.map((e) => Quotecard(quote: e,
delete: (){
setState(() {
q.remove(e);
});
},
),
).toList(),
),
);
}
}
import 'package:flutter/material.dart';
import 'quotes.dart';
class Quotecard extends StatelessWidget {
final quotes? quote;
final Function? delete;
Quotecard({ this.quote, this.delete });
@override
Widget build(BuildContext context) {
return Card(
margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0),
color: Colors.amber[900],
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
quote?.text ?? "",
style: TextStyle(
fontSize: 18,
color: Colors.amber[200]
),
),
SizedBox(height: 3,),
Text(
quote?.author ?? "",
style: TextStyle(
fontSize: 18,
color: Colors.amber[200]
),
),
SizedBox(height: 8,),
TextButton.icon(onPressed: (){
delete;
},
icon: Icon(Icons.delete),
label: Text("delete quote"))
],
),
),
);
}
}
class quotes {
String? text;
String? author;
quotes({this.text,this.author});
}
我觉得这个条件不正常
body: Column(
children: q.map((e) => Quotecard(quote: e,
delete: (){
setState(() {
q.remove(e);
});
请大家帮我解决这个问题,我已经尽力了,但 3 天后仍然陷入这个问题。
将 TextButton.icon
的 onPressed
更改为:
onPressed : () => delete(),
delete
后的“()”是执行函数所必需的
我注意到代码中的 delete 缺少 () 两件事,请改用 delete()
TextButton.icon(onPressed: (){
delete;
},
和
setState(() {
q.remove(e);
});
改用这个
q.remove(e);
setState(() {});
回调中
我是这个领域的新手,所以请放轻松。我正在学习 flutter 我在我的应用程序中制作了一张卡片并给它一个删除按钮但该按钮没有删除任何卡片。请帮帮我。 这是我的代码。
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'quotes.dart';
import 'quotes_list.dart';
void main() => runApp(new MaterialApp(
home: Quotelist(),
));
class Quotelist extends StatefulWidget {
Quotelist({Key? key}) : super(key: key);
@override
_QuotelistState createState() => _QuotelistState();
}
class _QuotelistState extends State<Quotelist> {
List<quotes> q = [
quotes(text: "once upon a time", author: "Shayan Ali"),
quotes(text: "once upon a time", author: "Sumair Ali"),
quotes(text: "once upon a time", author: "Umair Ali")
];
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.amber[200],
appBar: AppBar(
title: Text("list"),
centerTitle: true,
backgroundColor: Colors.amber[800],
),
body: Column(
children: q.map((e) => Quotecard(quote: e,
delete: (){
setState(() {
q.remove(e);
});
},
),
).toList(),
),
);
}
}
import 'package:flutter/material.dart';
import 'quotes.dart';
class Quotecard extends StatelessWidget {
final quotes? quote;
final Function? delete;
Quotecard({ this.quote, this.delete });
@override
Widget build(BuildContext context) {
return Card(
margin: EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0),
color: Colors.amber[900],
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
quote?.text ?? "",
style: TextStyle(
fontSize: 18,
color: Colors.amber[200]
),
),
SizedBox(height: 3,),
Text(
quote?.author ?? "",
style: TextStyle(
fontSize: 18,
color: Colors.amber[200]
),
),
SizedBox(height: 8,),
TextButton.icon(onPressed: (){
delete;
},
icon: Icon(Icons.delete),
label: Text("delete quote"))
],
),
),
);
}
}
class quotes {
String? text;
String? author;
quotes({this.text,this.author});
}
我觉得这个条件不正常
body: Column(
children: q.map((e) => Quotecard(quote: e,
delete: (){
setState(() {
q.remove(e);
});
请大家帮我解决这个问题,我已经尽力了,但 3 天后仍然陷入这个问题。
将 TextButton.icon
的 onPressed
更改为:
onPressed : () => delete(),
delete
后的“()”是执行函数所必需的
我注意到代码中的 delete 缺少 () 两件事,请改用 delete()
TextButton.icon(onPressed: (){
delete;
},
和
setState(() {
q.remove(e);
});
改用这个
q.remove(e);
setState(() {});
回调中