flutter 使用Navigator分析参数,push显示位置参数过多错误:应为0,但找到1

u5rb5r59  于 2023-01-31  发布在  Flutter
关注(0)|答案(2)|浏览(150)

我想用 Navigator.push() 解析另一个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)),
                        );
                      }
                  )
              ),

[音乐播放器。 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
}

我只想知道如何从第一个文件解析参数到第二个文件。如果我传递参数,将会有一个错误:
位置参数太多:应为0,但找到1。
先谢了。

disbfnqx

disbfnqx1#

您需要在小工具中添加参数(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();
  }
}

这种方式可在导航器中使用。按下:

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

e5nqia272#

如果要使用Navigator传递参数,正确的方法是:

  • 在路线中注册小工具:
MaterialApp(
routes: {
    ExtractArgumentsScreen.routeName: (context) =>
        const ExtractArgumentsScreen(),
  },
)
  • 导航到小工具:
Navigator.pushNamed(
  context,
  ExtractArgumentsScreen.routeName,
  arguments: // whatever you want to pass,
);

在下一个页面小部件中:

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

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

相关问题