flutter 使用onPressed切换到另一个屏幕无法正常工作

zzzyeukh  于 2022-11-30  发布在  Flutter
关注(0)|答案(3)|浏览(145)

我试图切换到一个不同的屏幕在Flutter项目使用onpressed,但它没有产生任何结果,不知道是什么原因。
这里是主屏幕页面:

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。

efzxgjgh

efzxgjgh1#

尝试以下代码并使用**Navigator.push**refer navigation

ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => User_Profile(),
              ),
            );
          },
          child: const Text('User Profile'),
        ),
8i9zcol2

8i9zcol22#

您必须使用函式来取代您的类别,如下所示:

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

称之为:

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

而不是:

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

fgw7neuy3#

正如你所知,你不能通过调用类中的构造函数方法来跳转到特定的页面。你有两种方法:
1.按如下方式使用Navigator.push

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(),
      },
    );
  }
}

如您所见,您定义了一个routeName '/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;

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

相关问题