|
|
- import 'package:flutter/material.dart';
- import '/models/conversations.dart';
- import '/views/main/conversation_list_item.dart';
-
- class ConversationList extends StatefulWidget {
- final List<Conversation> conversations;
- const ConversationList({
- Key? key,
- required this.conversations,
- }) : super(key: key);
-
- @override
- State<ConversationList> createState() => _ConversationListState();
- }
-
- class _ConversationListState extends State<ConversationList> {
- List<Conversation> conversations = [];
-
- @override
- void initState() {
- super.initState();
- conversations.addAll(widget.conversations);
- setState(() {});
- }
-
- void filterSearchResults(String query) {
- List<Conversation> dummySearchList = [];
- dummySearchList.addAll(widget.conversations);
-
- if(query.isNotEmpty) {
- List<Conversation> dummyListData = [];
- dummySearchList.forEach((item) {
- if (item.name.toLowerCase().contains(query)) {
- dummyListData.add(item);
- }
- });
- setState(() {
- conversations.clear();
- conversations.addAll(dummyListData);
- });
- return;
- }
-
- setState(() {
- conversations.clear();
- conversations.addAll(widget.conversations);
- });
- }
-
- 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],
- );
- },
- );
- }
-
- @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(),
- ),
- ],
- ),
- ),
- );
- }
- }
|