1+ import 'dart:io' ;
2+
13import 'package:flutter/material.dart' ;
24import 'package:flutter_bloc/flutter_bloc.dart' ;
35import 'package:go_router/go_router.dart' ;
@@ -6,13 +8,11 @@ import '../../../../db/models/models.dart';
68import '../../../../navigation/constants.dart' ;
79import '../../../../shared/ui/colors.dart' ;
810import '../../../conversation_create/bloc/conversation_create_bloc.dart' ;
9- import '../../../conversation_create/bloc/conversation_create_event.dart' ;
1011import '../../../conversation_create/bloc/conversation_create_state.dart' ;
11- import '../../../conversations_list/conversations_list.dart' ;
12- import '../../../conversations_list/widgets/avatar_letter_icon.dart' ;
1312import '../../../search/bloc/global_search_bloc.dart' ;
1413import '../../../search/bloc/global_search_state.dart' ;
1514import '../../../search/view/search_bar.dart' ;
15+ import '../../../search/view/search_form.dart' ;
1616import '../../bloc/conversation_bloc.dart' ;
1717import '../../bloc/forward_message/forward_messages_bloc.dart' ;
1818import '../../models/chat_message.dart' ;
@@ -27,12 +27,34 @@ class ForwardSearchForm extends StatelessWidget {
2727
2828 @override
2929 Widget build (BuildContext context) {
30- return Column (
31- children: < Widget > [
32- const GlobalSearchBar (withBack: false ),
33- _SearchBody (forwardMessages),
34- ],
35- );
30+ final window = WidgetsBinding .instance.platformDispatcher.views.first;
31+ double topPadding = window.viewPadding.top / window.devicePixelRatio -
32+ (Platform .isIOS ? 30 : 15 );
33+ return ClipRRect (
34+ borderRadius: const BorderRadius .vertical (
35+ top: Radius .circular (28 ),
36+ ),
37+ child: Scaffold (
38+ appBar: AppBar (
39+ backgroundColor: black,
40+ automaticallyImplyLeading: false ,
41+ centerTitle: true ,
42+ toolbarHeight: kToolbarHeight + topPadding,
43+ title: Padding (
44+ padding: EdgeInsets .only (top: topPadding + 5 ),
45+ child: const Text (
46+ 'Forward message' ,
47+ style: TextStyle (color: white),
48+ ))),
49+ body: Container (
50+ padding: const EdgeInsets .only (left: 20 , right: 20 , top: 20 ),
51+ child: Column (
52+ spacing: 4 ,
53+ children: [
54+ const GlobalSearchBar (),
55+ _SearchBody (forwardMessages),
56+ ],
57+ ))));
3658 }
3759}
3860
@@ -116,7 +138,12 @@ class _SearchBody extends StatelessWidget {
116138 padding: EdgeInsets .only (top: 18.0 ),
117139 child: Text ('Please start typing to find chat' ),
118140 )
119- : Expanded (child: _SearchResults (null , chats, forwardMessages)),
141+ : Expanded (
142+ child: SearchResults (null , chats, chatOnTap: (chat) {
143+ context
144+ .read <ForwardMessagesBloc >()
145+ .add (SendForwardMessage ([chat], forwardMessages));
146+ })),
120147 SearchStateLoading () => const Padding (
121148 padding: EdgeInsets .only (top: 18.0 ),
122149 child: CircularProgressIndicator .adaptive (),
@@ -126,114 +153,15 @@ class _SearchBody extends StatelessWidget {
126153 child: Text (state.error),
127154 ),
128155 SearchStateSuccess () => Expanded (
129- child: _SearchResults (
130- state.users, state.conversations, forwardMessages)),
156+ child: SearchResults (state.users, state.conversations,
157+ chatOnTap: (chat) {
158+ context
159+ .read <ForwardMessagesBloc >()
160+ .add (SendForwardMessage ([chat], forwardMessages));
161+ })),
131162 };
132163 },
133164 ),
134165 );
135166 }
136167}
137-
138- class _SearchResults extends StatelessWidget {
139- final List <UserModel >? users;
140- final List <ConversationModel > chats;
141- final Set <ChatMessage > forwardMessages;
142-
143- const _SearchResults (this .users, this .chats, this .forwardMessages);
144-
145- Widget _header (String title) {
146- return Padding (
147- padding: const EdgeInsets .only (top: 8.0 , bottom: 8.0 ),
148- child: Container (
149- padding: const EdgeInsets .only (left: 18.0 ),
150- width: double .maxFinite,
151- color: gainsborough, //define the background color
152- child: Text (
153- title,
154- style: const TextStyle (fontSize: 18 ),
155- ),
156- ),
157- );
158- }
159-
160- Widget _emptyListText (String title) {
161- return Padding (
162- padding: const EdgeInsets .all (10.0 ),
163- child: Text (
164- title,
165- style: const TextStyle (
166- fontWeight: FontWeight .w300,
167- fontSize: 16 ,
168- ),
169- textAlign: TextAlign .center,
170- ),
171- );
172- }
173-
174- @override
175- Widget build (BuildContext context) {
176- final userList = users == null
177- ? null
178- : users! .isEmpty
179- ? _emptyListText ('We couldn\' t find the specified users' )
180- : ListView .builder (
181- physics: const NeverScrollableScrollPhysics (),
182- shrinkWrap: true ,
183- itemCount: users! .length,
184- itemBuilder: (BuildContext context, int index) {
185- final user = users! [index];
186- return ListTile (
187- leading: AvatarLetterIcon (
188- name: user.login! , avatar: user.avatar),
189- title: Text (
190- user.login! ,
191- style: const TextStyle (
192- fontWeight: FontWeight .w500, fontSize: 20 ),
193- maxLines: 1 ,
194- overflow: TextOverflow .ellipsis,
195- ),
196- contentPadding:
197- const EdgeInsets .fromLTRB (18.0 , 8.0 , 18.0 , 8.0 ),
198- onTap: () {
199- context
200- .read <ConversationCreateBloc >()
201- .add (ConversationCreated (user: user, type: 'u' ));
202- },
203- );
204- },
205- );
206-
207- final conversationList = chats.isEmpty
208- ? _emptyListText ('We couldn\' t find the specified chats' )
209- : ListView .builder (
210- physics: const NeverScrollableScrollPhysics (),
211- shrinkWrap: true ,
212- itemCount: chats.length,
213- itemBuilder: (BuildContext context, int index) {
214- final conversation = chats[index];
215- return ConversationListItem (
216- conversation: conversation,
217- onTap: () {
218- context
219- .read <ForwardMessagesBloc >()
220- .add (SendForwardMessage ([conversation], forwardMessages));
221- },
222- );
223- },
224- );
225-
226- return MediaQuery .removePadding (
227- context: context,
228- removeTop: true ,
229- child: ListView (
230- padding: const EdgeInsets .only (top: 10.0 ),
231- children: < Widget > [
232- if (userList != null ) ...[_header ('Users' ), userList],
233- _header ('Chats' ),
234- conversationList,
235- ],
236- ),
237- );
238- }
239- }
0 commit comments