material_search 0.2.5 material_search: ^0.2.5 copied to clipboard
Implements part of the material search pattern with flutter widgets.
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),
),
);
}
}