如何在抖动中管理像按钮一样的图像

时间:2019-04-19 18:08:21

标签: dart flutter facebook-like

我为图像设置了一个图标按钮,以使用户可以选择喜欢的图像,但是当我转到另一页面或重新打开应用程序时,喜欢的照片再次被取消喜欢。如何确保喜欢的照片当我重新打开它时仍然喜欢吗?

P.S。-我可以在新屏幕上显示所有我喜欢的照片吗?

class FavoriteWidget extends StatefulWidget {
  @override
  _FavoriteWidgetState createState() => _FavoriteWidgetState();
}

class _FavoriteWidgetState extends State<FavoriteWidget> {
  bool liked = false;

  _pressed() {
    setState(() {
      liked = !liked;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisSize: MainAxisSize.min,
      children: [
        Container(
          child: IconButton(
              icon: Icon(liked ?Icons.favorite: Icons.favorite_border,
              color: liked ? Colors.red :Colors.grey ),
              onPressed: () => _pressed(),
              ),

        ),

      ],
    );
  }
}

除非我不喜欢它,否则即使关闭应用程序或转到其他屏幕后,我还是会永久喜欢这张照片。

1 个答案:

答案 0 :(得分:1)

让您的应用记住任何取决于2个主要因素的数据:

1-您的数据容器(变量,数据库等)的生存期

2-您要在其中使用数据(类,页面,应用程序)的范围

根据我对您的问题的理解。您希望您的应用在关闭/重新打开按钮后记住其状态。

通常,Dart中使用的大多数数据变量都存储在移动易失性存储器(RAM)中。这使得它们在关闭您的应用程序后立即被操作系统清除。这样可以帮助其他正在运行的Apps查找要使用的内存空间。

因此,将按钮的状态存储在常用变量(如bool)中对您没有帮助。

要解决您的问题,您有2种非易失性数据存储方法:

1-使用SQLite数据库将用按钮键引用的按钮状态存储为primary key。 (SQLite将数据存储在App包内的DB永久文件中)。 Read from here

2-最简单,最快的方法:使用sharedPreferences将每个Button键引用的Button状态存储为`sharedPreferences Read from here

中的键值对。

希望我能帮助您