Refine backendless share intake
This commit is contained in:
@@ -3,14 +3,9 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:relationship_saver/app/navigation/app_destination.dart';
|
||||
import 'package:relationship_saver/core/config/app_theme.dart';
|
||||
import 'package:relationship_saver/features/ai_digest/presentation/ai_digest_review_view.dart';
|
||||
import 'package:relationship_saver/features/dashboard/presentation/dashboard_view.dart';
|
||||
import 'package:relationship_saver/features/ideas/presentation/ideas_view.dart';
|
||||
import 'package:relationship_saver/features/moments/presentation/moments_view.dart';
|
||||
import 'package:relationship_saver/features/people/presentation/people_view.dart';
|
||||
import 'package:relationship_saver/features/reminders/presentation/reminders_view.dart';
|
||||
import 'package:relationship_saver/features/settings/presentation/settings_view.dart';
|
||||
import 'package:relationship_saver/features/signals/presentation/signals_view.dart';
|
||||
import 'package:relationship_saver/features/sync/presentation/sync_view.dart';
|
||||
import 'package:relationship_saver/features/share_intake/presentation/share_inbox_view.dart';
|
||||
|
||||
/// Responsive shell that hosts the main feature slices.
|
||||
class AppShell extends ConsumerStatefulWidget {
|
||||
@@ -21,16 +16,11 @@ class AppShell extends ConsumerStatefulWidget {
|
||||
}
|
||||
|
||||
class _AppShellState extends ConsumerState<AppShell> {
|
||||
AppDestination _destination = AppDestination.dashboard;
|
||||
AppDestination _destination = AppDestination.shareInbox;
|
||||
|
||||
static const List<AppDestination> _destinations = AppDestination.values;
|
||||
static const List<AppDestination> _compactPrimaryDestinations =
|
||||
<AppDestination>[
|
||||
AppDestination.dashboard,
|
||||
AppDestination.people,
|
||||
AppDestination.moments,
|
||||
AppDestination.signals,
|
||||
];
|
||||
AppDestination.values;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -65,6 +55,7 @@ class _AppShellState extends ConsumerState<AppShell> {
|
||||
Expanded(
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 250),
|
||||
layoutBuilder: _expandedSwitcherLayout,
|
||||
child: KeyedSubtree(
|
||||
key: ValueKey<AppDestination>(_destination),
|
||||
child: _screenFor(_destination),
|
||||
@@ -84,31 +75,10 @@ class _AppShellState extends ConsumerState<AppShell> {
|
||||
final int compactIndex = _compactSelectedIndex(_destination);
|
||||
final AppDestination active = _compactPrimaryDestinations[compactIndex];
|
||||
return _CompactShell(
|
||||
title: active.label,
|
||||
selected: active,
|
||||
body: _screenFor(active),
|
||||
destinations: _compactPrimaryDestinations,
|
||||
onChange: _selectDestination,
|
||||
onOpenSecondary: (CompactSecondaryDestination destination) {
|
||||
final AppDestination screenDestination = switch (destination) {
|
||||
CompactSecondaryDestination.ideas => AppDestination.ideas,
|
||||
CompactSecondaryDestination.aiReview => AppDestination.aiReview,
|
||||
CompactSecondaryDestination.reminders => AppDestination.reminders,
|
||||
CompactSecondaryDestination.sync => AppDestination.sync,
|
||||
CompactSecondaryDestination.settings => AppDestination.settings,
|
||||
};
|
||||
|
||||
Navigator.of(context).push<void>(
|
||||
MaterialPageRoute<void>(
|
||||
builder: (BuildContext context) {
|
||||
return _CompactSecondaryScreen(
|
||||
title: screenDestination.label,
|
||||
child: _screenFor(screenDestination),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -129,22 +99,12 @@ class _AppShellState extends ConsumerState<AppShell> {
|
||||
|
||||
Widget _screenFor(AppDestination destination) {
|
||||
switch (destination) {
|
||||
case AppDestination.dashboard:
|
||||
return const DashboardView();
|
||||
case AppDestination.shareInbox:
|
||||
return const ShareInboxView();
|
||||
case AppDestination.people:
|
||||
return const PeopleView();
|
||||
case AppDestination.moments:
|
||||
return const MomentsView();
|
||||
case AppDestination.signals:
|
||||
return const SignalsView();
|
||||
case AppDestination.aiReview:
|
||||
return const AiDigestReviewView();
|
||||
case AppDestination.ideas:
|
||||
return const IdeasView();
|
||||
case AppDestination.reminders:
|
||||
return const RemindersView();
|
||||
case AppDestination.sync:
|
||||
return const SyncView();
|
||||
case AppDestination.settings:
|
||||
return const SettingsView();
|
||||
}
|
||||
@@ -255,7 +215,7 @@ class _Sidebar extends StatelessWidget {
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
),
|
||||
child: Text(
|
||||
'Tip: Use Signals daily and convert at least one into a concrete plan.',
|
||||
'Share messages or paste text into Capture. Nothing is assigned until you choose a person.',
|
||||
style: Theme.of(
|
||||
context,
|
||||
).textTheme.bodyMedium?.copyWith(color: AppTheme.textSecondary),
|
||||
@@ -269,69 +229,25 @@ class _Sidebar extends StatelessWidget {
|
||||
|
||||
class _CompactShell extends StatelessWidget {
|
||||
const _CompactShell({
|
||||
required this.title,
|
||||
required this.selected,
|
||||
required this.body,
|
||||
required this.destinations,
|
||||
required this.onChange,
|
||||
required this.onOpenSecondary,
|
||||
});
|
||||
|
||||
final String title;
|
||||
final AppDestination selected;
|
||||
final Widget body;
|
||||
final List<AppDestination> destinations;
|
||||
final ValueChanged<AppDestination> onChange;
|
||||
final ValueChanged<CompactSecondaryDestination> onOpenSecondary;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: <Widget>[
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 12, 16, 4),
|
||||
child: Row(
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: Text(
|
||||
title,
|
||||
style: Theme.of(context).textTheme.titleLarge,
|
||||
),
|
||||
),
|
||||
PopupMenuButton<CompactSecondaryDestination>(
|
||||
tooltip: 'More',
|
||||
icon: const Icon(Icons.more_horiz_rounded),
|
||||
onSelected: onOpenSecondary,
|
||||
itemBuilder: (BuildContext context) =>
|
||||
<PopupMenuEntry<CompactSecondaryDestination>>[
|
||||
const PopupMenuItem<CompactSecondaryDestination>(
|
||||
value: CompactSecondaryDestination.aiReview,
|
||||
child: Text('AI Review'),
|
||||
),
|
||||
const PopupMenuItem<CompactSecondaryDestination>(
|
||||
value: CompactSecondaryDestination.ideas,
|
||||
child: Text('Ideas'),
|
||||
),
|
||||
const PopupMenuItem<CompactSecondaryDestination>(
|
||||
value: CompactSecondaryDestination.reminders,
|
||||
child: Text('Reminders'),
|
||||
),
|
||||
const PopupMenuItem<CompactSecondaryDestination>(
|
||||
value: CompactSecondaryDestination.sync,
|
||||
child: Text('Sync'),
|
||||
),
|
||||
const PopupMenuItem<CompactSecondaryDestination>(
|
||||
value: CompactSecondaryDestination.settings,
|
||||
child: Text('Settings'),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 220),
|
||||
layoutBuilder: _expandedSwitcherLayout,
|
||||
child: KeyedSubtree(
|
||||
key: ValueKey<AppDestination>(selected),
|
||||
child: body,
|
||||
@@ -355,27 +271,12 @@ class _CompactShell extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class _CompactSecondaryScreen extends StatelessWidget {
|
||||
const _CompactSecondaryScreen({required this.title, required this.child});
|
||||
|
||||
final String title;
|
||||
final Widget child;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DecoratedBox(
|
||||
decoration: const BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
colors: <Color>[Color(0xFFF3F8FB), Color(0xFFEAF1F8)],
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
),
|
||||
),
|
||||
child: Scaffold(
|
||||
backgroundColor: Colors.transparent,
|
||||
appBar: AppBar(title: Text(title)),
|
||||
body: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
Widget _expandedSwitcherLayout(
|
||||
Widget? currentChild,
|
||||
List<Widget> previousChildren,
|
||||
) {
|
||||
return Stack(
|
||||
fit: StackFit.expand,
|
||||
children: <Widget>[...previousChildren, ?currentChild],
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user