栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Flutter中的Listview过滤器搜索

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flutter中的Listview过滤器搜索

我已经根据需要从URL获取数据替换了硬编码的模型输入。

import 'dart:async';import 'package:flutter/material.dart';import 'dart:convert';import 'package:http/http.dart' as http;void main() => runApp(new MaterialApp(  home: new HomePage(),  debugShowCheckedModeBanner: false,));class HomePage extends StatefulWidget {  @override  _HomePageState createState() => new _HomePageState();}class _HomePageState extends State<HomePage> {  TextEditingController controller = new TextEditingController();  // Get json result and convert it to model. Then add  Future<Null> getUserDetails() async {    final response = await http.get(url);    final responseJson = json.depre(response.body);    setState(() {      for (Map user in responseJson) {        _userDetails.add(UserDetails.fromJson(user));      }    });  }  @override  void initState() {    super.initState();    getUserDetails();  }  @override  Widget build(BuildContext context) {    return new Scaffold(      appBar: new AppBar(        title: new Text('Home'),        elevation: 0.0,      ),      body: new Column(        children: <Widget>[          new Container( color: Theme.of(context).primaryColor, child: new Padding(   padding: const EdgeInsets.all(8.0),   child: new Card(     child: new ListTile(       leading: new Icon(Icons.search),       title: new TextField(         controller: controller,         decoration: new InputDecoration(  hintText: 'Search', border: InputBorder.none),         onChanged: onSearchTextChanged,       ),       trailing: new IconButton(icon: new Icon(Icons.cancel), onPressed: () {         controller.clear();         onSearchTextChanged('');       },),     ),   ), ),          ),          new Expanded( child: _searchResult.length != 0 || controller.text.isNotEmpty     ? new ListView.builder(   itemCount: _searchResult.length,   itemBuilder: (context, i) {     return new Card(       child: new ListTile(         leading: new CircleAvatar(backgroundImage: new NetworkImage(_searchResult[i].profileUrl,),),         title: new Text(_searchResult[i].firstName + ' ' + _searchResult[i].lastName),       ),       margin: const EdgeInsets.all(0.0),     );   }, )     : new ListView.builder(   itemCount: _userDetails.length,   itemBuilder: (context, index) {     return new Card(       child: new ListTile(         leading: new CircleAvatar(backgroundImage: new NetworkImage(_userDetails[index].profileUrl,),),         title: new Text(_userDetails[index].firstName + ' ' + _userDetails[index].lastName),       ),       margin: const EdgeInsets.all(0.0),     );   }, ),          ),        ],      ),    );  }  onSearchTextChanged(String text) async {    _searchResult.clear();    if (text.isEmpty) {      setState(() {});      return;    }    _userDetails.forEach((userDetail) {      if (userDetail.firstName.contains(text) || userDetail.lastName.contains(text))        _searchResult.add(userDetail);    });    setState(() {});  }}List<UserDetails> _searchResult = [];List<UserDetails> _userDetails = [];final String url = 'https://jsonplaceholder.typipre.com/users';class UserDetails {  final int id;  final String firstName, lastName, profileUrl;  UserDetails({this.id, this.firstName, this.lastName, this.profileUrl = 'https://i.amz.mshcdn.com/3NbrfEiECotKyhcUhgPJHbrL7zM=/950x534/filters:quality(90)/2014%2F06%2F02%2Fc0%2Fzuckheadsho.a33d0.jpg'});  factory UserDetails.fromJson(Map<String, dynamic> json) {    return new UserDetails(      id: json['id'],      firstName: json['name'],      lastName: json['username'],    );  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号