Firebase 如何将特定的ListTile变量传递给新页面路由onTap?
我的代码构建了ListTile的ListView,每个ListTile都从CloudFireStore数据库获取数据 当我激活ListTile的onTap时,我希望路由到一个新页面,并将该tile的特定数据传递到新页面 我正在构建列表视图的页面已经毫无问题地向其传递了变量,但是我无法在该页面上使用相同的方法 我对飞镖和飞镖还不太熟悉。我的第一个假设是,也许它需要一个有状态的小部件来完成这个任务?然而,我并不完全确定如何实现这一点Firebase 如何将特定的ListTile变量传递给新页面路由onTap?,firebase,dart,flutter,google-cloud-firestore,Firebase,Dart,Flutter,Google Cloud Firestore,我的代码构建了ListTile的ListView,每个ListTile都从CloudFireStore数据库获取数据 当我激活ListTile的onTap时,我希望路由到一个新页面,并将该tile的特定数据传递到新页面 我正在构建列表视图的页面已经毫无问题地向其传递了变量,但是我无法在该页面上使用相同的方法 我对飞镖和飞镖还不太熟悉。我的第一个假设是,也许它需要一个有状态的小部件来完成这个任务?然而,我并不完全确定如何实现这一点 import 'package:flutter/material.
import 'package:flutter/material.dart';
import 'package:menu/screens/menu/detail.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_storage/firebase_storage.dart';
class Menu extends StatelessWidget {
final String barcode;
// receive data from the FirstScreen as a parameter
Menu({Key key, @required this.barcode}) : super(key: key);
Widget _buildListItem(BuildContext context, DocumentSnapshot document) {
return ListTile(
leading: Icon(Icons.fastfood),
title: Text(document['item'] ?? '*name*'),
subtitle: Text( document['description'] ?? '*description*'),
isThreeLine: true,
onTap: (){
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Detail(),
),);
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Menu'),
),
body: StreamBuilder(
stream: Firestore.instance.collection(barcode).snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return const Text('loading...');
return ListView.builder(
itemExtent: 80.0,
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) =>
_buildListItem(context, snapshot.data.documents[index]),
);
}),
);
}
}
将
文档
作为参数传递给详细信息
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Detail(document), // <-- document instance
),);
如中所述,我以前尝试过此操作,但它抛出错误:“位置参数太多:预期为0,但发现一个”您需要在
Detail
小部件中添加document
作为参数,或者如果使用命名参数,则Detail(document:document)
class Detail extends ... {
Detail(this.document);
final DocumentSnapshot document;
}