我正在构建一个具有本地数据库的应用程序,并且我在该数据库中保留了一些关于电影的信息。有一个名为“收藏夹”的屏幕,我从本地数据库中获取电影并将它们放在列表视图中:
如果我单击该列表中的任何电影,我将被定向到一个新屏幕,在那里我可以查看电影详细信息。在这个屏幕上,有一个按钮可以从本地数据库中删除电影。
现在我的问题从这里开始:从数据库中删除任何电影并返回“收藏夹”屏幕后,我仍然在 ListView 中看到那部电影。但是我已经从数据库中删除了那部电影。如果我在 Android 平台上这样做,我会覆盖 onStart 方法并对数据库进行查询,然后更新列表视图。但据我所知,在 Flutter 中,没有像 onStart 这样的方法。所以我该怎么做?
class FavoritesScreen extends StatefulWidget {
@override
_FavoritesScreenState createState() => _FavoritesScreenState();
}
class _FavoritesScreenState extends State<FavoritesScreen> {
var favoriteMovieDatabase = FavoriteMovieDatabase();
List<MovieOverview> movieOverviewList = List<MovieOverview>();
@override
void initState() {
super.initState();
favoriteMovieDatabase
.getAllFavoriteMovies()
.then((List<MovieOverview> list) {
setState(() {
movieOverviewList = list;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Favorites")),
body: MovieOverviewListView(movieOverviewList, "FAVORITE")
);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我曾尝试使用 WidgetsBindingObserver 但它没有帮助。
@override
void didChangeAppLifecycleState(AppLifecycleState state) { …Run Code Online (Sandbox Code Playgroud) 我试图通过在彼此之间使用偶数空格将元素放在红色框中的问题的屏幕截图.(就像给每个人增加重量1).为此,我将"mainAxisAlignment:MainAxisAlignment.spaceEvenly"放在父列中,但它不起作用.
Container(
margin: EdgeInsets.only(bottom: 8.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
CachedNetworkImage(
imageUrl:
"https://image.tmdb.org/t/p/w500/${movieDetails
.posterPath}",
height: 120.0,
fit: BoxFit.fill),
Expanded(
child: Container(
margin: EdgeInsets.only(left: 8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, //NOT WORKING!
children: <Widget>[
generateRow(
Strings.released, movieDetails.releaseDate),
generateRow(Strings.runtime,
movieDetails.runtime.toString()),
generateRow(Strings.budget,
movieDetails.budget.toString())
],
)))
],
)),
Run Code Online (Sandbox Code Playgroud)
这是电影图像和红框的代码.我创建了一个包含2个元素的Row.第一个是图像,第二个是红色框.
Row generateRow(String key, String value) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[Text(key), Text(value)],
); }
Run Code Online (Sandbox Code Playgroud)
我的generateRow方法
我怎么解决这个问题?