[英]Flutter how to make search bar with json model
The source codes in link below is a search bar function without json model, if i wanted to change the items with json model, how to do so? 有人有什么主意吗
最后看看他的最终代码。
尝试这个
import 'package:flutter/material.dart';
import 'package:flutter_autocomplete_demo/country_page.dart';
import 'package:flutter_autocomplete_demo/splash_screen.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Splash(),
);
}
}
const List<Country> countryOptions = <Country>[
Country(name: 'Africa', size: 30370000),
Country(name: 'Asia', size: 44579000),
Country(name: 'Australia', size: 8600000),
Country(name: 'Bulgaria', size: 110879),
Country(name: 'Canada', size: 9984670),
Country(name: 'Denmark', size: 42916),
Country(name: 'Europe', size: 10180000),
Country(name: 'India', size: 3287263),
Country(name: 'North America', size: 24709000),
Country(name: 'South America', size: 17840000),
];
class AutoCompleteDemo extends StatefulWidget {
@override
State<StatefulWidget> createState() => _AutoCompleteDemoState();
}
class _AutoCompleteDemoState extends State<AutoCompleteDemo> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title:Text('Flutter AutoComplete Demo'),
backgroundColor: Colors.cyan,
),
body: Padding(
padding: EdgeInsets.all(15.0),
child: Autocomplete<Country>(
optionsBuilder: (TextEditingValue textEditingValue) {
return countryOptions
.where((Country county) => county.name.toLowerCase()
.startsWith(textEditingValue.text.toLowerCase())
)
.toList();
},
displayStringForOption: (Country option) => option.name,
fieldViewBuilder: (
BuildContext context,
TextEditingController fieldTextEditingController,
FocusNode fieldFocusNode,
VoidCallback onFieldSubmitted
) {
return TextField(
controller: fieldTextEditingController,
focusNode: fieldFocusNode,
style: const TextStyle(fontWeight: FontWeight.bold),
);
},
onSelected: (Country selection) {
print('Selected: ${selection.name}');
},
optionsViewBuilder: (
BuildContext context,
AutocompleteOnSelected<Country> onSelected,
Iterable<Country> options
) {
return Align(
alignment: Alignment.topLeft,
child: Material(
child: Container(
width: 300,
color: Colors.cyan,
child: ListView.builder(
padding: EdgeInsets.all(10.0),
itemCount: options.length,
itemBuilder: (BuildContext context, int index) {
final Country option = options.elementAt(index);
return GestureDetector(
onTap: () {
onSelected(option);
},
child: ListTile(
title: Text(option.name, style: const TextStyle(color: Colors.white)),
),
);
},
),
),
),
);
},
),
),
);
}
}
更多检查这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.