import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:fcs/model/user_model.dart'; import 'package:fcs/fcs/common/helpers/theme.dart'; import 'package:fcs/vo/user.dart'; import 'user_editor.dart'; Future showUserPlacesSearch(BuildContext context) async => await showSearch( context: context, delegate: UserSearchDelegate(), ); class UserSearchDelegate extends SearchDelegate { @override ThemeData appBarTheme(BuildContext context) { final ThemeData theme = Theme.of(context); return theme.copyWith( inputDecorationTheme: InputDecorationTheme( hintStyle: TextStyle( color: theme.primaryTextTheme.title.color, fontSize: 16)), primaryColor: primaryColor, primaryIconTheme: theme.primaryIconTheme.copyWith(color: Colors.white), primaryColorBrightness: Brightness.light, primaryTextTheme: theme.textTheme, textTheme: theme.textTheme.copyWith( title: theme.textTheme.title.copyWith( color: theme.primaryTextTheme.title.color, fontSize: 16)), ); } @override List buildActions(BuildContext context) { return [ IconButton( icon: Icon(Icons.clear), onPressed: () => query = '', ), ]; } @override Widget buildLeading(BuildContext context) { return IconButton( icon: Icon(Icons.arrow_back), onPressed: () => close(context, null), ); } @override Widget buildResults(BuildContext context) { final userModel = Provider.of(context); return FutureBuilder( future: userModel.searchUser(query), builder: (context, AsyncSnapshot> snapshot) { if (snapshot.hasData) { if (snapshot.data.length == 0) { return Container( child: Center( child: Text( "Error :No Search User", textAlign: TextAlign.center, ), ), ); } return Container( padding: EdgeInsets.only(top: 15), child: ListView( children: snapshot.data.map((u) => UserRow(user: u)).toList(), ), ); } else if (snapshot.hasError) { return Container( child: Center( child: Text( '${snapshot.error}', textAlign: TextAlign.center, ), ), ); } else { return Container( child: Center( child: CircularProgressIndicator( valueColor: new AlwaysStoppedAnimation(primaryColor)), ), ); } }); } @override Widget buildSuggestions(BuildContext context) { return Container( child: Center( child: Opacity( opacity: 0.2, child: Icon( Icons.supervised_user_circle, size: 200, )), ), ); } } class UserRow extends StatefulWidget { final User user; const UserRow({Key key, this.user}) : super(key: key); @override _UserRowState createState() => _UserRowState(); } class _UserRowState extends State { var dateFormatter = new DateFormat('dd MMM yyyy - hh:mm:ss a'); @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.only(left: 15, right: 15), child: Card( elevation: 10, color: Colors.white, child: InkWell( onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => UserEditor(user: widget.user)), ); }, child: Row( children: [ Expanded( child: new Padding( padding: const EdgeInsets.symmetric(vertical: 7.0), child: new Row( children: [ new Padding( padding: new EdgeInsets.symmetric(horizontal: 20.0 - 15 / 2), child: Icon( Icons.account_circle, color: primaryColor, size: 55, ), ), Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ new Text( widget.user.name == null ? "" : widget.user.name, style: new TextStyle( fontSize: 16.0, color: Colors.black), ), new Text( widget.user.phone == null ? "" : widget.user.phone, style: new TextStyle( fontSize: 14.0, color: Colors.grey), ), widget.user.device == null ? Text("No login", style: TextStyle(color: Colors.red)) : Text("last active", style: TextStyle(color: Colors.green)), Text( "${widget.user.device == null ? "" : widget.user.device}", style: TextStyle(fontSize: 11)), Text( "${widget.user.lastActiveTime == null ? "" : dateFormatter.format(widget.user.lastActiveTime)}") ], ), ], ), ), ), ], ), ), ), ); } }