Поиск ключа внутри массива, как получить к ним доступ в .where для поиска - PullRequest
0 голосов
/ 09 октября 2019

Я хотел бы сохранить свои ключи поиска в массиве, чтобы можно было искать несколько вещей с помощью одной строки кода, но это не работает.

Я использую базовый поиск именно дляэтот https://github.com/rajayogan/flutterfirestore-instantsearch

у меня есть несколько документов, которые имеют массив, массив, состоящий из карты, содержащей информацию, такую ​​как item_name и т. д. ... я хочу найти это item_name.

Я пытался поставить

import 'package:cloud_firestore/cloud_firestore.dart';


//This class should take the array search which is  that I wish to be my searchkeys


class SearchService {
  searchByName(String searchField) {
    return Firestore.instance
        .collection('Foodtruckinfo')
        .where('arraysearch',
        isEqualTo: searchField.substring(0, 1).toUpperCase())
        .getDocuments();
   }
 }



 import 'package:cloud_firestore/cloud_firestore.dart';
  import 'package:customer_register_login/Customer/searchmethod.dart';

  import 'package:flutter/material.dart';

     class MyHomePage extends StatefulWidget {
     @override
    _MyHomePageState createState() => new _MyHomePageState();
   }

    class _MyHomePageState extends State<MyHomePage> {
    var queryResultSet = [];
    var tempSearchStore = [];

    initiateSearch(value) {
     if (value.length == 0) {
       setState(() {
         queryResultSet = [];
         tempSearchStore = [];
        });
       }

     var capitalizedValue =
          value.substring(0, 1).toUpperCase() + value.substring(1);

     if (queryResultSet.length == 0 && value.length == 1) {
       SearchService().searchByName(value).then((QuerySnapshot docs) {
         for (int i = 0; i < docs.documents.length; ++i) {
           queryResultSet.add(docs.documents[i].data);
          }
       });
     } else {
        tempSearchStore = [];
        queryResultSet.forEach((element) {
         if (element['item_name'].startsWith(capitalizedValue)) {
           setState(() {
              tempSearchStore.add(element);
           });
         }
        });
     }
   }

    @override
   Widget build(BuildContext context) {
     return new Scaffold(
             appBar: new AppBar(
                title: Text('Firestore search'),
              ),
              body: ListView(children: <Widget>[
                Padding(
                  padding: const EdgeInsets.all(10.0),
                  child: TextField(
                   onChanged: (val) {
                   initiateSearch(val);
               },
               decoration: InputDecoration(
                   prefixIcon: IconButton(
                     color: Colors.black,
                      icon: Icon(Icons.arrow_back),
                    iconSize: 20.0,
                    onPressed: () {
                        Navigator.of(context).pop();
                     },
                   ),
                    contentPadding: EdgeInsets.only(left: 25.0),
                    hintText: 'Search by name',
                   border: OutlineInputBorder(
                       borderRadius: BorderRadius.circular(4.0))),
              ),
            ),
                 SizedBox(height: 10.0),
                   GridView.count(
                  padding: EdgeInsets.only(left: 10.0, right: 10.0),
               crossAxisCount: 2,
                crossAxisSpacing: 4.0,
                mainAxisSpacing: 4.0,
                primary: false,
               shrinkWrap: true,
                children: tempSearchStore.map((element) {
                   return buildResultCard(element);
               }).toList())
          ]));
       }
   }

      Widget buildResultCard(data) {
        return Card(
             shape: RoundedRectangleBorder(borderRadius: 
    BorderRadius.circular(10.0)),
     elevation: 2.0,
      child: Container(
          child: Center(
              child: Text(
         data['item_name'],
         textAlign: TextAlign.center,
        style: TextStyle(
          color: Colors.black,
          fontSize: 20.0,
        ),
       )))); 
    }

[1]: https://ibb.co/47p2dBD <изображение для требуемой клавиши </p>

[2]: https://ibb.co/kQkWKsq <изображение для желаемого поиска (в документе 1 #) </p>

[3]: https://ibb.co/MVnBtCd <изображение для желаемого поиска (в документе 2 #) </p>

[4] https://ibb.co/yk04RJ4 <изображение для желаемого поиска (в 3 # документе) </p>

1 Ответ

0 голосов
/ 10 октября 2019

Я искал в документации Google и ничего не нашел для коллекций дротиков и огненных дров. Но вы можете попробовать обходной путь, с этой третьей стороны, вы можете найти способ использовать Node.js с Dart. Кроме того, вы можете следовать официальной документации Google , чтобы получить данные с помощью Node.js.

...