This commit is contained in:
Sai Naw Wun
2020-10-07 02:33:06 +06:30
parent 01a2798a74
commit 65dda16fe6
475 changed files with 1543 additions and 90780 deletions

View File

@@ -0,0 +1,84 @@
import 'package:fcs/domain/entities/user.dart';
import 'package:fcs/helpers/theme.dart';
import 'package:fcs/pages/user_search/user_serach.dart';
import 'package:flutter/material.dart';
class UserListRow extends StatefulWidget {
final CallbackUserSelect callbackUserSelect;
final User user;
const UserListRow({this.user, this.callbackUserSelect});
@override
_UserListRowState createState() => _UserListRowState();
}
class _UserListRowState extends State<UserListRow> {
final double dotSize = 15.0;
User user;
@override
void initState() {
super.initState();
this.user = widget.user;
}
@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.pop(context);
if (widget.callbackUserSelect != null)
widget.callbackUserSelect(widget.user);
},
child: Row(
children: <Widget>[
Expanded(
child: new Padding(
padding: const EdgeInsets.symmetric(vertical: 16.0),
child: new Row(
children: <Widget>[
new Padding(
padding: new EdgeInsets.symmetric(
horizontal: 32.0 - dotSize / 2),
child: Icon(
Icons.perm_identity,
color: primaryColor,
size: 50,
)),
new Expanded(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Text(
user.name == null ? '' : user.name,
style: new TextStyle(
fontSize: 15.0, color: Colors.black),
),
new Text(
user.fcsID == null ? "" : user.fcsID,
style: new TextStyle(
fontSize: 13.0, color: Colors.grey),
),
new Text(
user.phoneNumber == null ? "" : user.phoneNumber,
style: new TextStyle(
fontSize: 13.0, color: Colors.grey),
),
],
),
),
],
),
),
),
],
),
),
),
);
}
}

View File

@@ -0,0 +1,116 @@
import 'package:fcs/domain/entities/user.dart';
import 'package:fcs/helpers/theme.dart';
import 'package:fcs/pages/package/model/package_model.dart';
import 'package:fcs/pages/user_search/user_list_row.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
typedef CallbackUserSelect(User suer);
Future<User> searchUser(BuildContext context,
{CallbackUserSelect callbackUserSelect}) async =>
await showSearch<User>(
context: context,
delegate: UserSearchDelegate(callbackUserSelect: callbackUserSelect),
);
class UserSearchDelegate extends SearchDelegate<User> {
final CallbackUserSelect callbackUserSelect;
UserSearchDelegate({this.callbackUserSelect});
@override
String get searchFieldLabel => 'Search by FCS ID or Name';
@override
ThemeData appBarTheme(BuildContext context) {
final ThemeData theme = Theme.of(context);
return theme.copyWith(
inputDecorationTheme: InputDecorationTheme(
hintStyle: TextStyle(
color: theme.primaryTextTheme.caption.color, fontSize: 14)),
textTheme: theme.textTheme.copyWith(
title: theme.textTheme.title.copyWith(
color: theme.primaryTextTheme.title.color, fontSize: 16)),
primaryColor: primaryColor,
);
}
@override
List<Widget> 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 packageModel = Provider.of<PackageModel>(context);
return FutureBuilder(
future: packageModel.searchUser(query),
builder: (context, AsyncSnapshot<List<User>> snapshot) {
if (snapshot.hasData) {
if (snapshot.data.length == 0) {
return Container(
child: Center(
child: Text(
"No result found",
textAlign: TextAlign.center,
),
),
);
}
return Container(
padding: EdgeInsets.only(top: 15),
child: ListView(
children: snapshot.data
.map((u) => UserListRow(
user: u,
callbackUserSelect: callbackUserSelect,
))
.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<Color>(primaryColor)),
),
);
}
});
}
@override
Widget buildSuggestions(BuildContext context) {
return Container(
child: Center(
child: Opacity(
opacity: 0.2,
child: Icon(Icons.perm_identity, size: 200, color: primaryColor)),
),
);
}
}