Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何在另一个类小部件中获取自定义有状态小部件值?_Dart_Flutter - Fatal编程技术网

Dart 如何在另一个类小部件中获取自定义有状态小部件值?

Dart 如何在另一个类小部件中获取自定义有状态小部件值?,dart,flutter,Dart,Flutter,在我的应用程序的第一页中,用户将选择1到10之间的编号,选择编号后,如果用户选择5,我的第二页将显示5级屏幕小部件,如wise,我可以使用下面的代码创建小部件,但我无法获得用户从我的GradeScreen小部件中的dropdownbutton小部件中选择的值 请帮助我从这个GradeScreen小部件获取值。 我是个新手。 提前谢谢 import 'package:flutter/material.dart'; class CalculateCGPAScreen extends Statele

在我的应用程序的第一页中,用户将选择1到10之间的编号,选择编号后,如果用户选择5,我的第二页将显示5级屏幕小部件,如wise,我可以使用下面的代码创建小部件,但我无法获得用户从我的GradeScreen小部件中的dropdownbutton小部件中选择的值

请帮助我从这个GradeScreen小部件获取值。 我是个新手。 提前谢谢

import 'package:flutter/material.dart';

class CalculateCGPAScreen extends StatelessWidget {
  final int noOfSubjectsCount;

  CalculateCGPAScreen(this.noOfSubjectsCount);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        children: noOfSubjects(noOfSubjectsCount),
      ),
    );
  }

  List<Widget> noOfSubjects(int subjectCount) {
    List<Widget> list = [];
    for (int i = 1; i <= subjectCount; i++) {
      list.add(GradeScreen("Subject $i", 1));
    }
    list.add(RaisedButton(
      onPressed: () {},
      color: Colors.amber,
      splashColor: Colors.amberAccent,
      child: Text("Calculate CGPA"),
    ));
    return list;
  }
}

class GradeScreen extends StatefulWidget {
  final String subjectName;
  final int gradeSystem;

  GradeScreen(this.subjectName, this.gradeSystem);

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _GradeScreenState();
  }
}

