【问题标题】:Pass string from another screen to another将字符串从另一个屏幕传递到另一个屏幕
【发布时间】:2022-12-07 00:49:22
【问题描述】:

我想将 subjectCode 值从我的可重用小部件传递到我的 subject.dart 这是我尝试过的

可重复使用的小部件未来

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;
  }

主题.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 输入 EX SUBJECT 3 确定

【问题讨论】:

    标签: android flutter if-statement conditional-statements


    【解决方案1】:

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

    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之类的状态管理包的帮助下收听它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 2017-01-07
      • 2019-07-10
      • 2019-01-18
      • 2020-11-14
      • 2021-04-01
      相关资源
      最近更新 更多