Square every corner, enlarge the main surfaces and add a to-do list

Rounded rectangles and round controls are now square across the app; only
status dots, glows, the sun, rings and the breathing circle stay round.
Cards, rows, thumbnails, featured cards, category tiles, the standing card
and the nav are larger. Home gets a quick To-do list kept on the device
(TodoItem in InternalMemory), seeded with sample items in mock mode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KhQh614DMeYoQEH9SoMRUw
This commit is contained in:
alvocool
2026-11-02 14:50:31 +03:00
parent 36bc41509d
commit 9c858b8146
38 changed files with 478 additions and 186 deletions

View File

@@ -8,6 +8,7 @@ import '../about/external/data/ResponseState.dart';
import '../about/external/data/SystemResponse.dart';
import '../about/internal/application/CapacityProfile.dart';
import '../about/internal/application/MeDescription.dart';
import '../about/internal/application/TodoItem.dart';
import '../about/internal/application/Token.dart';
import '../about/internal/application/UserDetails.dart';
import 'ConnectInternalMemory.dart';
@@ -40,6 +41,8 @@ class InternalMemory implements ConnectInternalMemory {
static const String AMNESTY_SPENT = "AMNESTY_SPENT_Jr4xVh9KmT3gLc6B";
static const String TODOS = "TODOS_Wm3kRb8TqZ5nHc2F";
static const String SHOW_ONBOARDING = "SHOW_ONBOARDING_Nz6qGf2SdX7wPb4M";
final groundedStorage = const FlutterSecureStorage();
@@ -252,6 +255,26 @@ class InternalMemory implements ConnectInternalMemory {
await groundedStorage.write(key: AMNESTY_SPENT, value: spent.toString());
}
@override
Future<List<TodoItem>> getTodos() async {
String? value = await groundedStorage.read(key: TODOS);
if (value != null) {
return (jsonDecode(value) as List<dynamic>)
.map((item) => TodoItem.fromJson(item as Map<String, dynamic>))
.toList();
}
return <TodoItem>[];
}
@override
Future setTodos(List<TodoItem> todos) async {
await groundedStorage.write(
key: TODOS,
value: jsonEncode(todos.map((item) => item.toJson()).toList()));
}
@override
Future<bool> showOnboarding() async {
String? value = await groundedStorage.read(key: SHOW_ONBOARDING);