首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从防火墙数据创建列表

如何从防火墙数据创建列表
EN

Stack Overflow用户
提问于 2021-10-02 08:51:04
回答 1查看 102关注 0票数 0

我想从消防局数据中创建列表,以便在文本字段中添加建议/自动完成,有什么帮助吗?

示例列表:

代码语言:javascript
复制
  static final List<String> commodity = [
    'Banana',
    'Mango',
    'Orange',
  ];

从火药库通缉名单:

代码语言:javascript
复制
 static getSuggestion(String suggestion) async =>
      await FirebaseFirestore.instance
          .collection("QFS")
          .where('commodity', isEqualTo: suggestion)
          .get()
          .then((snap) {
        return snap.docs;
      });
}

我的全部代码:

代码语言:javascript
复制
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  var _selectedCommodity1;
  var _selectedCommodity2;
  TextEditingController commodityFiled1 = TextEditingController();
  TextEditingController commodityFiled2 = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Scaffold(
            appBar: AppBar(
              title: const Text("QFS"),
            ),
            body: Form(
                child: Container(
                    padding: const EdgeInsets.only(
                        top: 5, bottom: 10, right: 20, left: 20),
                    child: Column(children: [
                      TypeAheadFormField(
                        textFieldConfiguration: TextFieldConfiguration(
                            controller: commodityFiled1,
                            decoration: const InputDecoration(
                                labelText: 'Commodity1',
                                icon: Icon(
                                  Icons.receipt_rounded,
                                  color: Colors.black87,
                                ))),
                        suggestionsCallback: (pattern) {
                          return CommodityService.getSuggestions(pattern);
                        },
                        itemBuilder: (context, String suggestion) {
                          return ListTile(
                            title: Text(suggestion),
                          );
                        },
                        transitionBuilder:
                            (context, suggestionsBox, controller) {
                          return suggestionsBox;
                        },
                        onSuggestionSelected: (String suggestion) {
                          commodityFiled1.text = suggestion;
                        },
                        onSaved: (value) => _selectedCommodity1 = value!,
                      ),
                      TypeAheadFormField(
                        textFieldConfiguration: TextFieldConfiguration(
                            controller: commodityFiled2,
                            decoration: const InputDecoration(
                                labelText: 'Commodity2',
                                icon: Icon(
                                  Icons.receipt_rounded,
                                  color: Colors.black87,
                                ))),
                        suggestionsCallback: (pattern) {
                          return getSuggestion(pattern);
                        },
                        itemBuilder: (context, dynamic suggestion) {
                          return ListTile(
                            title: Text(suggestion),
                          );
                        },
                        transitionBuilder:
                            (context, suggestionsBox, controller) {
                          return suggestionsBox;
                        },
                        onSuggestionSelected: (dynamic suggestion) {
                          commodityFiled2.text = suggestion;
                        },
                        onSaved: (value) => _selectedCommodity2 = value!,
                      ),
                    ])))));
  }

  static getSuggestion(String suggestion) async =>
      await FirebaseFirestore.instance
          .collection("QFS")
          .where('commodity', isEqualTo: suggestion)
          .get()
          .then((snap) {
        return snap.docs;
      });
}

class CommodityService {
  static final List<String> commodity = [
    'Banana',
    'Mango',
    'Orange',
  ];

  static List<String> getSuggestions(String query) {
    List<String> matches = [];
    matches.addAll(commodity);
    matches.retainWhere((s) => s.toLowerCase().contains(query.toLowerCase()));
    return matches;
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-02 09:08:49

Clarification:据我理解,您的集合中有文档,其中每个文档都具有属性commodity (类型为String__),并且只想获取具有特定商品的文档。

打开GoogleFi还原数据库仪表板,检查哪些类型可以拥有您的集合文档。

单击Add document检查类型。

检查一下修复文档

snapshot.data内部,有docs (您收集的每个文档)。

代码来自文档:

代码语言:javascript
复制
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: _usersStream,
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) {
          return Text('Something went wrong');
        }

        if (snapshot.connectionState == ConnectionState.waiting) {
          return Text("Loading");
        }

        return ListView(
          children: snapshot.data!.docs.map((DocumentSnapshot document) {
          Map<String, dynamic> data = document.data()! as Map<String, dynamic>;
            return ListTile(
              title: Text(data['full_name']),
              subtitle: Text(data['company']),
            );
          }).toList(),
        );
      },
    );
  }

上面的代码显示了如何将每个文档(类型为DocumentSnapshot)转换为JSON格式(可以用Map<String, dynamic>表示)。要访问您的字段commodity (键入String),请放置此data['commodity']。对于doc id,您需要使用document.id进行访问,因为它不在document.data()方法中。

然后在suggestionCallback上(我读了“TypeAheadField of API接口”,您必须返回某种类型的列表(这是一个可链接的) (比如List<String>) )。

我以前从未试过这个颤振包,但我会编辑getSuggestion()

代码语言:javascript
复制
static Future<List<String>> getSuggestion(String suggestion) async =>
      return await FirebaseFirestore.instance
          .collection("QFS")
          .where('commodity', isEqualTo: suggestion)
          .get()
          .then((snap) {
            final docs = snap.data!.docs;

            return docs.map((DocumentSnapshot document) {
              Map<String, dynamic> data = document.data()! as Map<String, dynamic>;
              return data['<fieldname of your document, e.g., "country" or "commodity"'];

          }).toList(),
      });

在注释部分写出您的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69415389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档