面试题答案
一键面试实现思路
- 从A跳转到B:在Flutter中,可以使用
Navigator.push
方法从页面A跳转到页面B。 - B返回A并传递数据:在B页面中,使用
Navigator.pop
方法返回A页面,并在返回时传递数据。在A页面中,通过await Navigator.push
的方式接收B页面返回的数据。 - 精准pop到指定页面:可以使用
GlobalKey<NavigatorState>
来获取特定的Navigator
状态,然后通过该状态的popUntil
方法来精准地pop到指定页面。
关键代码片段
- 页面A
import 'package:flutter/material.dart';
import 'package:your_project/b_page.dart';
class APage extends StatefulWidget {
@override
_APageState createState() => _APageState();
}
class _APageState extends State<APage> {
String? receivedData;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Page A'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (receivedData != null)
Text('Received data from B: $receivedData'),
ElevatedButton(
onPressed: () async {
final result = await Navigator.push<String>(
context,
MaterialPageRoute(builder: (context) => BPage()),
);
setState(() {
receivedData = result;
});
},
child: Text('Go to Page B'),
),
],
),
);
}
}
- 页面B
import 'package:flutter/material.dart';
class BPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final String dataToSend = 'Hello from B';
return Scaffold(
appBar: AppBar(
title: Text('Page B'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.pop(context, dataToSend);
},
child: Text('Return to Page A with data'),
),
),
);
}
}
- 精准pop到指定页面
// 定义GlobalKey
GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
// 在某个页面中使用
ElevatedButton(
onPressed: () {
navigatorKey.currentState?.popUntil((route) => route.isFirst);
},
child: Text('Pop to first page'),
);
在上述代码中,首先在A页面通过await Navigator.push
等待B页面返回数据,并更新UI显示数据。B页面通过Navigator.pop
返回数据。精准pop时,先定义GlobalKey<NavigatorState>
,然后在需要精准pop的地方,通过popUntil
方法并结合route.isFirst
(这里假设要pop到根页面,可根据实际需求调整条件)来实现精准pop。