Список в класс показывает его после кликабельного ListView.builder в flutter

#flutter #class #listview #dart #navigator

#трепетание #класс #просмотр списка #дротик #навигатор

Вопрос:

Я создал эти классы и этот список, чтобы сделать его интерактивным в flutter с помощью ListView.builder. Когда я нажимаю на имя, я попадаю на страницу клана. Как мне показать список участников в классе клана и сделать его доступным для просмотра на «Странице профиля участника»? или есть другой способ сделать это?

Это и есть классы

 class Clan{
  String name;int member;DateTime born;
  List<MemberClan> listMemberClan;
  List<Videogame> listVieogame;
  Clan ({this.born,this.member,this.name, this.listMemberClan, this.listVieogame});
}

class MemberClan{
  String memberClanName, email; int age;
  List<Videogame> memberVideogamelist;
  MemberClan({this.age,this.email,this.memberClanName, this.memberVideogamelist});
}

class Videogame{
  String videogameName, softwarehouse, type;
  Videogame({this.softwarehouse,this.videogameName,this.type});
}

List<Clan> clanList =[
  Clan(
    name: "Wof",
    member: 2,
    listMemberClan: [
      MemberClan(
        memberClanName: "redwolf",
        email: "redwolf@email.com",
        memberVideogamelist: [
          Videogame(
            videogameName: "fifa20",
            softwarehouse: "Ea",
            type: "sport"
          ),
        ]
      ),
      MemberClan(
        memberClanName: "shaps",
        email: "shaps@email.com",
        memberVideogamelist: [
          Videogame(
            videogameName: "fifa21",
            softwarehouse: "Ea",
            type: "sport"
          ),
          Videogame(
            videogameName: "callofduty MW",
            softwarehouse: "Activision",
            type: "fps"
          ),
        ]
      ),
    ],
  ),
  Clan(
    name: "Ika",
    member: 1,
     listMemberClan: [
      MemberClan(
        memberClanName: "stinfo",
        email: "stinfo@email.com",
        memberVideogamelist: [
          Videogame(
            videogameName: "Call Of Duty: MW",
            softwarehouse: "Activision",
            type: "fps"
          ),
        ]
      ),
    ],
    
  ),
];
 

это простой виджет для списка, а clanpage — это просто простой пример, в котором нет пользовательского интерфейса

 class ClanList extends StatelessWidget {
  final Clan clan;
  final MemberClan memberClan;
  final Videogame videogame;

  const ClanList({Key key, this.clan, this.memberClan, this.videogame})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Expanded(
          child: ListView.builder(
            itemCount: clanList.length,
            itemBuilder: (context, index) => InkWell(onTap: (){Navigator.push(context, MaterialPageRoute(builder: (context)=> ClanPage(clan: clanList[index],)));},
                          child: ListTile(
                title: Text(clanList[index].name),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

class ClanPage extends StatelessWidget {
  final Clan clan;
  final MemberClan memberClan;
  final Videogame videogame;

  const ClanPage({Key key, this.clan, this.memberClan, this.videogame})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Column(
          children: [
            Text(clan.name),
            Text(clan.member.toString()),
            //here i want show a clickable list of the member
            //and tap or clik on name I want show the member profilepage
          ],
        ),
      ),
    );
  }
}

 

Ответ №1:

В вашем классе clan добавьте следующий код:-

 class ClanPage extends StatelessWidget {
  final Clan clan;
  final MemberClan memberClan;
  final Videogame videogame;

  const ClanPage({Key key, this.clan, this.memberClan, this.videogame})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Expanded(
          child: ListView.builder(
            itemCount: clan.listMemberClan.length,
            itemBuilder: (context, index) => ListTile(
              onTap: (){Navigator.push(context, MaterialPageRoute(builder: (context)=> MemberPage(memberClan: clan.listMemberClan[index],)));},
              title: Text(clan.listMemberClan[index]),
            ),
          ),
        ),
      ),
    );
  }
}

class MemberPage extends StatelessWidget {
  final MemberClan memberClan;
  const ClanPage({this.memberClan});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        //show your details here like:-
        child:Text(memberClan.email),
      )
    );
  }
} 

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

1. спасибо, то же самое думаю, если я хочу добавить больше информации, я просто делаю то же самое, думаю, большое вам спасибо

2. нет проблем, если вы нашли это полезным, нажмите «галочку», чтобы принять ответ. «Галочка» будет присутствовать в начале ответа.