{"id":19920609,"url":"https://github.com/bartektartanus/pref_dessert","last_synced_at":"2025-05-03T06:31:05.290Z","repository":{"id":56837170,"uuid":"138402687","full_name":"bartektartanus/pref_dessert","owner":"bartektartanus","description":" Package that allows you persist objects as shared preferences easily.","archived":false,"fork":false,"pushed_at":"2022-02-18T09:04:34.000Z","size":67,"stargazers_count":12,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-07T12:48:32.685Z","etag":null,"topics":["dart","flutter","persisting-objects","sharedpreferences"],"latest_commit_sha":null,"homepage":"https://pub.dartlang.org/packages/pref_dessert","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bartektartanus.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-23T13:19:39.000Z","updated_at":"2021-11-30T21:52:06.000Z","dependencies_parsed_at":"2022-09-10T01:10:36.415Z","dependency_job_id":null,"html_url":"https://github.com/bartektartanus/pref_dessert","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartektartanus%2Fpref_dessert","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartektartanus%2Fpref_dessert/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartektartanus%2Fpref_dessert/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartektartanus%2Fpref_dessert/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bartektartanus","download_url":"https://codeload.github.com/bartektartanus/pref_dessert/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252154737,"owners_count":21702983,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","flutter","persisting-objects","sharedpreferences"],"created_at":"2024-11-12T22:05:14.973Z","updated_at":"2025-05-03T06:31:04.965Z","avatar_url":"https://github.com/bartektartanus.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pref_dessert\n[![pub package](https://img.shields.io/pub/v/pref_dessert.svg)](https://pub.dartlang.org/packages/pref_dessert) [![Build Status](https://travis-ci.org/bartektartanus/pref_dessert.svg?branch=master)](https://travis-ci.org/bartektartanus/pref_dessert) [![codecov](https://codecov.io/gh/bartektartanus/pref_dessert/branch/master/graph/badge.svg)](https://codecov.io/gh/bartektartanus/pref_dessert)\n\nPackage that allows you persist objects as shared preferences easily. Package name comes from: Shared PREFerences DESerializer/SERializer of T (generic) class.\n\n## Getting Started\n\nTo use this package you just need to extend `DesSer\u003cT\u003e` class, replace generic T class with the one you want to save in shared preferences. This class requires you to implement two methods to serialize and deserialize objects. In future releases I'm planning to use JSON serializer so it will be much simpler to use. Then pass this class to `PreferenceRepository` or `FuturePreferencesRepository` and you're good to go!\n\n## Example\n\n`Person` class that you want to serialize:\n```dart\n\nclass Person {\n  String name;\n  int age;\n\n  Person(this.name, this.age);\n}\n\n``` \n\n`PersonDesSer` which extends `DesSer\u003cT\u003e` and implements two methods which serialize this objects using CSV format:\n```dart\n\nclass PersonDesSer extends DesSer\u003cPerson\u003e{\n  @override\n  Person deserialize(String s) {\n    var split = s.split(\",\");\n    return new Person(split[0], int.parse(split[1]));\n  }\n\n  @override\n  String serialize(Person t) {\n    return \"${t.name},${t.age}\";\n  }\n  \n}\n```\n\nYou can also do this using JSON with `convert` package:\n\n```dart\nimport 'dart:convert';\n\nclass JsonPersonDesSer extends DesSer\u003cPerson\u003e{\n  @override\n  Person deserialize(String s) {\n    var map = json.decode(s);\n    return new Person(map['name'] as String, map['age'] as int);\n  }\n\n  @override\n  String serialize(Person t) {\n    var map = {\"name\":t.name, \"age\":t.age};\n    return json.encode(map);\n  }\n\n}\n```\n\nThen create an instance of either class and pass it to the `FuturePreferencesRepository\u003cT\u003e`:\n```dart\nvar repo = new FuturePreferencesRepository\u003cPerson\u003e(new PersonDesSer());\nrepo.save(new Person(\"FooBar\", 42));\nvar list = repo.findAll();\n```\n### Using `json_serializable` package to generate DesSer\n\nStep 1: import library  [json_serializable.](https://pub.dev/packages/json_serializable) in _pubspec.yaml_\n\n```yaml\ndependencies:\n  flutter:\n    sdk: flutter\n  pref_dessert: ^0.4.0+1\n  json_serializable: ^3.2.2\n  json_annotation: ^3.0.0\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n  build_runner: ^1.0.0\n```\n\nStep 2:  Create your class with annotation `@JsonSerializable`\n\n```dart\nimport 'package:pref_dessert/pref_dessert.dart';\nimport 'package:json_annotation/json_annotation.dart';\n\npart 'user.g.dart';\n\n@JsonSerializable()\nclass User {\n  String uid = \"\";\n  String photoUrl = \"\";\n  String displayName = \"\";\n  String email = \"\";\n\n  User({this.uid, this.photoUrl, this.displayName, this.email});\n}\n\nclass UserDesSer extends JsonDesSer\u003cUser\u003e {\n  @override\n  String get key =\u003e \"PREF_USER\";\n\n  @override\n  User fromMap(Map\u003cString, dynamic\u003e map) =\u003e _$UserFromJson(map);\n\n  @override\n  Map\u003cString, dynamic\u003e toMap(User user) =\u003e _$UserToJson(user);\n}\n\n```\n\nStep 3: Run command :  `flutter pub run build_runner build` \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbartektartanus%2Fpref_dessert","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbartektartanus%2Fpref_dessert","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbartektartanus%2Fpref_dessert/lists"}