Skip to content

Commit 73fdd51

Browse files
committed
chore: refactor to be a bit more picky in directory structure + flutter 3.27.2
1 parent e2e4a9c commit 73fdd51

File tree

96 files changed

+1069
-802
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+1069
-802
lines changed

lib/app/view/app.dart

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
1-
import 'dart:io';
21
import 'dart:ui';
32

43
import 'package:flutter/material.dart';
4+
import 'package:system_theme/system_theme_builder.dart';
55
import 'package:yaru/yaru.dart';
66

7-
import '../../chat/view/chat_start_page.dart';
7+
import '../../chat/chat_start_page.dart';
88
import '../../constants.dart';
99
import '../../l10n/l10n.dart';
1010

1111
class NebuchadnezzarApp extends StatelessWidget {
12-
const NebuchadnezzarApp({super.key});
12+
const NebuchadnezzarApp({super.key, required this.yaruApp});
13+
14+
final bool yaruApp;
1315

1416
@override
15-
Widget build(BuildContext context) => Platform.isLinux
17+
Widget build(BuildContext context) => yaruApp
1618
? YaruTheme(
1719
builder: (context, yaru, child) => App(
1820
lightTheme: yaru.theme,
@@ -21,9 +23,11 @@ class NebuchadnezzarApp extends StatelessWidget {
2123
highContrastDarkTheme: yaruHighContrastDark,
2224
),
2325
)
24-
: App(
25-
lightTheme: yaruLight,
26-
darkTheme: yaruDark,
26+
: SystemThemeBuilder(
27+
builder: (context, systemColor) => App(
28+
lightTheme: createYaruLightTheme(primaryColor: systemColor.accent),
29+
darkTheme: createYaruDarkTheme(primaryColor: systemColor.accent),
30+
),
2731
);
2832
}
2933

lib/app_config.dart

Lines changed: 0 additions & 8 deletions
This file was deleted.

lib/chat/authentication/chat_login_page.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import '../../common/view/space.dart';
99
import '../../common/view/ui_constants.dart';
1010
import '../../constants.dart';
1111
import '../../l10n/l10n.dart';
12-
import '../view/chat_master/chat_master_detail_page.dart';
12+
import '../chat_master/view/chat_master_detail_page.dart';
1313
import 'authentication_model.dart';
1414

1515
class ChatLoginPage extends StatefulWidget with WatchItStatefulWidgetMixin {

lib/chat/bootstrap/view/key_verification_dialog.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import 'package:yaru/yaru.dart';
1111

1212
import '../../../common/view/build_context_x.dart';
1313
import '../../../l10n/l10n.dart';
14-
import '../../view/chat_avatar.dart';
15-
import '../../view/chat_master/chat_master_detail_page.dart';
14+
import '../../common/view/chat_avatar.dart';
15+
import '../../chat_master/view/chat_master_detail_page.dart';
1616

1717
// Credit: this code has been initially copied from https://github.com/krille-chan/fluffychat
1818
// Thank you @krille-chan

lib/chat/view/chat_master/chat_all_unread_rooms_badge.dart renamed to lib/chat/chat_master/view/chat_all_unread_rooms_badge.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:watch_it/watch_it.dart';
33

44
import '../../../common/view/build_context_x.dart';
5-
import '../../chat_model.dart';
5+
import '../../common/chat_model.dart';
66

77
// TODO: move this to a registerStreamHandler -> send to operating system
88
class ChatAllUnreadRoomsBadge extends StatelessWidget {

lib/chat/view/chat_master/chat_master_detail_page.dart renamed to lib/chat/chat_master/view/chat_master_detail_page.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import '../../../common/view/ui_constants.dart';
99
import '../../bootstrap/bootstrap_model.dart';
1010
import '../../bootstrap/view/bootstrap_page.dart';
1111
import '../../bootstrap/view/key_verification_dialog.dart';
12-
import '../../chat_model.dart';
13-
import '../chat_room/chat_room_page.dart';
14-
import '../no_selected_room_page.dart';
12+
import '../../common/chat_model.dart';
13+
import '../../chat_room/common/view/chat_room_page.dart';
14+
import '../../chat_room/common/view/chat_no_selected_room_page.dart';
1515
import 'chat_master_panel.dart';
1616

1717
final GlobalKey<ScaffoldState> masterScaffoldKey = GlobalKey();
@@ -100,7 +100,7 @@ class _ChatMasterDetailPageState extends State<ChatMasterDetailPage> {
100100
),
101101
)
102102
else if (selectedRoom == null)
103-
const Expanded(child: NoSelectedRoomPage())
103+
const Expanded(child: ChatNoSelectedRoomPage())
104104
else
105105
Expanded(
106106
child: ChatRoomPage(

lib/chat/view/chat_master/chat_master_list_filter_bar.dart renamed to lib/chat/chat_master/view/chat_master_list_filter_bar.dart

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,23 @@ import 'package:flutter/material.dart';
22
import 'package:watch_it/watch_it.dart';
33
import 'package:yaru/yaru.dart';
44

5-
import '../../../common/view/sliver_sticky_panel.dart';
5+
import '../../../common/view/ui_constants.dart';
66
import '../../../l10n/l10n.dart';
7-
import '../../chat_model.dart';
8-
import '../../rooms_filter.dart';
7+
import '../../common/chat_model.dart';
8+
import '../../common/rooms_filter.dart';
99

1010
class ChatMasterListFilterBar extends StatelessWidget with WatchItMixin {
1111
const ChatMasterListFilterBar({super.key});
1212

1313
@override
1414
Widget build(BuildContext context) {
1515
final roomsFilter = watchPropertyValue((ChatModel m) => m.roomsFilter);
16-
return SliverStickyPanel(
16+
return Padding(
17+
padding: const EdgeInsets.only(
18+
left: kMediumPlusPadding,
19+
right: kMediumPlusPadding,
20+
bottom: kMediumPadding,
21+
),
1722
child: YaruChoiceChipBar(
1823
showCheckMarks: false,
1924
shrinkWrap: false,
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:watch_it/watch_it.dart';
3+
import 'package:yaru/yaru.dart';
4+
5+
import '../../../common/view/build_context_x.dart';
6+
import '../../../common/view/common_widgets.dart';
7+
import '../../../common/view/theme.dart';
8+
import '../../../common/view/ui_constants.dart';
9+
import '../../../l10n/l10n.dart';
10+
import '../../common/chat_model.dart';
11+
import '../../common/rooms_filter.dart';
12+
import '../../common/search_model.dart';
13+
import '../../common/view/search_auto_complete.dart';
14+
import '../../settings/settings_dialog.dart';
15+
import 'chat_master_list_filter_bar.dart';
16+
import 'chat_master_title_bar.dart';
17+
import 'chat_rooms_list.dart';
18+
import 'chat_space_control_panel.dart';
19+
import 'chat_space_filter.dart';
20+
21+
class ChatMasterSidePanel extends StatelessWidget with WatchItMixin {
22+
const ChatMasterSidePanel({super.key});
23+
24+
@override
25+
Widget build(BuildContext context) {
26+
final l10n = context.l10n;
27+
final searchModel = di<SearchModel>();
28+
final searchActive = watchPropertyValue((SearchModel m) => m.searchActive);
29+
final searchType = watchPropertyValue((SearchModel m) => m.searchType);
30+
final archiveActive = watchPropertyValue((ChatModel m) => m.archiveActive);
31+
final loadingArchive =
32+
watchPropertyValue((ChatModel m) => m.loadingArchive);
33+
final roomsFilter = watchPropertyValue((ChatModel m) => m.roomsFilter);
34+
35+
final suffix = IconButton(
36+
padding: EdgeInsets.zero,
37+
style: textFieldSuffixStyle,
38+
onPressed: () => searchModel.setSearchType(
39+
switch (searchType) {
40+
SearchType.profiles => SearchType.rooms,
41+
SearchType.rooms => SearchType.spaces,
42+
SearchType.spaces => SearchType.profiles,
43+
},
44+
),
45+
icon: switch (searchType) {
46+
SearchType.profiles => const Icon(YaruIcons.user),
47+
SearchType.rooms => const Icon(YaruIcons.users),
48+
SearchType.spaces => const Icon(YaruIcons.globe)
49+
},
50+
);
51+
52+
return Material(
53+
color: getPanelBg(context.theme),
54+
child: Column(
55+
children: [
56+
const ChatMasterTitleBar(),
57+
if (searchActive && !archiveActive)
58+
Padding(
59+
padding: const EdgeInsets.only(
60+
left: kMediumPlusPadding,
61+
right: kMediumPlusPadding,
62+
bottom: kMediumPadding,
63+
),
64+
child: switch (searchType) {
65+
SearchType.profiles => ChatUserSearchAutoComplete(
66+
suffix: suffix,
67+
),
68+
_ => RoomsAutoComplete(
69+
suffix: suffix,
70+
)
71+
},
72+
),
73+
const ChatMasterListFilterBar(),
74+
if (roomsFilter == RoomsFilter.spaces && !archiveActive)
75+
const ChatSpaceFilter(),
76+
if (roomsFilter == RoomsFilter.spaces && !archiveActive)
77+
const ChatSpaceControlPanel(),
78+
if (loadingArchive)
79+
const Expanded(
80+
child: Center(child: Progress()),
81+
)
82+
else
83+
const Expanded(
84+
child: ChatRoomsList(),
85+
),
86+
Padding(
87+
padding: const EdgeInsets.symmetric(vertical: kMediumPadding),
88+
child: YaruMasterTile(
89+
leading: const Icon(YaruIcons.settings),
90+
title: Text(l10n.settings),
91+
onTap: () => showDialog(
92+
context: context,
93+
builder: (context) => const SettingsDialog(),
94+
),
95+
),
96+
),
97+
],
98+
),
99+
);
100+
}
101+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:watch_it/watch_it.dart';
3+
import 'package:yaru/yaru.dart';
4+
5+
import '../../../common/view/build_context_x.dart';
6+
import '../../../common/view/space.dart';
7+
import '../../../common/view/theme.dart';
8+
import '../../../common/view/ui_constants.dart';
9+
import '../../../l10n/l10n.dart';
10+
import '../../common/chat_model.dart';
11+
import '../../common/search_model.dart';
12+
import 'chat_new_chat_popup_menu_button.dart';
13+
14+
class ChatMasterTitleBar extends StatelessWidget with WatchItMixin {
15+
const ChatMasterTitleBar({super.key});
16+
17+
@override
18+
Widget build(BuildContext context) {
19+
final l10n = context.l10n;
20+
final chatModel = di<ChatModel>();
21+
final searchModel = di<SearchModel>();
22+
final searchActive = watchPropertyValue((SearchModel m) => m.searchActive);
23+
final archiveActive = watchPropertyValue((ChatModel m) => m.archiveActive);
24+
return YaruWindowTitleBar(
25+
heroTag: '<Left hero tag>',
26+
title: Text(archiveActive ? l10n.archive : l10n.chats),
27+
border: BorderSide.none,
28+
style: YaruTitleBarStyle.undecorated,
29+
backgroundColor: getMonochromeBg(theme: context.theme, darkFactor: 3),
30+
actions: space(
31+
flex: true,
32+
spaceEnd: true,
33+
widthGap: kSmallPadding,
34+
skip: 0,
35+
children: [
36+
if (!archiveActive) const ChatNewChatPopupMenuButton(),
37+
if (!archiveActive)
38+
IconButton(
39+
isSelected: searchActive,
40+
onPressed: searchModel.toggleSearch,
41+
icon: const Icon(YaruIcons.search),
42+
),
43+
IconButton(
44+
selectedIcon: const Icon(YaruIcons.bookmark_filled),
45+
isSelected: archiveActive,
46+
onPressed: chatModel.toggleArchive,
47+
icon: const Icon(YaruIcons.bookmark),
48+
),
49+
],
50+
),
51+
);
52+
}
53+
}

lib/chat/view/chat_master/chat_my_user_avatar.dart renamed to lib/chat/chat_master/view/chat_my_user_avatar.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import '../../../common/view/common_widgets.dart';
77
import '../../../common/view/snackbars.dart';
88
import '../../../l10n/l10n.dart';
99
import '../../settings/settings_model.dart';
10-
import '../chat_avatar.dart';
10+
import '../../common/view/chat_avatar.dart';
1111

1212
class ChatMyUserAvatar extends StatelessWidget with WatchItMixin {
1313
const ChatMyUserAvatar({

0 commit comments

Comments
 (0)