怎么样了?由于我是 Flutter 新手并且没有太多示例,因此我想知道如何从 ListView 中选择一个项目并将数据传递到新屏幕以分析所选对象。
我的 ListView 的代码是:
class Page extends StatelessWidget {
@required
final Text title; //Titulo a mostrar
@required
final Future<List<Negocio>> list;
Page({this.title, this.list});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: this.title,
),
body: FutureBuilder<List<Negocio>>(
future: list,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
ListTile(
title: Text(snapshot.data[index].title),
onTap: () {
//ACA SUPONGO QUE IRIA ITEM SELECCIONADO.
},
);
Negocio negocio = snapshot.data[index];
return NegocioItem(
negocio: negocio,
);
});
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
// By default, show a loading spinner
return Center(
child: CircularProgressIndicator(),
);
},
),
);
}
}
class NegocioItem extends StatelessWidget {
@required
final Negocio negocio;
NegocioItem({this.negocio});
@override
Widget build(BuildContext context) {
return GestureDetector(
//onTap: _launchURL,
child: Card(
child: Padding(
padding: EdgeInsets.all(10),
child: Column(
children: <Widget>[
Row(
children: <Widget>[
Image.network(
negocio.imageUrl,
width: 90,
),
Expanded(
child: Text(
negocio.title,
style:
TextStyle(fontWeight: FontWeight.bold, fontSize: 22),
textAlign: TextAlign.center,
),
),
],
),
Text(negocio.description),
/* Align(
alignment: Alignment.centerRight,
child: Text(
negocio.fecha,
textAlign: TextAlign.right,
style: TextStyle(fontSize: 15, color: Colors.green),
),
)*/
],
),
),
),
);
}
}
小部件
ListTile
未被使用,您必须将其移除。您只需返回到小部件NegocioItem
,您可以在此处执行调用另一个屏幕并发送数据的操作,例如:页
业务项目
对于示例,我将创建一个
DetailPage
接收对象negocio
作为属性的对象。