我想从消防局数据中创建列表,以便在文本字段中添加建议/自动完成,有什么帮助吗?
示例列表:
static final List<String> commodity = [
'Banana',
'Mango',
'Orange',
];从火药库通缉名单:
static getSuggestion(String suggestion) async =>
await FirebaseFirestore.instance
.collection("QFS")
.where('commodity', isEqualTo: suggestion)
.get()
.then((snap) {
return snap.docs;
});
}我的全部代码:
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;
}
}发布于 2021-10-02 09:08:49
Clarification:据我理解,您的集合中有文档,其中每个文档都具有属性commodity (类型为String__),并且只想获取具有特定商品的文档。
打开GoogleFi还原数据库仪表板,检查哪些类型可以拥有您的集合文档。

单击Add document检查类型。

检查一下修复文档。
在snapshot.data内部,有docs (您收集的每个文档)。
代码来自文档:
@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()
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(),
});在注释部分写出您的解决方案。
https://stackoverflow.com/questions/69415389
复制相似问题