我正在制作一个全局组件文件,在其中制作一些我想在整个应用程序中使用的通用小部件。
但是我停留在要使用按钮的位置,而我正在使用材质的按钮,因此我想将“类别名称”传递给Route,我要使用该按钮进行重定向。
我不知道如何通过
这是Global.dart,我在其中制作了一个btn小部件以在全球使用它。
class Proceedbtn extends StatelessWidget {
final String Btntext;
final String redirecto;
Proceedbtn({this.Btntext, this.redirecto});
@override
Widget build(BuildContext context) {
return Material(
elevation: 1.0,
borderRadius: BorderRadius.circular(30.0),
color: Colors.butonColor,
child: MaterialButton(
height: 5,
minWidth: MediaQuery
.of(context)
.size
.width,
padding: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 0.0),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => redirecto()),
);
}
));
}
}
这是我要使用proce btn小部件的页面
class UseProceedBtn extends StatefulWidget {
_UseProceedBtnState createState() => _UseProceedBtnState();
}
class _UseProceedBtnState extends State<UseProceedBtn> {
@override
Widget build(BuildContext context) {
return Container(
child: Proceedbtn('Proceed next','NextPage');
)
这是NextPage.dart
class NextPage extends StatefulWidget {
_NextPageState createState() => _NextPageState();
}
class _NextPageState extends State<NextPage> {
@override
Widget build(BuildContext context) {
return Container(
child: Text('this is Next Page')
)
}
}
答案 0 :(得分:2)
您可以使用另一种方法:
class Proceedbtn extends StatelessWidget {
final String Btntext;
final Widget Function() redirecto;
Proceedbtn({this.Btntext, this.redirecto});
/* ... */
Navigator.push(
context,
MaterialPageRoute(builder: (context) => redirecto()),
);
然后
Proceedbtn(Btntext: "proceed next",redirecto: ()=> NextPage())
答案 1 :(得分:1)
您需要使用Function类,例如Andrey Turkovsky所说的:
class Proceedbtn extends StatelessWidget {
final String btntext;
final Function onPressed; //the function here
Proceedbtn({this.btntext, this.onPressed});
@override
Widget build(BuildContext context) {
return Material(
elevation: 1.0,
borderRadius: BorderRadius.circular(30.0),
color: Colors.butonColor,
child: MaterialButton(
height: 5,
minWidth: MediaQuery
.of(context)
.size
.width,
padding: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 0.0),
onPressed: onPressed, //receive here
));
}
}
然后,通过此处:
class UseProceedBtn extends StatefulWidget {
_UseProceedBtnState createState() => _UseProceedBtnState();
}
class _UseProceedBtnState extends State<UseProceedBtn> {
@override
Widget build(BuildContext context) {
return Container(
child: Proceedbtn(btntext: 'Proceed next', onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => NextPage()),
);
}),
);}}