实施Flutter搜索

问题描述

我正在学习在我的第一个Flutter中添加搜索功能,但是我无法继续进行工作... buildresults和buildSuggestions我知道我需要传递包含json数据的List数据,我特别是要做data [index] [address],它可以按地址搜索。因此,用户可以从“ 101 San Francisco”或“ 201 San Francisco”中搜索包含“ San Francisco”之类的地址中的任何内容的地址,只要它包含搜索关键字...

当然,请随意提高我的基本编码效率?感谢大家的投入。

import 'dart:async';
import 'dart:convert';
import 'package:Flutter/material.dart';
import 'package:http/http.dart' as http;
void main() => runApp(new MaterialApp(
  home: new HomePage(),));
class HomePage extends StatefulWidget{
  @override
  HomePageState createState() => new HomePageState();
}
**class Search extends SearchDelegate {
  @override
  List<Widget> buildActions(BuildContext context) {
    
     return <Widget> [
      IconButton(
        icon: Icon(Icons.clear),onpressed: () {
          query = "";
        },)
    ];
  }

  @override
  Widget buildLeading(BuildContext context) {
    return IconButton(onpressed: () {},icon: Icon(Icons.arrow_back),);
  }

  String selectedResult;

  @override
  Widget buildresults(BuildContext context) { 
    return Container(
      child: Center(
        child: Text(selectedResult),),);
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    // Todo: implement buildSuggestions
    return null;
  }
}**

class HomePageState extends State<HomePage>{
  final String url =  "https://myJson.json";
  List data;

  @override 
  void initState(){
    super.initState();
    this.getJsonData();
  }

  Future<String> getJsonData() async{
    var response = await http.get(
      Uri.encodeFull(url),headers: {"Accept": "application/json"}
    );

    setState(() {
      var convertDataToJson = jsonDecode(response.body);
      data = convertDataToJson['places'];
    });
  return "Success";
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Welcome"),actions: <Widget>[
          IconButton(onpressed: () {
            showSearch(context: context,delegate: Search());
          },icon: Icon(Icons.search),)
        ],body: new ListView.builder(
        itemCount: data == null ? 0 : data.length,itemBuilder: (BuildContext context,int index) {
          return new Container(
            child:  new Center(
              child: new Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,children: <Widget>[
                  new Card(
                   child: new Container(
                      padding: EdgeInsets.all(20),child: Column(
                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [                       
                          Text(data[index]['address']),],)
                  ),)
                ],);
        },);
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)