class _GradeScreenState extends State<GradeScreen> {
  String selectedGrade = "S";
  List<int> creditList = [1, 2, 3, 4, 5, 6];
  int selectedCredit = 1;

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: <Widget>[
        Text(widget.subjectName),
        DropdownButton(
          items: getGradeList(widget.gradeSystem).map((String loopValue) {
            return DropdownMenuItem(
              child: Text(loopValue),
              value: loopValue,
            );
          }).toList(),
          onChanged: (String value) {
            setState(() {
              selectedGrade = value;
            });
          },
          value: selectedGrade,
        ),
        DropdownButton(
          items: creditList.map((int credit) {
            return DropdownMenuItem(
              child: Text(credit.toString()),
              value: credit,
            );
          }).toList(),
          onChanged: (int value) {
            setState(() {
              selectedCredit = value;
            });
          },
          value: selectedCredit,
        )
      ],
    );
  }

  List<String> getGradeList(int option) {
    List<String> gradeSystem;
    if (option == 1) {
      gradeSystem = ['S', 'A', 'B', 'C', 'D', 'E'];
    } else {
      gradeSystem = ['O', 'A+', 'A', 'B+', 'B'];
    }
    return gradeSystem;
  }
}
导入“包装:颤振/材料.省道”;
类CalculateCGPAScreen扩展了无状态小部件{
最终int NOOFSUBJECTS;
CalculateCGPAScreen(this.noOfSubjectsCount);
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(),
正文:专栏(
儿童:noOfSubjects(noOfSubjectsCount),
),
);
}
列表noOfSubjects(int subjectCount){
列表=[];
对于(inti=1;i
import'package:flatter/material.dart';
类CalculateCGPAScreen扩展了无状态小部件{
最终int NOOFSUBJECTS;
CalculateCGPAScreen(this.noOfSubjectsCount);
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(),
正文:专栏(
儿童:noOfSubjects(noOfSubjectsCount),
),
);
}
列表noOfSubjects(int subjectCount){
列表=[];
对于(int i=1;i_数据;
}
类_GradeScreenState扩展状态{
字符串selectedGrade=“S”;
List creditList=[1,2,3,4,5,6];
int selectedCredit=1;
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回行(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
文本(widget.subjectName),
下拉按钮(
项目:getGradeList(widget.gradeSystem).map((字符串值){
返回下拉菜单项(
子项:文本(循环值),
value:loopValue,
);
}).toList(),
onChanged:(字符串值){
设置状态(){
selectedGrade=值;
});
},
值:selectedGrade,
),
下拉按钮(
项目:creditList.map((内部信用){
返回下拉菜单项(
子项:文本(credit.toString()),
价值:信用,
);
}).toList(),
onChanged:(int值){
设置状态(){
selectedCredit=值;
widget.data=selectedCredit;
});
},
值:selectedCredit,
)
],
);
}
列表getGradeList(int选项){
列表评分系统;
如果(选项==1){
成绩系统=['S','A','B','C','D','E'];
}否则{
成绩系统=['O'、'A+'、'A'、'B+'、'B'];
}
返回分级系统;
}
}
导入“包装:颤振/材料.飞镖”;
类CalculateCGPAScreen扩展了无状态小部件{
最终int NOOFSUBJECTS;
CalculateCGPAScreen(this.noOfSubjectsCount);
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(),
正文:专栏(
儿童:noOfSubjects(noOfSubjectsCount),
),
);
}
列表noOfSubjects(int subjectCount){
列表=[];
对于(int i=1;i_学分;
设置坡度(字符串值){
_等级=价值;
}
获取等级=>\u等级;
}
类_GradeScreenState扩展状态{
字符串selectedGrade=“S”;
List creditList=[1,2,3,4,5,6];
int selectedCredit=1;
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回行(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
文本(widget.subjectName),
下拉按钮(
项目:getGradeList(widget.gradeSystem).map((字符串值){
返回下拉菜单项(
子项:文本(循环值),
value:loopValue,
);
}).toList(),
onChanged:(字符串值){
设置状态(){
selectedGrade=值;
widget.grade=值;
});
},
值:selectedGrade,
),
下拉按钮(
项目:creditList.map((内部信用){
返回下拉菜单项(
子项:文本(credit.toString()),
价值:信用,
);
}).toList(),
onChanged:(int值){
设置状态(){
selectedCredit=值;
widget.credit=价值;
});
},
值:selectedCredit,
)
],
);
}
列表getGradeList(int选项){
列表评分系统;
如果(选项==1){
成绩系统=['S','A','B','C','D','E'];
}否则{
成绩系统=['O'、'A+'、'A'、'B+'、'B'];
}
返回分级系统;
}
}

更改下拉列表值,并将结果输入调试控制台。

这对我很有效,兄弟。非常感谢。我现在真的很高兴。
import 'package:flutter/material.dart';

class CalculateCGPAScreen extends StatelessWidget {
  final int noOfSubjectsCount;

  CalculateCGPAScreen(this.noOfSubjectsCount);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        children: noOfSubjects(noOfSubjectsCount),
      ),
    );
  }

  List<Widget> noOfSubjects(int subjectCount) {
    List<Widget> list = [];
    for (int i = 1; i <= subjectCount; i++) {
      list.add(GradeScreen("Subject $i", 1));
    }
    list.add(RaisedButton(
      onPressed: () {},
      color: Colors.amber,
      splashColor: Colors.amberAccent,
      child: Text("Calculate CGPA"),
    ));
    return list;
  }
}

class GradeScreen extends StatefulWidget {
  final String subjectName;
  final int gradeSystem;
  int _data;
  GradeScreen(this.subjectName, this.gradeSystem);

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _GradeScreenState();
  }

  set data(int value) {
    _data = value;
  }

  get data => _data;
}

