Flutter 颤振-动态传递导航小部件名称
我创建了一个按钮小部件来避免代码重复,因为屏幕上有多个按钮。单击每个按钮应将其带到不同的屏幕Flutter 颤振-动态传递导航小部件名称,flutter,flutter-navigation,flutter-widget,Flutter,Flutter Navigation,Flutter Widget,我创建了一个按钮小部件来避免代码重复,因为屏幕上有多个按钮。单击每个按钮应将其带到不同的屏幕 class ButtonWidget extends StatelessWidget { final buttonText; final destination; ButtonWidget({this.buttonText, this.destination}); @override Widget build(BuildContext context) { return In
class ButtonWidget extends StatelessWidget {
final buttonText;
final destination;
ButtonWidget({this.buttonText, this.destination});
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) {
switch (destination) {
case 'signUp':
return SignUp();
break;
case 'signIn':
return SignIn();
break;
case 'SignInGoogle':
return SignInGoogle();
break;
default:
return SignUp();
}
}));
},
child: Align(
alignment: Alignment.bottomCenter,
child: Container(
constraints: BoxConstraints(
minHeight: 6.5 * SizeConfig.heightMultiplier,
maxHeight: 7.9 * SizeConfig.heightMultiplier),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(4 * SizeConfig.heightMultiplier),
),
color: AppTheme.topBarBackgroundColor,
),
child: Center(child: Text(buttonText)),
)));
}
}
点击后,我想导航到目标小部件。但这似乎不起作用。我以以下方式调用ButtonWidget:
ButtonWidget(
buttonText: Strings.signUp,
destination: 'signUp',
)
传递小部件而不是它的名称表示:
class ButtonWidget extends StatelessWidget {
final buttonText;
final Widget destination;
ButtonWidget({this.buttonText, this.destination});
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => destination
));
},
child: Align(
alignment: Alignment.bottomCenter,
child: Container(
constraints: BoxConstraints(
minHeight: 6.5 * SizeConfig.heightMultiplier,
maxHeight: 7.9 * SizeConfig.heightMultiplier),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(4 * SizeConfig.heightMultiplier),
),
color: AppTheme.topBarBackgroundColor,
),
child: Center(child: Text(buttonText)),
)));
}
}
ButtonWidget(
buttonText: Strings.signUp,
destination: SignUp(),
)
实施:
class ButtonWidget extends StatelessWidget {
final buttonText;
final Widget destination;
ButtonWidget({this.buttonText, this.destination});
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => destination
));
},
child: Align(
alignment: Alignment.bottomCenter,
child: Container(
constraints: BoxConstraints(
minHeight: 6.5 * SizeConfig.heightMultiplier,
maxHeight: 7.9 * SizeConfig.heightMultiplier),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(4 * SizeConfig.heightMultiplier),
),
color: AppTheme.topBarBackgroundColor,
),
child: Center(child: Text(buttonText)),
)));
}
}
ButtonWidget(
buttonText: Strings.signUp,
destination: SignUp(),
)
为什么不直接传递小部件而不是它的名称呢。如最终目的地;您的
按钮Widget
是否总是导航到其他屏幕?它是否有可能弹出导航堆栈或具有不同的点击行为?请始终导航。出于某种奇怪的原因,它早些时候不起作用。