如何导航到堆栈中的前一个屏幕并刷新 Flutter 中的内容

问题描述 投票:0回答:1

我有一个场景,我需要从屏幕 A 导航到屏幕 B,然后到屏幕 C,最后从屏幕 C 直接返回屏幕 A,同时刷新屏幕 A 的内容。如何直接从屏幕 C 导航到屏幕 A导航时刷新屏幕 A 的内容时屏幕 A 吗?任何帮助或指导将不胜感激。谢谢!

flutter dart navigation
1个回答
0
投票

更简单的解决方法是使用await 等待导航器返回该页面。我为你创建了一个小演示

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScreenA(),
    );
  }
}

class ScreenA extends StatelessWidget {
  const ScreenA({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: InkWell(
        onTap: () async {
          await Navigator.push(
              context, MaterialPageRoute(builder: (_) => ScreenB()));//await here
          refreshPage();
        },
        child: SafeArea(
          child: Center(child: Text("Goto ScreenB")),
        ),
      ),
    );
  }

  void refreshPage() {
    print("page Refreshed");
    //write refresh code here
  }
}

class ScreenB extends StatelessWidget {
  const ScreenB({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: InkWell(
        onTap: () {
          Navigator.push(context, MaterialPageRoute(builder: (_) => ScreenC()));
        },
        child: SafeArea(
          child: Center(child: Text("Goto ScreenC")),
        ),
      ),
    );
  }
}

class ScreenC extends StatelessWidget {
  const ScreenC({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: InkWell(
        onTap: () {
          Navigator.pop(context);
          Navigator.pop(context);
        },
        child: SafeArea(
          child: Center(child: Text("Goto ScreenA")),
        ),
      ),
    );
  }
}

这里当用户从 screenC 返回到 screenA 时,会触发 ScreenA 类中的刷新页面。

© www.soinside.com 2019 - 2024. All rights reserved.