Skip to content

Instantly share code, notes, and snippets.

@easylive1989
Created September 22, 2023 13:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save easylive1989/2d7090a0e4f52971559d60c906634a96 to your computer and use it in GitHub Desktop.
Save easylive1989/2d7090a0e4f52971559d60c906634a96 to your computer and use it in GitHub Desktop.
2023鐵人賽_D8_2
import 'package:shared_preferences/shared_preferences.dart';
import 'product.dart';
class MyFavorites {
final SharedPreferences _preferences;
MyFavorites(SharedPreferences preference) : _preferences = preference;
Future<void> add(Product product) async {
var favorites = getAll();
favorites.add(product);
await _preferences.setStringList("favorites",
favorites.map((product) => product.id.toString()).toList());
}
List<Product> getAll() {
return _preferences
.getStringList("favorites")
?.map((id) => Product(int.parse(id)))
.toList() ??
[];
}
}
import 'package:flutter_test/flutter_test.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'product.dart';
import 'my_favorites.dart';
main() {
test("add favorite", () {
var fakeSharedPreferences = FakeSharedPreferences();
var myFavorites = MyFavorites(fakeSharedPreferences);
myFavorites.add(const Product(1));
expect(myFavorites.getAll(), [const Product(1)]);
});
}
class FakeSharedPreferences implements SharedPreferences {
List<String> fake = [];
@override
Future<bool> setStringList(String key, List<String> value) async {
fake = value;
return true;
}
@override
List<String>? getStringList(String key) {
return fake;
}
@override
dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
import 'package:equatable/equatable.dart';
class Product extends Equatable {
final int id;
const Product(this.id);
@override
List<Object?> get props => [id];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment