Отображение определенного списка элементов на разных страницах профиля

#list #flutter #dart #profile

#Список #flutter #dart #Профиль

Вопрос:

Я создал 2 класса в dart для использования во flutter, первый используется для списка и страницы профиля для тренера, второй класс предназначен для обучения. если я хочу показать список тренировок инструктора на его странице профиля, что я могу сделать? например, у поезда «Ciccio» есть только Traing, и я хочу видеть только этот traing.

  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),
                )
              ],
            ),
          ),
        ],
      ),
    );
  }
}
 

Ответ №1:

Попробуйте это

 // ...

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

// ...
 

Редактировать
Если вы хотите получить доступ к определенному элементу вашего списка, укажите его индекс следующим образом

 Text(allenamentoList[0].nome),
 

Комментарии:

1. это не то, что я хочу, например, показать 2 списка с именем тренера, в моем случае это «Ciccio» и «Valeria». На странице профиля «Ciccio» я хочу видеть только то, что Ciccio обучает тому же, что и на странице профиля «Valeria».

2. нет, он создает список из 2 (2 — длина списка) элементов с тем же именем элемента, который я выбрал для отображения. Я думаю, что проблема в itemcount, но я не понимаю, как я могу это сделать

3. Чего вы действительно хотите?

4. У меня есть ListView.buildier, который можно щелкнуть с длиной списка «istruttori», в моем случае это 2 элемента (Ciccio и Valeria), я хочу, чтобы, если я перейду на страницу профиля Ciccio, я увидел список с единственными элементами из общего списка Ciccio, если я нажму на «Ciccio»,то же самое, если нажать на «Valeria»