假設我現在在頁面 A 上。我導航到頁面-B。當我彈出頁面 B 并回傳頁面 A 時,目前沒有任何反應。如何重新加載頁面 A 并從頁面 A 的初始狀態加載新的 API 資料?有任何想法嗎?
uj5u.com熱心網友回復:
第一個主頁
void refreshData() {
id ;
}
FutureOr onGoBack(dynamic value) {
refreshData();
setState(() {});
}
void navigateSecondPage() {
Route route = MaterialPageRoute(builder: (context) => SecondPage());
Navigator.push(context, route).then(onGoBack);
}
第二頁
RaisedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text('Go Back'),
),
更多細節檢查這里
uj5u.com熱心網友回復:
根據您所描述的解釋,因此當您彈出頁面時。下面的代碼將在第二頁上。
Navigator.of(context).pop(true);
所以真正的引數可以是你想要發送的任何資料。
然后當你從一個頁面推送到另一個頁面時,這將是代碼。
這是第一頁。
final result = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => const PageOne()),
);
因此,如果您列印結果,您將獲得從第二頁發送的布林值。并且基于 bool 你可以點擊 api。如果 bool true 進行 api 呼叫。
讓我知道這個是否奏效。
uj5u.com熱心網友回復:
對于這種情況,還有另一種解決方案。
如果你想再次觸發 initState
- 您可以使用 pushAndRemoveUntil 方法進行導航。(如果您只使用推送方法,這不會洗掉堆疊上的上一頁)
- 您可以使用密鑰
- 您可以設定任何狀態管理模式。(不僅僅是再次觸發initState)
uj5u.com熱心網友回復:
有2種方式:
使用
awaitawait Navigator.push(context, MaterialPageRoute(builder: (context){ return PageB(); })); /// /// REFRESH DATA (or) MAKE API CALL HERE將建構式傳遞
fetchData給 pageB 并在處理 pageB 時呼叫它class PageA { void _fetchData() {} Future<void> goToPageB(BuildContext context) async { await Navigator.push(context, MaterialPageRoute(builder: (context) { return PageB(onFetchData: _fetchData); })); } } class PageB extends StatefulWidget { const PageB({Key? key, this.onFetchData}) : super(key: key); final VoidCallback? onFetchData; @override State<PageB> createState() => _PageBState(); } class _PageBState extends State<PageB> { @override void dispose() { widget.onFetchData?.call(); super.dispose(); } @override Widget build(BuildContext context) { return Container(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521292.html
