kopia lustrzana https://gitlab.com/mysocialportal/relatica
Breakup timeline selection into Circles, Groups, and Channels
rodzic
37d3b1a125
commit
c8eea6cdae
|
@ -599,7 +599,7 @@ class _EditorScreenState extends State<EditorScreen> {
|
||||||
final circles = context
|
final circles = context
|
||||||
.watch<ActiveProfileSelector<TimelineManager>>()
|
.watch<ActiveProfileSelector<TimelineManager>>()
|
||||||
.activeEntry
|
.activeEntry
|
||||||
.andThen((tm) => tm.getCircles())
|
.andThen((tm) => tm.getTimelineGroupingListData(GroupingType.circle))
|
||||||
.getValueOrElse(() => []);
|
.getValueOrElse(() => []);
|
||||||
circles.sort((g1, g2) => g1.name.compareTo(g2.name));
|
circles.sort((g1, g2) => g1.name.compareTo(g2.name));
|
||||||
|
|
||||||
|
|
|
@ -3,17 +3,18 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:relatica/controls/focus_mode_status_headline.dart';
|
|
||||||
import 'package:relatica/riverpod_controllers/focus_mode.dart';
|
|
||||||
|
|
||||||
import '../controls/app_bottom_nav_bar.dart';
|
import '../controls/app_bottom_nav_bar.dart';
|
||||||
|
import '../controls/focus_mode_status_headline.dart';
|
||||||
import '../controls/linear_status_indicator.dart';
|
import '../controls/linear_status_indicator.dart';
|
||||||
import '../controls/login_aware_cached_network_image.dart';
|
import '../controls/login_aware_cached_network_image.dart';
|
||||||
import '../controls/responsive_max_width.dart';
|
import '../controls/responsive_max_width.dart';
|
||||||
import '../controls/standard_app_drawer.dart';
|
import '../controls/standard_app_drawer.dart';
|
||||||
import '../controls/timeline/timeline_panel.dart';
|
import '../controls/timeline/timeline_panel.dart';
|
||||||
import '../globals.dart';
|
import '../globals.dart';
|
||||||
|
import '../models/timeline_grouping_list_data.dart';
|
||||||
import '../models/timeline_identifiers.dart';
|
import '../models/timeline_identifiers.dart';
|
||||||
|
import '../riverpod_controllers/focus_mode.dart';
|
||||||
import '../services/auth_service.dart';
|
import '../services/auth_service.dart';
|
||||||
import '../services/network_status_service.dart';
|
import '../services/network_status_service.dart';
|
||||||
import '../services/timeline_manager.dart';
|
import '../services/timeline_manager.dart';
|
||||||
|
@ -114,9 +115,24 @@ class _HomeScreenState extends ConsumerState<HomeScreen> {
|
||||||
.activeEntry
|
.activeEntry
|
||||||
.value;
|
.value;
|
||||||
|
|
||||||
final circles = manager.getCircles().getValueOrElse(() => []).toList();
|
final circles = manager
|
||||||
|
.getTimelineGroupingListData(GroupingType.circle)
|
||||||
|
.getValueOrElse(() => [])
|
||||||
|
.toList();
|
||||||
circles.sort((g1, g2) => g1.name.compareTo(g2.name));
|
circles.sort((g1, g2) => g1.name.compareTo(g2.name));
|
||||||
|
|
||||||
|
final groups = manager
|
||||||
|
.getTimelineGroupingListData(GroupingType.group)
|
||||||
|
.getValueOrElse(() => [])
|
||||||
|
.toList();
|
||||||
|
groups.sort((g1, g2) => g1.name.compareTo(g2.name));
|
||||||
|
|
||||||
|
final channels = manager
|
||||||
|
.getTimelineGroupingListData(GroupingType.channel)
|
||||||
|
.getValueOrElse(() => [])
|
||||||
|
.toList();
|
||||||
|
channels.sort((g1, g2) => g1.name.compareTo(g2.name));
|
||||||
|
|
||||||
final items = [
|
final items = [
|
||||||
...standardTypes
|
...standardTypes
|
||||||
.map((t) => TimelineIdentifiers(timeline: t))
|
.map((t) => TimelineIdentifiers(timeline: t))
|
||||||
|
@ -137,17 +153,41 @@ class _HomeScreenState extends ConsumerState<HomeScreen> {
|
||||||
decoration: TextDecoration.underline,
|
decoration: TextDecoration.underline,
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
...circles
|
..._timelineGroupingListDataCollectionToDropdown(circles),
|
||||||
.map((c) => TimelineIdentifiers(
|
const DropdownMenuItem(
|
||||||
timeline: TimelineType.circle,
|
value: null,
|
||||||
auxData: c.id,
|
enabled: false,
|
||||||
label: '${c.name} - ${c.groupingType.name}'))
|
child: Divider(),
|
||||||
.map((e) => DropdownMenuItem(
|
),
|
||||||
value: e,
|
const DropdownMenuItem(
|
||||||
child: Text(
|
value: null,
|
||||||
e.toLabel(),
|
enabled: false,
|
||||||
overflow: TextOverflow.fade,
|
child: Text(
|
||||||
))),
|
'Groups',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontStyle: FontStyle.italic,
|
||||||
|
decoration: TextDecoration.underline,
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
..._timelineGroupingListDataCollectionToDropdown(groups),
|
||||||
|
const DropdownMenuItem(
|
||||||
|
value: null,
|
||||||
|
enabled: false,
|
||||||
|
child: Divider(),
|
||||||
|
),
|
||||||
|
const DropdownMenuItem(
|
||||||
|
value: null,
|
||||||
|
enabled: false,
|
||||||
|
child: Text(
|
||||||
|
'Channels',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontStyle: FontStyle.italic,
|
||||||
|
decoration: TextDecoration.underline,
|
||||||
|
),
|
||||||
|
)),
|
||||||
|
..._timelineGroupingListDataCollectionToDropdown(channels),
|
||||||
];
|
];
|
||||||
|
|
||||||
if (items.where((i) => i.value == currentTimeline).isEmpty) {
|
if (items.where((i) => i.value == currentTimeline).isEmpty) {
|
||||||
|
@ -169,3 +209,17 @@ class _HomeScreenState extends ConsumerState<HomeScreen> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<DropdownMenuItem<TimelineIdentifiers>>
|
||||||
|
_timelineGroupingListDataCollectionToDropdown(
|
||||||
|
List<TimelineGroupingListData> circles) =>
|
||||||
|
circles
|
||||||
|
.map((c) => TimelineIdentifiers(
|
||||||
|
timeline: TimelineType.circle, auxData: c.id, label: c.name))
|
||||||
|
.map((e) => DropdownMenuItem(
|
||||||
|
value: e,
|
||||||
|
child: Text(
|
||||||
|
e.toLabel(),
|
||||||
|
overflow: TextOverflow.fade,
|
||||||
|
)))
|
||||||
|
.toList();
|
||||||
|
|
|
@ -42,14 +42,18 @@ class TimelineManager extends ChangeNotifier {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<List<TimelineGroupingListData>, ExecError> getCircles() {
|
Result<List<TimelineGroupingListData>, ExecError> getTimelineGroupingListData(
|
||||||
|
GroupingType type) {
|
||||||
if (circlesNotInitialized) {
|
if (circlesNotInitialized) {
|
||||||
_refreshCircleData();
|
_refreshCircleData();
|
||||||
circlesNotInitialized = false;
|
circlesNotInitialized = false;
|
||||||
return Result.ok([]);
|
return Result.ok([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Result.ok(circlesRepo.getMyCircles());
|
return Result.ok(circlesRepo
|
||||||
|
.getMyCircles()
|
||||||
|
.where((e) => e.groupingType == type)
|
||||||
|
.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _refreshCircleData() async {
|
Future<void> _refreshCircleData() async {
|
||||||
|
|
Ładowanie…
Reference in New Issue