#flutter #materialpageroute
Вопрос:
Я создал одно приложение, в котором извлекаются все имена групп. Теперь мне нужна функциональность, в которой, если я нажму на название группы «Техническая», я буду перенаправлен на страницу пользовательского интерфейса технической группы. Когда я нажму на название группы «Медицинская», я буду перенаправлен на страницу пользовательского интерфейса медицинской группы и аналогичным образом. Пользовательский интерфейс всех страниц отличается. Я использовал firebase в качестве бэкенда. Я новичок в флаттере и буду очень благодарен вам, если вы сможете мне помочь.
Исходный код group_chat_screen.dart:
import 'package:chat_app/group_chats/create_group/add_members.dart';
import 'package:chat_app/group_chats/group_chat_room.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class GroupChatHomeScreen extends StatefulWidget {
const GroupChatHomeScreen({Key? key}) : super(key: key);
@override
_GroupChatHomeScreenState createState() => _GroupChatHomeScreenState();
}
class _GroupChatHomeScreenState extends State<GroupChatHomeScreen> {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
final FirebaseAuth _auth = FirebaseAuth.instance;
bool isLoading = true;
List groupList = [];
@override
void initState() {
super.initState();
getAvailableGroups();
}
void getAvailableGroups() async {
String uid = _auth.currentUser!.uid;
await _firestore
.collection('users')
.doc(uid)
.collection('groups')
.get()
.then((value) {
setState(() {
groupList = value.docs;
isLoading = false;
});
});
}
@override
Widget build(BuildContext context) {
final Size size = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
title: Text("Groups"),
),
body: isLoading
? Container(
height: size.height,
width: size.width,
alignment: Alignment.center,
child: CircularProgressIndicator(),
)
: ListView.builder(
itemCount: groupList.length,
itemBuilder: (context, index) {
return ListTile(
onTap: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => GroupChatRoom(
groupName: groupList[index]['name'],
groupChatId: groupList[index]['id'],
),
),
),
leading: Icon(Icons.group),
title: Text(groupList[index]['name']),
);
},
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.create),
onPressed: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => AddMembersInGroup(),
),
),
tooltip: "Create Group",
),
);
}
}
Исходный код group_chat_room.dart:
import 'package:chat_app/group_chats/group_info.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class GroupChatRoom extends StatelessWidget {
final String groupChatId, groupName;
GroupChatRoom({required this.groupName, required this.groupChatId, Key? key})
: super(key: key);
final TextEditingController _message = TextEditingController();
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
final FirebaseAuth _auth = FirebaseAuth.instance;
@override
Widget build(BuildContext context) {
final Size size = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
title: Text(groupName),
actions: [
IconButton(
onPressed: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => GroupInfo(
groupName: groupName,
groupId: groupChatId,
),
),
),
icon: Icon(Icons.more_vert)),
],
),
);
}
}
Ответ №1:
это очень просто, просто проверьте имя своей группы в onTap и в соответствии с вашим именем группы используйте условие «если еще» и перейдите на этот экран:
ListView.builder(
itemCount: groupList.length,
itemBuilder: (context, index) {
return ListTile(
onTap: () {
if(groupList[index]['name']=="Technical"){
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => TechnicalChatRoom(
groupName: groupList[index]['name'],
groupChatId: groupList[index]['id'],
),
),
}
if(groupList[index]['name']=="Arts"){
MaterialPageRoute(
builder: (_) => ArtsChatRoom(
groupName: groupList[index]['name'],
groupChatId: groupList[index]['id'],
),
),
and so on
.......
...
}
),}
,
leading: Icon(Icons.group),
title: Text(groupList[index]['name']),
);
},
),
Комментарии:
1. Большое вам спасибо!!