首页 > 解决方案 > 使用 Navigator 重新加载 bool

问题描述

当我返回主屏幕时,我想重新加载我的布尔值Navigator()。布尔值是该项目是否在收藏夹中。实际上,当我点击一个收藏按钮,然后我进入收藏页面,我将这个项目删除到这个列表中,然后我回到我的主页,变化是不可见的。我如何通过导航器重新加载它?这是我的代码:

主页.dart

import 'package:flutter/material.dart';
import 'package:my_app_from_scratch/data.dart';
import 'package:my_app_from_scratch/favorite.dart';

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class Item {
  final String title;
  final String description;
  final String imageURL;
  final int countdown;
  final int id;

  Item({this.title, this.description, this.imageURL, this.countdown, this.id});
}

class _HomeState extends State<Home> {
  List<Item> savedItems = new List<Item>();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Home'),
          actions: [
            IconButton(
                icon: Icon(Icons.favorite_border),
                onPressed: () => pushToFavorite(context))
          ],
        ),
        body: ListView.builder(
            itemCount: itemData.length,
            itemBuilder: (context, index) {
              bool isSaved = savedItems.contains(itemData[index]);
              return Row(
                children: [
                  Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text(
                          itemData[index].title,
                          style: TextStyle(
                              fontSize: 22, fontWeight: FontWeight.bold),
                        ),
                      ),
                      Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Text(itemData[index].description),
                      ),
                    ],
                  ),
                  Spacer(),
                  Padding(
                    padding: const EdgeInsets.all(12.0),
                    child: GestureDetector(
                      child: Icon(
                        isSaved ? Icons.favorite : Icons.favorite_border,
                        color: isSaved ? Colors.red : null,
                      ),
                      onTap: () {
                        setState(() {
                          if (isSaved) {
                            savedItems.remove(itemData[index]);
                          } else {
                            savedItems.add(itemData[index]);
                          }
                        });
                      },
                    ),
                  ),
                ],
              );
            }));
  }

  Future pushToFavorite(BuildContext context) {
    return Navigator.of(context).push(MaterialPageRoute(
        builder: (context) => Favorite(favoriteItem: savedItems)));
  }
}

最喜欢的.dart

import 'package:flutter/material.dart';
import 'package:my_app_from_scratch/home.dart';

class Favorite extends StatefulWidget {
  final List<Item> favoriteItem;

  const Favorite({Key key, @required this.favoriteItem}) : super(key: key);

  @override
  _FavoriteState createState() => _FavoriteState();
}

class _FavoriteState extends State<Favorite> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Favourite'),
        leading: IconButton(
          onPressed: Back,
          icon: Icon(Icons.arrow_back),
        ),
      ),
      body: widget.favoriteItem.length > 0
          ? ListView.builder(
              itemCount: widget.favoriteItem.length,
              itemBuilder: (context, index) {
                bool isSaved =
                    widget.favoriteItem.contains(widget.favoriteItem[index]);
                return Row(
                  children: [
                    Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Text(
                            widget.favoriteItem[index].title,
                            style: TextStyle(
                                fontSize: 22, fontWeight: FontWeight.bold),
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Text(widget.favoriteItem[index].description),
                        ),
                      ],
                    ),
                    Spacer(),
                    Padding(
                      padding: const EdgeInsets.all(12.0),
                      child: GestureDetector(
                        child: Icon(
                          isSaved ? Icons.favorite : Icons.favorite_border,
                          color: isSaved ? Colors.red : null,
                        ),
                        onTap: () {
                          setState(() {
                            if (isSaved) {
                              widget.favoriteItem
                                  .remove(widget.favoriteItem[index]);
                            } else {
                              widget.favoriteItem
                                  .add(widget.favoriteItem[index]);
                            }
                          });
                        },
                      ),
                    ),
                  ],
                );
              })
          : Center(
              child: Text('Il n\'y a rien'),
            ),
    );
  }

  void Back() {
    Navigator.pop(
      context,
      setState(() {})
    );
  }
}

我是初学者,请帮助我,谢谢!

标签: flutterdartnavigator

解决方案


class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
final bool isFavorite;
Home({isFavorite = false});
}...

class _HomeState extends State<Home> {
  List<Item> savedItems = new List<Item>();
final bool isFavorite;
HomeState({isFavorite});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(...

当您导航到主屏幕时,如果它最喜欢,则将 isFavorite 传递为 true。


推荐阅读