class _GradeScreenState extends State<GradeScreen> {
  String selectedGrade = "S";
  List<int> creditList = [1, 2, 3, 4, 5, 6];
  int selectedCredit = 1;

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: <Widget>[
        Text(widget.subjectName),
        DropdownButton(
          items: getGradeList(widget.gradeSystem).map((String loopValue) {
            return DropdownMenuItem(
              child: Text(loopValue),
              value: loopValue,
            );
          }).toList(),
          onChanged: (String value) {
            setState(() {
              selectedGrade = value;
            });
          },
          value: selectedGrade,
        ),
        DropdownButton(
          items: creditList.map((int credit) {
            return DropdownMenuItem(
              child: Text(credit.toString()),
              value: credit,
            );
          }).toList(),
          onChanged: (int value) {
            setState(() {
              selectedCredit = value;
              widget.data = selectedCredit;
            });
          },
          value: selectedCredit,
        )
      ],
    );
  }

  List<String> getGradeList(int option) {
    List<String> gradeSystem;
    if (option == 1) {
      gradeSystem = ['S', 'A', 'B', 'C', 'D', 'E'];
    } else {
      gradeSystem = ['O', 'A+', 'A', 'B+', 'B'];
    }
    return gradeSystem;
  }
}
import 'package:flutter/material.dart';

class CalculateCGPAScreen extends StatelessWidget {
  final int noOfSubjectsCount;

  CalculateCGPAScreen(this.noOfSubjectsCount);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        children: noOfSubjects(noOfSubjectsCount),
      ),
    );
  }

  List<Widget> noOfSubjects(int subjectCount) {
    List<Widget> list = [];
    for (int i = 1; i <= subjectCount; i++) {
      list.add(GradeScreen("Subject $i", 1));
    }
    list.add(RaisedButton(
      onPressed: () {
        for (var item in list) {
          if (item is GradeScreen) {
            GradeScreen gs = item;
            print(gs.grade);
            print(gs.credit);
          }
        }
      },
      color: Colors.amber,
      splashColor: Colors.amberAccent,
      child: Text("Calculate CGPA"),
    ));
    return list;
  }
}

class GradeScreen extends StatefulWidget {
  final String subjectName;
  final int gradeSystem;
  int _credit;
  String _grade;
  GradeScreen(this.subjectName, this.gradeSystem);

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _GradeScreenState();
  }

  set credit(int value) {
    _credit = value;
  }

  get credit => _credit;

  set grade(String value) {
    _grade = value;
  }

  get grade => _grade;
}

class _GradeScreenState extends State<GradeScreen> {
  String selectedGrade = "S";
  List<int> creditList = [1, 2, 3, 4, 5, 6];
  int selectedCredit = 1;

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: <Widget>[
        Text(widget.subjectName),
        DropdownButton(
          items: getGradeList(widget.gradeSystem).map((String loopValue) {
            return DropdownMenuItem(
              child: Text(loopValue),
              value: loopValue,
            );
          }).toList(),
          onChanged: (String value) {
            setState(() {
              selectedGrade = value;
              widget.grade = value;
            });
          },
          value: selectedGrade,
        ),
        DropdownButton(
          items: creditList.map((int credit) {
            return DropdownMenuItem(
              child: Text(credit.toString()),
              value: credit,
            );
          }).toList(),
          onChanged: (int value) {
            setState(() {
              selectedCredit = value;
              widget.credit = value;
            });
          },
          value: selectedCredit,
        )
      ],
    );
  }

  List<String> getGradeList(int option) {
    List<String> gradeSystem;
    if (option == 1) {
      gradeSystem = ['S', 'A', 'B', 'C', 'D', 'E'];
    } else {
      gradeSystem = ['O', 'A+', 'A', 'B+', 'B'];
    }
    return gradeSystem;
  }
}