使用onPressed切换到另一个屏幕不正常工作。

3

我正尝试使用onPressed在Flutter项目中切换到不同的屏幕,但是它没有生成任何结果,不确定原因。

以下是主屏幕页面:

                                          onPressed: () {
                                            const User_Profile();
                                            print("Hello");
                                          },

以下是用户资料:

class User_Profile extends StatefulWidget {
  const User_Profile({Key? key}) : super(key: key);
 
  @override
  State<User_Profile> createState() => _user_profileState();
}
 
class _user_profileState extends State<User_Profile> {
  @override
  Widget build(BuildContext context) {
    return const Text("User Profile");
  }
}
 

问题: 如何使用Onpressed切换屏幕? 我做错了什么,每次都会打印出调试的Hello单词。

3个回答

3
尝试以下代码,使用 Navigator.push 参考 导航
  ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => User_Profile(),
              ),
            );
          },
          child: const Text('User Profile'),
        ),

2
你需要使用一个函数代替你的类,代码如下:
Navigator.push(context, MaterialPageRoute(builder: (context)=>User_profile()));

请调用这个函数:

 onPressed: () {
                                       Navigator.push(context, MaterialPageRoute(builder: (context)=>User_profile()));
                                      },

改为这样:

   onPressed: () {
                                        const User_Profile();
                                        print("Hello");
                                      },

2

正如您所知道的,在类中调用构造方法时,无法直接跳转到特定页面。有两种方法:

  1. use Navigator.push like this:

         Navigator.push(
           context,
           MaterialPageRoute(
             builder: (context) => User_Profile(),
           ),
         );
    

您可以通过构造函数参数发送参数到下一页,例如:User_Profile(name: 'yourName')。2)您可以使用Navigator.pushNamed。您可以在项目的主类中定义routeName,如下所示:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(
    MyApp(),
  );
}
class MyApp extends StatefulWidget {
  MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        canvasColor: Colors.transparent,
      ),
      initialRoute: '/',
      routes: {
        '/': (context) => Splash(),
        '/user_profile': (context) => User_Profile(),
      },
    );
  }
}

如您所见,您定义了一个路由名称'/user_profile',您可以使用Navigator.pushNamed,如果您想将参数传递到下一页,则必须像这样使用arguments

 Navigator.pushNamed(
  context,
 '/user_profile',
 arguments: {"name" : "yourName"},);

以下代码用于获取您在User_Profile中传递的参数:

var arguments = ModalRoute.of(context)!.settings.arguments as Map;
var name = arguments['name'] as String;

我建议您使用第二种方式来了解您的项目所有路由。
祝您好运;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接