list - Flutter 在不同的个人资料页面中显示特定的项目列表
问题描述
我在 dart 中创建了 2 个类,用于颤振,第一个用于培训师的列表和个人资料页面,第二个用于培训。如果我想在他的个人资料页面中显示教练的培训列表,我该怎么办?例如火车“Ciccio”只有一个训练,我只想看到那个训练。
class IstruttoreClasse{
int idIstruttore;
String nome;
List allenamento;
IstruttoreClasse({
this.idIstruttore,this.nome, this.allenamento});
}
List<IstruttoreClasse> istruttori =[
IstruttoreClasse(
idIstruttore: 1,
nome: "Ciccio", ),
IstruttoreClasse(
idIstruttore: 2,
nome: "Valeria",
),
];
class Traing extends IstruttoreClasse{
String nomeTraing;
int idTraing ,numEsercizi, calorie, minuti, numSet ;
Traing({this.calorie,this.idTraing,this.minuti,this.nomeTraing,this.numEsercizi, this.numSet, int idIstruttore, String nome});
}
List<Traing> allenamentoList =[
Traing(
idIstruttore: 1,
nome: "Ciccio",
idTraing: 1,
calorie: 200,
minuti: 45,
numEsercizi: 12,
numSet: 2,
nomeTraing: "Totalbody"
),
Traing(
idIstruttore: 2,
nome: "Valeria",
idTraing: 2,
calorie: 200,
minuti: 45,
numEsercizi: 12,
numSet: 2,
nomeTraing: "Zumba"
),
];
这是个人资料页面代码
import 'package:flutter/material.dart';
import 'package:tesiapp/src/models/classeIstruttore.dart';
import 'package:tesiapp/theme/costanti.dart';
class ProfiloTrainer extends StatelessWidget {
final IstruttoreClasse istruttoreClasse;
const ProfiloTrainer({Key key, this.istruttoreClasse}) : super(key: key);
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: Colors.grey,
body: SafeArea(
child: Stack(
children: <Widget>[
Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.grey[300], Colors.grey[700]],
),
),
),
Positioned(
top: 0,
left: 0,
right: 0,
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: size.height * 0.06,
width: size.width * 1,
color: Colors.transparent,
child: Row(
children: [
InkWell(
onTap: () {
Navigator.pop(context);
},
child: Container(
child: Icon(Icons.arrow_back),
),
),
],
),
),
),
Padding(
padding:
const EdgeInsets.only(right: 8.0, left: 8.0, top: 45.0),
child: Container(
height: size.height * 0.3,
width: size.width * 1,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(30),
topRight: Radius.circular(30),
bottomLeft: Radius.circular(30),
bottomRight: Radius.circular(30),
),
color: Colors.transparent,
),
// color: Color.fromRGBO(255, 255, 255, 0.4)),
child: SingleChildScrollView(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(istruttoreClasse.nome,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 30)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("Guarino",
style: TextStyle(fontSize: 30)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"lore ipsum bio del trainer chi sono io e cosa faccio dove lavoro"),
)
],
),
),
),
],
),
),
),
),
Padding(
padding:
const EdgeInsets.only(top: 10.0, left: 8.0, right: 8.0),
child: Container(
height: size.height * 0.45,
width: size.width * 1,
decoration: BoxDecoration(
color: Colors.transparent,
// color: Color.fromRGBO(255, 255, 255, 0.4),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(25),
topRight: Radius.circular(25),
bottomLeft: Radius.circular(25),
bottomRight: Radius.circular(25),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("Allenemanti",
style: TextStyle(
fontWeight: FontWeight.bold, fontSize: 20)),
),
Expanded(
child: ListView.builder(
itemCount: allenamentoList.length,
itemBuilder: (context, index) =>
CasellaAllenamenti(size: size),
),
),
],
),
),
)
],
),
),
],
),
),
);
}
}
class CasellaAllenamenti extends StatelessWidget {
const CasellaAllenamenti({
Key key,
@required this.size,
}) : super(key: key);
final Size size;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
decoration: BoxDecoration(
color: Colors.transparent,
),
width: size.width * 0.65,
height: size.height * 0.20,
child: Stack(
children: [
Container(
decoration: BoxDecoration(
boxShadow: [kDefaultShadow],
color: Colors.blue,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(25),
topRight: Radius.circular(25),
bottomLeft: Radius.circular(25),
bottomRight: Radius.circular(25),
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
alignment: Alignment.bottomLeft,
child: Text(
"Totalbody",
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18),
),
),
),
],
),
),
Container(
height: size.height * 0.05,
width: size.width * 0.65,
decoration: BoxDecoration(
color: Colors.transparent,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Text(
"Tempo: m.45",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
),
Text(
"calorie: 350",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
)
],
),
),
],
),
);
}
}
解决方案
尝试这个
// ...
ListView.builder(
itemCount: allenamentoList.length,
itebrmBuilder: (context, index) {
return ListTile(
title: Text(allenamentoList[index].nome),
);
},
),
// ...
编辑
如果您想访问列表的特定项目,请提供这样的索引
Text(allenamentoList[0].nome),
推荐阅读
- python - 编译和执行在 C 中嵌入了 Python 的 C 文件时出现问题
- python - 如何在本文中生成像 taht 这样的颜色图?
- jupyter-notebook - 如何解决无法运行“xelatex .\notebook.tex -quiet”命令:notebook.tex:373:?
- python - 使用 matplotlib 生成交互式绘图时的图形问题
- javascript - 如何在浏览器中为附加到 html 的模块设置正确的命名空间,以测试函数对该模块中另一个函数的调用?
- reactjs - 努力在 React 应用程序中使用 Typescript 设置通用助手
- c++ - 如何使用基类函数访问派生类成员函数?
- c# - 如何计算 MessagePack .NET 对象的大小?
- python-3.x - 数据流管道(python)未将输出写入 GCS
- reactjs - useReducer 递增/递减 2 而不是 1