···40404141- Render feed from cache if it goes down (> 500 error)
42424343+---
4444+4545+- Sidebar profile link should open account switcher, not go to profile. Long press to go to profile.
4646+4347## Privacy Policy
44484549- Should mention that Lazurite is an AppView that doesn't store any user data.
+26-1
lib/core/database/app_database.dart
···2525 static const activeAccountDidSettingKey = 'active_account_did';
26262727 @override
2828- int get schemaVersion => 13;
2828+ int get schemaVersion => 14;
29293030 @override
3131 MigrationStrategy get migration => MigrationStrategy(
···7575 }
7676 if (from < 13) {
7777 await customStatement("DELETE FROM settings WHERE key = 'ui_density'");
7878+ }
7979+ if (from < 14) {
8080+ await customStatement('''
8181+ INSERT OR IGNORE INTO settings (key, value, updated_at)
8282+ SELECT
8383+ 'feed_layout',
8484+ CASE value
8585+ WHEN 'grid' THEN 'card'
8686+ WHEN 'linear' THEN 'compact'
8787+ ELSE value
8888+ END,
8989+ updated_at
9090+ FROM settings
9191+ WHERE key = 'feed_architecture'
9292+ ''');
9393+ await customStatement('''
9494+ UPDATE settings
9595+ SET value = CASE value
9696+ WHEN 'grid' THEN 'card'
9797+ WHEN 'linear' THEN 'compact'
9898+ ELSE value
9999+ END
100100+ WHERE key = 'feed_layout'
101101+ ''');
102102+ await customStatement("DELETE FROM settings WHERE key = 'feed_architecture'");
78103 }
79104 },
80105 );
···11import 'package:flutter/material.dart';
22import 'package:flutter_bloc/flutter_bloc.dart';
33-import 'package:lazurite/core/theme/feed_architecture.dart';
33+import 'package:lazurite/core/theme/feed_layout.dart';
44import 'package:lazurite/features/feed/presentation/home_feed_screen.dart';
55import 'package:lazurite/features/settings/bloc/settings_cubit.dart';
66import 'package:lazurite/features/settings/bloc/settings_state.dart';
···99const double _gridCardChromeHeight = 160;
10101111/// Renders a scrollable list of items in either a responsive [SliverGrid]
1212-/// (grid architecture) or a padded [ListView] (linear architecture), driven
1313-/// by [SettingsCubit.feedArchitecture].
1212+/// (card layout) or a padded [ListView] (compact layout), driven
1313+/// by [SettingsCubit.feedLayout].
1414///
1515-/// [gridItemBuilder] is used when the grid architecture is active.
1616-/// [linearItemBuilder] is used when the linear architecture is active.
1515+/// [gridItemBuilder] is used when the card layout is active.
1616+/// [linearItemBuilder] is used when the compact layout is active.
1717/// This allows the caller to render the appropriate card variant for each mode.
1818class FeedLayoutView extends StatelessWidget {
1919 const FeedLayoutView({
···3636 @override
3737 Widget build(BuildContext context) {
3838 return BlocBuilder<SettingsCubit, SettingsState>(
3939- buildWhen: (prev, curr) => prev.feedArchitecture != curr.feedArchitecture,
3939+ buildWhen: (prev, curr) => prev.feedLayout != curr.feedLayout,
4040 builder: (context, settingsState) {
4141- if (settingsState.feedArchitecture == FeedArchitecture.grid) {
4141+ if (settingsState.feedLayout == FeedLayout.card) {
4242 return _buildGrid(context);
4343 }
4444 return _buildLinear(context);