Flutter 在有状态小部件中传递数据以用于firestore查询
在我的应用程序的初始(第一)页面中,我有一个下拉列表,其中包含从到的变量Flutter 在有状态小部件中传递数据以用于firestore查询,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,在我的应用程序的初始(第一)页面中,我有一个下拉列表,其中包含从到的变量。在第二个页面中,处理firestore查询所选项目是否存在。但使用我的方法,我将这些数据传递给下一个,并将它们显示为文本,但不适用于firestore 第一个屏幕代码 class _OtherState extends State<Other> { var from = [ 'Addis Ababa', 'Adama', 'Dire Dawa', 'Ali Sabieh', 'Djibouti'
。在第二个页面中,处理firestore查询所选项目是否存在。但使用我的方法,我将这些数据传递给下一个,并将它们显示为文本,但不适用于firestore
第一个屏幕代码
class _OtherState extends State<Other> {
var from = [
'Addis Ababa', 'Adama', 'Dire Dawa', 'Ali Sabieh', 'Djibouti'
];
var fromSel = 'Addis Ababa';
var to = [
'Addis Ababa', 'Adama', 'Dire Dawa', 'Ali Sabieh', 'Djibouti'
];
var toSel = 'Djibouti';
@override
Widget build(BuildContext context) {
Scaffold(
body: Column(
children:[
DropdownButton<String>(
underline: Container(color: Colors.transparent),
items: from.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value, style: TextStyle(
fontSize: 18
),),
);
}).toList(),
isExpanded: true,
isDense: false,
elevation: 5,
hint: Text('From'),
value: fromSel,
onChanged: (String newValue){
setState(() {
this.fromSel = newValue;
});
}),
DropdownButton<String>(
underline: Container(color: Colors.transparent),
items: to.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value, style: TextStyle(
fontSize: 18
),),
);
}).toList(),
isExpanded: true,
isDense: false,
elevation: 5,
hint: Text('to'),
value: toSel,
onChanged: (String newValue){
setState(() {
this.toSel = newValue;
});
}),
MaterialButton(
onPressed(){
Navigator.of(context).push(MaterialPageRoute(builder: (context) => Search(
from: fromSel,
to: toSel,
depart: _startDate,
arrive: _endDate,
seat: _options[_selectedIndex],
adult: adultSel.toString(),
child: childSel.toString(),
infant: infantSel.toString(),
)));
}
)
]
)
);
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:demo/BookingPages/budget.dart';
import 'package:demo/Lists/trip.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class Search extends StatefulWidget {
var from, to, seat, adult, child, infant;
final DateTime arrive, depart;
Search(
{Key key, this.from, this.to, this.seat, this.arrive, this.depart, this.adult, this.infant, this.child})
: super(key: key);
@override
_SearchState createState() => _SearchState(from: from, to: to, seat: seat, adult: adult, child: child, infant: infant, arrive: arrive, depart: depart);
}
class _SearchState extends State<Search> {
var from, to, seat, adult, child, infant;
final DateTime arrive, depart;
_SearchState(
{Key key, this.from, this.to, this.seat, this.arrive, this.depart, this.adult, this.infant, this.child});
Stream<QuerySnapshot> comparision(BuildContext context) async* {
try{
yield* Firestore.instance
.collection('Schedules')
.where('from', isEqualTo: '${from.toString()}')
.where('to', isEqualTo: '${to.toString()}')
// .where('dates', arrayContains: widget.depart.day)
.snapshots();
}catch(e){
print(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder<QuerySnapshot>(
stream: comparision(context),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot>snapshot) {
if (!snapshot.hasData)
return Center(child: CircularProgressIndicator());
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index){
DocumentSnapshot power = snapshot.data.documents[index];
return Container(
height: 200,
width: MediaQuery.of(context).size.width,
child: Column(
children: [
Text(power['from']),
Text(power['to'])
],
),
);
}
);
},
)
);
}
}
class TripCard extends StatefulWidget {
@override
_TripCardState createState() => _TripCardState();
}
class _TripCardState extends State<TripCard> {
@override
Widget build(BuildContext context) {
return Container();
}
}
class\u其他状态扩展状态{
变量自=[
“亚的斯亚贝巴”、“阿达玛”、“德雷达瓦”、“阿里·萨比耶”、“吉布提”
];
var fromSel=‘亚的斯亚贝巴’;
变量至=[
“亚的斯亚贝巴”、“阿达玛”、“德雷达瓦”、“阿里·萨比耶”、“吉布提”
];
var toSel=‘吉布提’;
@凌驾
小部件构建(构建上下文){
脚手架(
正文:专栏(
儿童:[
下拉按钮(
下划线:容器(颜色:颜色。透明),
项:from.map((字符串值){
返回下拉菜单项(
价值:价值,
子项:文本(值,样式:TextStyle(
尺寸:18
),),
);
}).toList(),
是的,
isDense:错,
标高:5,
提示:文本('From'),
值:fromSel,
onChanged:(字符串newValue){
设置状态(){
this.fromSel=newValue;
});
}),
下拉按钮(
下划线:容器(颜色:颜色。透明),
项:to.map((字符串值){
返回下拉菜单项(
价值:价值,
子项:文本(值,样式:TextStyle(
尺寸:18
),),
);
}).toList(),
是的,
isDense:错,
标高:5,
提示:文本('to'),
价值:托塞尔,
onChanged:(字符串newValue){
设置状态(){
this.toSel=新值;
});
}),
材料按钮(
onPressed(){
Navigator.of(context).push(MaterialPageRoute(builder:(context)=>Search(
发件人:fromSel,
致:托塞尔,
出发:出发日期:,
到达日期:_endDate,
座位:_选项[_选择的索引],
成人:成人选择。toString(),
child:childSel.toString(),
婴儿:婴儿选择。toString(),
)));
}
)
]
)
);
}
}
第二屏幕代码
class _OtherState extends State<Other> {
var from = [
'Addis Ababa', 'Adama', 'Dire Dawa', 'Ali Sabieh', 'Djibouti'
];
var fromSel = 'Addis Ababa';
var to = [
'Addis Ababa', 'Adama', 'Dire Dawa', 'Ali Sabieh', 'Djibouti'
];
var toSel = 'Djibouti';
@override
Widget build(BuildContext context) {
Scaffold(
body: Column(
children:[
DropdownButton<String>(
underline: Container(color: Colors.transparent),
items: from.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value, style: TextStyle(
fontSize: 18
),),
);
}).toList(),
isExpanded: true,
isDense: false,
elevation: 5,
hint: Text('From'),
value: fromSel,
onChanged: (String newValue){
setState(() {
this.fromSel = newValue;
});
}),
DropdownButton<String>(
underline: Container(color: Colors.transparent),
items: to.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value, style: TextStyle(
fontSize: 18
),),
);
}).toList(),
isExpanded: true,
isDense: false,
elevation: 5,
hint: Text('to'),
value: toSel,
onChanged: (String newValue){
setState(() {
this.toSel = newValue;
});
}),
MaterialButton(
onPressed(){
Navigator.of(context).push(MaterialPageRoute(builder: (context) => Search(
from: fromSel,
to: toSel,
depart: _startDate,
arrive: _endDate,
seat: _options[_selectedIndex],
adult: adultSel.toString(),
child: childSel.toString(),
infant: infantSel.toString(),
)));
}
)
]
)
);
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:demo/BookingPages/budget.dart';
import 'package:demo/Lists/trip.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class Search extends StatefulWidget {
var from, to, seat, adult, child, infant;
final DateTime arrive, depart;
Search(
{Key key, this.from, this.to, this.seat, this.arrive, this.depart, this.adult, this.infant, this.child})
: super(key: key);
@override
_SearchState createState() => _SearchState(from: from, to: to, seat: seat, adult: adult, child: child, infant: infant, arrive: arrive, depart: depart);
}
class _SearchState extends State<Search> {
var from, to, seat, adult, child, infant;
final DateTime arrive, depart;
_SearchState(
{Key key, this.from, this.to, this.seat, this.arrive, this.depart, this.adult, this.infant, this.child});
Stream<QuerySnapshot> comparision(BuildContext context) async* {
try{
yield* Firestore.instance
.collection('Schedules')
.where('from', isEqualTo: '${from.toString()}')
.where('to', isEqualTo: '${to.toString()}')
// .where('dates', arrayContains: widget.depart.day)
.snapshots();
}catch(e){
print(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder<QuerySnapshot>(
stream: comparision(context),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot>snapshot) {
if (!snapshot.hasData)
return Center(child: CircularProgressIndicator());
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index){
DocumentSnapshot power = snapshot.data.documents[index];
return Container(
height: 200,
width: MediaQuery.of(context).size.width,
child: Column(
children: [
Text(power['from']),
Text(power['to'])
],
),
);
}
);
},
)
);
}
}
class TripCard extends StatefulWidget {
@override
_TripCardState createState() => _TripCardState();
}
class _TripCardState extends State<TripCard> {
@override
Widget build(BuildContext context) {
return Container();
}
}
import'包:cloud_firestore/cloud_firestore.dart';
导入“package:demo/BookingPages/budget.dart”;
导入“包:演示/列表/trip.dart”;
进口“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
类搜索扩展了StatefulWidget{
变量从、到、座椅、成人、儿童、婴儿;
最后日期时间到达,离开;
搜寻(
{钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙钥匙
:super(key:key);
@凌驾
_SearchState createState()=>\u SearchState(从:从,到:到,座位:座位,成人:成人,儿童:儿童,婴儿:婴儿,到达:到达,离开:离开);
}
类_SearchState扩展了状态{
变量从、到、座椅、成人、儿童、婴儿;
最后日期时间到达,离开;
_搜索状态(
{Key Key Key,this.from,this.to,this.seat,this.到达,this.deep,this.成人,this.baby,this.child});
流比较(BuildContext上下文)异步*{
试一试{
yield*Firestore.instance
.collection(“明细表”)
.where('from',isEqualTo:'${from.toString()}')
.where('to',isEqualTo:'${to.toString()}')
//.where('dates',arrayContains:widget.deep.day)
.快照();
}捕获(e){
印刷品(e);
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:StreamBuilder(
流:比较(上下文),
生成器:(BuildContext上下文,AsyncSnapshotsnapshot){
如果(!snapshot.hasData)
返回中心(子项:CircularProgressIndicator());
返回ListView.builder(
itemCount:snapshot.data.documents.length,
itemBuilder:(上下文,索引){
DocumentSnapshot power=snapshot.data.documents[index];
返回容器(
身高:200,
宽度:MediaQuery.of(context).size.width,
子:列(
儿童:[
文本(power['from']),
文本(幂['to'])
],
),
);
}
);
},
)
);
}
}
类TripCard扩展了StatefulWidget{
@凌驾
_TripCardState createState();
}
类_TripCardState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回容器();
}
}
因此,在第二页中,这些数据在文本小部件中起作用,但在firestore查询中不起作用
我怎样才能解决这个问题