我怎样才能让用户从上一个路径继续在Flutter

rta7y2nd  于 2023-01-14  发布在  Flutter
关注(0)|答案(1)|浏览(105)

请我需要有关如何在我的Flutter应用程序处理这个问题的帮助。
我有一个父页面,其中有一个按钮,当单击导致第1页,第1页然后导致第2页,第2页导致第3页。
我想实现的是,我希望用户从他们停止的地方继续每当在主页上的按钮被点击。
为了更好地解释,假设用户单击父页面中的按钮,该按钮将转到第1页,然后用户可以通过第1页中的按钮转到第2页。如果用户在第2页离开应用程序,我希望用户在单击父页面中的按钮时继续转到第2页而不是第1页。
我希望有人能帮我解决这个问题。
谢谢
目前,我一直在尝试使用flutter提供程序或sharedpreferences,但无法得到如何解决它。

mxg2im7a

mxg2im7a1#

为此,您必须将信息存储在“共享首选项”中。这样,当用户重新打开应用程序时,我们就可以获取上次保存的信息。
您可以使用shared_preferencesget_storage包来存储进度
并且当用户点击“父页面”上的导航按钮时简单地从共享偏好获得最后的进度并且相应地导航用户
下面是示例代码,以便您更好地理解:

enum Progress { pageOne, pageTwo, pageThree }

Progress? getProgress() {
  //TODO: will get progress from Shared Preference and return
}

void saveProgress(Progress progress) {
  //TODO:will save progress in Shared preference
}

class ParentPage extends StatelessWidget {
  const ParentPage({super.key});

  void _performNavigation(BuildContext context) {
    switch (getProgress()) {
      case null:
        Navigator.of(context)
            .push(MaterialPageRoute(builder: (context) => const PageOne()));
        break;
      case Progress.pageOne:
        Navigator.of(context)
            .push(MaterialPageRoute(builder: (context) => const PageTwo()));
        break;
      case Progress.pageTwo:
        Navigator.of(context)
            .push(MaterialPageRoute(builder: (context) => const PageThree()));
        break;
      case Progress.pageThree:
        // TODO: Show that process is already completed
        break;
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Parent Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => _performNavigation(context),
          child: const Text('Continue'),
        ),
      ),
    );
  }
}

class PageOne extends StatelessWidget {
  const PageOne({super.key});

  void _performNavigation(BuildContext context) {
    Navigator.of(context)
        .push(MaterialPageRoute(builder: (context) => const PageTwo()));
  }

  @override
  Widget build(BuildContext context) {
    saveProgress(Progress.pageOne);
    return Scaffold(
      appBar: AppBar(
        title: const Text('Page 1'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => _performNavigation(context),
          child: const Text('Continue'),
        ),
      ),
    );
  }
}

class PageTwo extends StatelessWidget {
  const PageTwo({super.key});

  void _performNavigation(BuildContext context) {
    Navigator.of(context)
        .push(MaterialPageRoute(builder: (context) => const PageThree()));
  }

  @override
  Widget build(BuildContext context) {
    saveProgress(Progress.pageTwo);
    return Scaffold(
      appBar: AppBar(
        title: const Text('Page 2'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () => _performNavigation(context),
          child: const Text('Continue'),
        ),
      ),
    );
  }
}

class PageThree extends StatelessWidget {
  const PageThree({super.key});

  @override
  Widget build(BuildContext context) {
    saveProgress(Progress.pageThree);
    return Scaffold(
      appBar: AppBar(
        title: const Text('Page Three'),
      ),
      body: const Center(
        child: Text('Thanks'),
      ),
    );
  }
}

相关问题