forked from ianldgs/material_search
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.dart
149 lines (137 loc) · 4.38 KB
/
main.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import 'package:flutter/material.dart';
import 'package:material_search/material_search.dart';
void main() => runApp(new ExampleApp());
class ExampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Material Search Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Material Search Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _names = [
'Igor Minar',
'Brad Green',
'Dave Geddes',
'Naomi Black',
'Greg Weber',
'Dean Sofer',
'Wes Alvaro',
'John Scott',
'Daniel Nadasi',
];
String _name = 'No one';
final _formKey = new GlobalKey<FormState>();
_buildMaterialSearchPage(BuildContext context) {
return new MaterialPageRoute<String>(
settings: new RouteSettings(
name: 'material_search',
isInitialRoute: false,
),
builder: (BuildContext context) {
return new Material(
child: new MaterialSearch<String>(
placeholder: 'Search',
results: _names.map((String v) => new MaterialSearchResult<String>(
icon: Icons.person,
value: v,
text: "Mr(s). $v",
)).toList(),
filter: (dynamic value, String criteria) {
return value.toLowerCase().trim()
.contains(new RegExp(r'' + criteria.toLowerCase().trim() + ''));
},
onSelect: (dynamic value) => Navigator.of(context).pop(value),
onSubmit: (String value) => Navigator.of(context).pop(value),
),
);
}
);
}
_showMaterialSearch(BuildContext context) {
Navigator.of(context)
.push(_buildMaterialSearchPage(context))
.then((dynamic value) {
setState(() => _name = value as String);
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
actions: <Widget>[
new IconButton(
onPressed: () {
_showMaterialSearch(context);
},
tooltip: 'Search',
icon: new Icon(Icons.search),
)
],
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
new Padding(
padding: const EdgeInsets.symmetric(vertical: 40.0, horizontal: 50.0),
child: new Text("You found: ${_name ?? 'No one'}"),
),
new Padding(
padding: const EdgeInsets.symmetric(vertical: 20.0, horizontal: 50.0),
child: new Form(
key: _formKey,
child: new Column(
children: <Widget>[
new MaterialSearchInput<String>(
placeholder: 'Name',
results: _names.map((String v) => new MaterialSearchResult<String>(
icon: Icons.person,
value: v,
text: "Mr(s). $v",
)).toList(),
filter: (dynamic value, String criteria) {
return value.toLowerCase().trim()
.contains(new RegExp(r'' + criteria.toLowerCase().trim() + ''));
},
onSelect: (dynamic v) {
print(v);
},
validator: (dynamic value) => value == null ? 'Required field' : null,
formatter: (dynamic v) => 'Hello, $v',
),
new MaterialButton(
child: new Text('Validate'),
onPressed: () {
_formKey.currentState.validate();
}
),
],
),
),
),
],
),
),
floatingActionButton: new FloatingActionButton(
onPressed: () {
_showMaterialSearch(context);
},
tooltip: 'Search',
child: new Icon(Icons.search),
),
);
}
}