将字符串从另一个屏幕传递到另一个屏幕



我想将subjectCode值从我的可重用小部件传递到我的主题。这是我尝试过的

不可用的部件未来

class SubjectCard extends StatefulWidget {
final String link;
final String source;
final String subjectNo;
const SubjectCard({super.key, required this.link, required this.source, required this.subjectNo,});
@override
State<SubjectCard> createState() => _SubjectCardState();
}
class _SubjectCardState extends State<SubjectCard>{
String subjectName = '';
String subjectCode = '';
String profesor = '';
String day = '';
String start = '';
String end = '';
final uid = FirebaseAuth.instance.currentUser!.uid;
@override
void initState() {
super.initState();
_getSubjectsFromDatabase();
}
Future _getSubjectsFromDatabase() async {
await FirebaseFirestore.instance.collection("subjects").doc("subject list").get().then((snapshot)async{
if(snapshot.exists){
setState((){
try {Map<String, dynamic> docData = snapshot.data() as Map<String, dynamic>;
subjectCode = (docData[widget.subjectNo] as Map<String, dynamic>)["code"];
subjectName = (docData[widget.subjectNo] as Map<String, dynamic>)["subject name"];
day = (docData[widget.subjectNo] as Map<String, dynamic>)["day"];
profesor = (docData[widget.subjectNo] as Map<String, dynamic>)["professor"];
start = (docData[widget.subjectNo] as Map<String, dynamic>)["time start"];
end = (docData[widget.subjectNo] as Map<String, dynamic>)["time end"];
} on StateError catch(e) {
print('No nested field exists!');
}      
});
}
});
// final List<DocumentSnapshot> documents = result.snapshot;
}

Subject.dart

String linkImage(subjectCode){
if(subjectCode == "THEN"){
link = "assets/images/MajorApp Icon Design 1.png";
}else if(subjectCode == "CSDC"){
link = "assets/images/MajorApp Icon Design.png";
}
return link;
}

SubjectCard(link: linkImage(subjectCode), source: '', subjectNo: 'SUBJECT 3'),

我正试图通过资产路径并由subjectNo input EX SUBJECT 3确定

有几种方法,首先是回调:

typedef OnSubjectCodeLoaded = void Function(String SubjectCode);
class SubjectCard extends StatefulWidget {
final String link;
final String source;
final String subjectNo;
/// callback when data sucessfully fecthed from db
final OnSubjectCodeLoaded onSubjectCodeLoaded;
......
Future _getSubjectsFromDatabase() async {
...............
subjectCode = (docData[widget.subjectNo] as Map<String, dynamic>)["code"];
//pass your callback data
onSubjectCodeLoaded(subjectCode);
.......

或全局保存变量,在riverpodbloc等状态管理包的帮助下监听

最新更新