|
|
- import 'package:Envelope/models/friends.dart';
- import 'package:Envelope/utils/storage/conversations.dart';
- import 'package:flutter/material.dart';
-
- import '/models/conversations.dart';
- import '/views/main/conversation/edit_details.dart';
- import '/views/main/conversation/list_item.dart';
- import 'create_add_users.dart';
- import 'detail.dart';
-
- class ConversationList extends StatefulWidget {
- final List<Conversation> conversations;
- final List<Friend> friends;
- const ConversationList({
- Key? key,
- required this.conversations,
- required this.friends,
- }) : super(key: key);
-
- @override
- State<ConversationList> createState() => _ConversationListState();
- }
-
- class _ConversationListState extends State<ConversationList> {
- List<Conversation> conversations = [];
- List<Friend> friends = [];
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- body: SingleChildScrollView(
- physics: const BouncingScrollPhysics(),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: <Widget>[
- SafeArea(
- child: Padding(
- padding: const EdgeInsets.only(left: 16,right: 16,top: 10),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: const <Widget>[
- Text(
- 'Conversations',
- style: TextStyle(
- fontSize: 32,
- fontWeight: FontWeight.bold
- )
- ),
- ],
- ),
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(top: 16,left: 16,right: 16),
- child: TextField(
- decoration: const InputDecoration(
- hintText: "Search...",
- prefixIcon: Icon(
- Icons.search,
- size: 20
- ),
- ),
- onChanged: (value) => filterSearchResults(value.toLowerCase())
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(top: 16,left: 16,right: 16),
- child: list(),
- ),
- ],
- ),
- ),
- floatingActionButton: Padding(
- padding: const EdgeInsets.only(right: 10, bottom: 10),
- child: FloatingActionButton(
- onPressed: () {
- Navigator.of(context).push(
- MaterialPageRoute(builder: (context) => ConversationEditDetails(
- saveCallback: (String conversationName) {
- Navigator.of(context).push(
- MaterialPageRoute(builder: (context) => ConversationAddFriendsList(
- friends: friends,
- saveCallback: (List<Friend> friendsSelected) async {
- Conversation conversation = await createConversation(
- conversationName,
- friendsSelected
- );
-
- uploadConversation(conversation);
-
- Navigator.of(context).popUntil((route) => route.isFirst);
- Navigator.push(context, MaterialPageRoute(builder: (context){
- return ConversationDetail(
- conversation: conversation,
- );
- }));
- },
- ))
- );
- },
- )),
- ).then(onGoBack);
- },
- backgroundColor: Theme.of(context).colorScheme.primary,
- child: const Icon(Icons.add, size: 30),
- ),
- ),
- );
- }
-
- void filterSearchResults(String query) {
- List<Conversation> dummySearchList = [];
- dummySearchList.addAll(widget.conversations);
-
- if(query.isNotEmpty) {
- List<Conversation> dummyListData = [];
- for (Conversation item in dummySearchList) {
- if (item.name.toLowerCase().contains(query)) {
- dummyListData.add(item);
- }
- }
- setState(() {
- conversations.clear();
- conversations.addAll(dummyListData);
- });
- return;
- }
-
- setState(() {
- conversations.clear();
- conversations.addAll(widget.conversations);
- });
- }
-
- @override
- void initState() {
- super.initState();
- conversations.addAll(widget.conversations);
- friends.addAll(widget.friends);
- setState(() {});
- }
-
- Widget list() {
- if (conversations.isEmpty) {
- return const Center(
- child: Text('No Conversations'),
- );
- }
-
- return ListView.builder(
- itemCount: conversations.length,
- shrinkWrap: true,
- padding: const EdgeInsets.only(top: 16),
- physics: const NeverScrollableScrollPhysics(),
- itemBuilder: (context, i) {
- return ConversationListItem(
- conversation: conversations[i],
- );
- },
- );
- }
-
- onGoBack(dynamic value) async {
- conversations = await getConversations();
- friends = await getFriends();
- setState(() {});
- }
- }
|