简体   繁体   English

使用 Navigator.push 解析 arguments 显示错误太多位置 arguments:预期为 0,但找到 1

[英]Parse arguments with Navigator.push shows error too many positional arguments: 0 expected, but 1 found

I want to parse arguments with Navigator.push() to my other dart file.我想用Navigator.push()将 arguments 解析为我的其他 dart 文件。

Because I want to send the path of the selected song in songlist, to the music player main UI (For Playing)因为我想将歌曲列表中所选歌曲的路径发送到音乐播放器主界面(用于播放)

[ songlist.dart ] [ 歌单.dart ]

child:ListView.builder(
                      itemCount: getSongList()[0].length,
                      itemBuilder: (BuildContext context, int index) {
                        return ListTile(
                          title: Text(getSongList()[1][index].split('/').last,style:
                          const TextStyle(
                              fontSize: 21
                          ),),
                          leading: IconButton(onPressed: (){
                            Navigator.push(context,MaterialPageRoute(builder: (context) => music_player()));
                          },
                              icon: Icon(Icons.my_library_music)),
                        );
                      }
                  )
              ),

[ musicplayer.dart ] [音乐播放器.dart]

class music_player extends StatefulWidget {
  const music_player({Key? key}) : super(key: key);

  @override
  State<music_player> createState() => _music_playerState();
}

class _music_playerState extends State<music_player> {
  // codes
}

Just wanna know how to parse arguments from my first file to second file.只是想知道如何将 arguments 从我的第一个文件解析到第二个文件。 If I pass arguments there will be an error:如果我通过 arguments 将会出现错误:

too many positional arguments: 0 expected, but 1 found.位置 arguments 太多:预期 0,但找到 1。

Thanks in advance.提前致谢。

you need to add parameter(selectedSongs) in widget like this:您需要像这样在小部件中添加参数(selectedSongs):

class MusicPlayer extends StatefulWidget {
  final selectedSongs;

  const MusicPlayer({
    Key? key,
    this.selectedSongs,
  }) : super(key: key);

  @override
  State<MusicPlayer> createState() => _MusicPlayerState();
}

class _MusicPlayerState extends State<MusicPlayer> {
  @override
  Widget build(BuildContext context) {
    return const Placeholder();
  }
}

this way you can use in Navigator.push:这样你就可以在 Navigator.push 中使用:

Navigator.push(context,MaterialPageRoute(builder: (context) => MusicPlayer(selectedSongs: selectedsongList,))));

If your want to pass arguments with Navigator the correct way is:如果您想通过 Navigator 传递 arguments,正确的方法是:

-Register the widget in the routes: - 在路线中注册小部件:

MaterialApp(
routes: {
    ExtractArgumentsScreen.routeName: (context) =>
        const ExtractArgumentsScreen(),
  },
)

-Navigate to the widget: - 导航到小部件:

Navigator.pushNamed(
  context,
  ExtractArgumentsScreen.routeName,
  arguments: // whatever you want to pass,
);

And inside your next page widget:在你的下一页小部件中:

    @override
    Widget build(BuildContext context) {
      final args = ModalRoute.of(context)!.settings.arguments;
      return Scafold( ... );
    }

All information here: https://docs.flutter.dev/cookbook/navigation/navigate-with-arguments所有信息在这里: https://docs.flutter.dev/cookbook/navigation/navigate-with-arguments

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM