首页 > 解决方案 > 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),
                )
              ],
            ),
          ),
        ],
      ),
    );
  }
}

标签: listflutterdartprofile

解决方案


尝试这个

// ...

ListView.builder(
  itemCount: allenamentoList.length,
  itebrmBuilder: (context, index) {
    return ListTile(
      title: Text(allenamentoList[index].nome),
    );
  },
),

// ...

编辑
如果您想访问列表的特定项目,请提供这样的索引

Text(allenamentoList[0].nome),

推荐阅读