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
是否总是导航到其他屏幕?它是否有可能弹出导航堆栈或具有不同的点击行为?请始终导航。出于某种奇怪的原因,它早些时候不起作用。