参数类型 'String' 不能分配给参数类型 'Route<Object?>'.dart(argument_type_not_assignable)

时间:2021-07-05 22:42:41

标签: flutter dart

我试图在单击按钮时获取要导航到的屏幕名称(在自定义类中)。

class myButton extends StatelessWidget {
  String button_txt = '';
  String nextPage = '';
  double height_ = 39;

  myButton(button_txt) {
    this.button_txt = button_txt;
    this.nextPage = nextPage;
  }
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        Navigator.pushReplacement(context, '/$nextPage');
      },

2 个答案:

答案 0 :(得分:1)

如果你想使用命名路由,你应该像这样使用它:

Navigator.pushReplacementNamed(context, 'nextPage');

但如果您不想使用命名路由,则有不同的导航方式:

  Navigator.pushReplacement(
    context,
    MaterialPageRoute(
      builder: (context) {
        return routewidget;
      },
    ),
  );

答案 1 :(得分:1)

有两种方法可以做到这一点:

  • 使用Navigator.pushNamedReplacement(context, '/$nextPage')
  • Navigator.pushReplacement(context, route); 与路由参数一起使用

如果你想使用命名路由,那么使用
Navigator.pushNamedReplacement(context, '/name/of/route)
如果它仍然不起作用,那么您可能没有set up navigation properly

如果你想使用非命名路由,那么方法会有所不同:

Navigator.pushReplacement(
  context,
  MaterialPageRoute( // Material page route makes it
    // slide from the bottom to the top
    // 
    // If you want it to slide from the right to the left, use 
    // `CupertinoPageRoute()` from the cupertino library.
    // 
    // If you want something else, then create your own route
    // https://flutter.dev/docs/cookbook/animation/page-route-animation
    builder: (context) {
      return NextPageWidget();
    },
  ),
);