| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import 'package:flutter/material.dart';
- import 'package:image_puzzle/models/api_helper.dart';
- import 'package:image_puzzle/models/cached_request.dart';
- import 'package:image_puzzle/models/items.dart';
- import 'package:image_puzzle/persistence/persistence.dart';
- import 'package:logging/logging.dart';
- final Logger _log = Logger('data.dart');
- class Data {
- final Persistence _persistence;
- ValueNotifier<List<Work>> completedWorks = ValueNotifier([]); // 已完成的图
- ValueNotifier<List<Work>> completedCollections = ValueNotifier([]); // 已完成的收藏图
- Data({required Persistence persistence}) : _persistence = persistence;
- Future<void> loadDataFromPersistence() async {
- completedWorks.value = _persistence.completedWorks;
- completedCollections.value = _persistence.completedCollections;
- }
- // 完成某个作品调用此接口记录到存储中
- // !!! 改造点:接受 ListItem 和可选的耗时
- void workDone(ListItem item, {Duration? timeSpent}) {
- final newWork = Work.fromListItem(item, timeSpent: timeSpent);
- final updatedWorks = [...completedWorks.value, newWork];
- completedWorks.value = updatedWorks;
- _persistence.completedWorks = updatedWorks; // 存储更新后的列表
- }
- // 获取当前的关卡index (基于已完成作品的数量)
- int get currentLevel => completedWorks.value.length;
- // 完成某个collection
- // !!! 改造点:接受 CollectionItem
- void collectionDone(ListItem item) {
- final newCollection = Work.fromListItem(item);
- final updatedCollections = [...completedCollections.value, newCollection];
- completedCollections.value = updatedCollections;
- _persistence.completedCollections = updatedCollections; // 存储更新后的列表
- }
- // 获取当前的合集index (基于已完成收藏的数量)
- int get currentCollectionIndex => completedCollections.value.length;
- CachedRequest? _latest;
- CachedRequest get latest {
- _latest ??= CachedRequest.fromUrl(
- ApiHelper.latestUri,
- transformFunction: (json) async {
- late List<ListItem> list;
- if (json['asset'] != null) {
- // from asset
- list = List<AssetItem>.from((json['data'] as Iterable).map((e) => AssetItem.fromJSON(e)));
- } else {
- // from remote
- list = List<RemoteItem>.from((json['data'] as Iterable).map((e) => RemoteItem.fromJSON(e)));
- }
- return list;
- },
- );
- return _latest!;
- }
- CachedRequest? _collection;
- CachedRequest get collection {
- _collection ??= CachedRequest.fromUrl(
- ApiHelper.collectionUri,
- transformFunction: (json) async {
- late List<ListItem> list;
- if (json['asset'] != null) {
- // from asset
- list = List<AssetItem>.from((json['data'] as Iterable).map((e) => AssetItem.fromJSON(e)));
- } else {
- // from remote
- list = List<RemoteItem>.from((json['data'] as Iterable).map((e) => RemoteItem.fromJSON(e)));
- }
- return list;
- },
- );
- return _collection!;
- }
- }
|