Flutter 如何从类B调用类A的setState()
当我点击Flutter 如何从类B调用类A的setState(),flutter,dart,Flutter,Dart,当我点击IconButton()删除列表中的所有项目movies时,在重新打开页面之前,我看不到该更改 有人知道我该怎么修理吗 这是我的个人信息((“B类”): class InfoPage扩展StatefulWidget{ int-id; int pageId; InfoPage(this.id,this.pageId); @凌驾 _InfoPageState createState()=>\u InfoPageState(id,pageId); } 类_InfoPageState扩展了状态{
IconButton()
删除列表中的所有项目movies
时,在重新打开页面之前,我看不到该更改
有人知道我该怎么修理吗
这是我的个人信息((“B类”):
class InfoPage扩展StatefulWidget{
int-id;
int pageId;
InfoPage(this.id,this.pageId);
@凌驾
_InfoPageState createState()=>\u InfoPageState(id,pageId);
}
类_InfoPageState扩展了状态{
var db=DatabaseHelper();
字符串标题=”;
字符串about=“”;
字符串速率=”;
字符串日期=”;
int-id;
int pageId;
_InfoPageState(this.id,this.pageId);
@凌驾
void initState(){
super.initState();
如果(pageId==1){
_getMovie();
}
}
void\u getMovie()异步{
Movie thismoine=wait db.getMovie(id);
设置状态(){
title=thismoine.name;
关于=此电影。描述;
rate=thismoine.rate;
日期=thismoine.date;
});
}
_deleteMovie()异步{
等待db.deleteMovie(id);
Navigator.pop(上下文);
设置状态(){
CardsListViewState(pageId).deleteAllList();
});
}
@凌驾
小部件构建(构建上下文){
canPop(上下文);
返回脚手架(
主体:容器(
子:列(
儿童:[
容器(
页边距:仅限边集(底部:10),
孩子:排(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
扩大(
子级:容器(),
),
容器(
页边距:仅限边集(右:10),
孩子:我的钮扣(
图标:图标(图标.删除,颜色:颜色(0xffFC4D4D)),
已按下:(){
_删除电影();
}
)
)
],
),
)
],
),
),
);
}
}
这是我的CardsListView((“A类”))
class CardsListView扩展StatefulWidget{
从何而来;
CardsListView(本文件来源);
@凌驾
CardsListViewState createState()=>CardsListViewState(来自何处);
}
类CardsListViewState扩展了状态{
从何而来;
CardsListViewState(本文件来源);
var db=DatabaseHelper();
列表mainList=[];
最终电影列表=[];
deleteAllList()异步{
等待db.deleteMovies();
设置状态(){
电影;
});
}
@凌驾
void initState(){
super.initState();
_readUnites();
if(whereComeFrom==1){
mainList=电影;
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:
GridView.count(
交叉轴计数:3,
AddAutomaticEpaLifes:没错,
儿童方面:(1/1.5),
子项:List.generate(mainList.length,(索引){
返回CardUnite(mainList[index].name,mainList[index].id,whereComeFrom);
})
),
);
}
您可以使用提供给子类的父类的回调函数。记住,函数在Dart中。
只需将一个调用SETSATE的函数传递给该子并调用该函数。上面提供的代码是不完整的,这会使您感到困惑。您能提供完整的可运行性吗?还是考虑提供者类,它是相当轻量级的,甚至是由谷歌推荐的。
class InfoPage extends StatefulWidget {
int id;
int pageId;
InfoPage(this.id,this.pageId);
@override
_InfoPageState createState() => _InfoPageState(id,pageId);
}
class _InfoPageState extends State<InfoPage> {
var db = DatabaseHelper();
String title = "";
String about = "";
String rate = "";
String date = "";
int id;
int pageId;
_InfoPageState(this.id,this.pageId);
@override
void initState() {
super.initState();
if(pageId == 1){
_getMovie();
}
}
void _getMovie() async {
Movie thisMovie = await db.getMovie(id);
setState(() {
title = thisMovie.name;
about = thisMovie.description;
rate = thisMovie.rate;
date = thisMovie.date;
});
}
_deleteMovie() async{
await db.deleteMovie(id);
Navigator.pop(context);
setState(() {
CardsListViewState(pageId).deleteAllList();
});
}
@override
Widget build(BuildContext context) {
Navigator.canPop(context);
return Scaffold(
body: Container(
child: Column(
children: <Widget>[
Container(
margin: EdgeInsets.only(bottom: 10),
child:Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: Container(),
),
Container(
margin: EdgeInsets.only(right: 10),
child: IconButton(
icon: Icon(Icons.delete,color: Color(0xffFC4D4D),),
onPressed: (){
_deleteMovie();
}
)
)
],
),
)
],
),
),
);
}
}
class CardsListView extends StatefulWidget {
int whereComeFrom;
CardsListView(this.whereComeFrom);
@override
CardsListViewState createState() => CardsListViewState(whereComeFrom);
}
class CardsListViewState extends State<CardsListView> {
int whereComeFrom;
CardsListViewState(this.whereComeFrom);
var db = DatabaseHelper();
List mainList = [];
final List<Movie> movies = <Movie>[];
deleteAllList() async{
await db.deleteMovies();
setState(() {
movies.clear();
});
}
@override
void initState() {
super.initState();
_readUnites();
if(whereComeFrom == 1){
mainList = movies;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body:
GridView.count(
crossAxisCount: 3,
addAutomaticKeepAlives: true,
childAspectRatio: (1/1.5),
children: List.generate(mainList.length, (index){
return CardUnite(mainList[index].name,mainList[index].id,whereComeFrom);
})
),
);
}