返回

掌握Flutter中Navigator数据传递,让你如虎添翼

闲谈

在Flutter中,路由间的页面跳转使用的是Navigator.push、Navigator.pop方法。

1、目标页面的构造函数显式接收参数。例如跳转过去的是SearchPage,接收一个字符串参数,则如下所示:

class SearchPage extends StatelessWidget {
  final String query;
  SearchPage({required this.query});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Search Result for "$query"'),
      ),
      body: Center(
        child: Text('Search results will be shown here'),
      ),
    );
  }
}

2、我们还可以使用Route的RouteSetting参数进行数据传递,具体如下:

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => SearchPage(),
    settings: RouteSettings(arguments: query),
  ),
);

3、Navigator.pushNamed传递数据,使用RouteSettings中的arguments传递数据:

Navigator.pushNamed(
  context,
  '/search',
  arguments: query,
);

4、接收数据:

class SearchPage extends StatelessWidget {
  final String query;
  SearchPage({required this.query});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Search Result for "$query"'),
      ),
      body: Center(
        child: Text('Search results will be shown here'),
      ),
    );
  }
}

5、返回数据:

Navigator.pop(context, result);

6、接收返回数据:

Future<String> result = await Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => SearchPage(),
  ),
);

希望这些内容对您有所帮助。如果您有任何疑问,请随时与我联系。