import 'package:flutter/material.dart';
import 'package:firebase_database/ui/firebase_animated_list.dart';
import 'package:woofnwalk/providers/walker_caller.dart';
import 'package:woofnwalk/widgets/nav_drawer.dart';
import '../../widgets/walker_widget.dart';
import '../../model/walker.dart';
import '../../model/walker_dao.dart';
import './filter_walkers_screen.dart';
class WalkersList extends StatefulWidget {
static const routeName = '/walkers-list';
WalkersList({Key? key}) : super(key: key);
final walkerDao = WalkerDao();
@override
_WalkersListState createState() => _WalkersListState();
}
class _WalkersListState extends State<WalkersList> {
ScrollController _scrollController = ScrollController();
var futureList;
List<Walker> origList = [];
List<Walker> walkerList = [];
var tmpWidget;
var listWidget;
void getList() async {
WalkerCaller walkerCaller = WalkerCaller();
futureList = walkerCaller.getWalkers();
origList = await futureList;
}
@override
void initState() {
super.initState();
tmpWidget = _getWalkersList();
getList();
setState(() {
listWidget = tmpWidget;
});
}
@override
Widget build(BuildContext context) {
WidgetsBinding.instance!.addPostFrameCallback((_) => _scrollToBottom());
return Scaffold(
appBar: AppBar(
title: const Text('Nearby Walkers'),
actions: <Widget>[
IconButton(
icon: const Icon(Icons.restart_alt_sharp),
onPressed: () {
setState(() {
listWidget = updateList(origList);
});
},
),
IconButton(
icon: const Icon(Icons.filter_alt),
onPressed: () {
_navigateAndDisplayFilteredList(context);
},
)
],
),
drawer: const NavDrawer(),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(children: [listWidget]
// showList,
)));
}
Widget _getWalkersList() {
return Expanded(
child: FirebaseAnimatedList(
controller: _scrollController,
query: widget.walkerDao.getWalkerQuery(),
itemBuilder: (context, snapshot, animation, index) {
final json = snapshot.value as Map<dynamic, dynamic>;
final walker = Walker.fromJson(json);
return WalkerListWidget(walker: walker);
},
));
}
void _scrollToBottom() {
if (_scrollController.hasClients) {
_scrollController.jumpTo(_scrollController.position.maxScrollExtent);
}
}
Widget updateList(List<Walker> newList) {
final GlobalKey<AnimatedListState> _key = GlobalKey();
var widgetUpdatedList = Expanded(
child: AnimatedList(
key: _key,
initialItemCount: newList.length,
controller: _scrollController,
itemBuilder: (context, index, animation) {
return WalkerListWidget(walker: newList[index]);
},
));
return widgetUpdatedList;
}
void _navigateAndDisplayFilteredList(BuildContext context) async {
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => FilterWalkersScreen()),
);
setState(() {
if (result != null) {
walkerList = result;
listWidget = updateList(walkerList);
}
});
}
}