Fra*_*las 6 dart flutter flutter-web
我目前正在使用 Flutter Web 使用 flutter_modular 进行路由,当您通过浏览器直接导航到页面时,该路由可以正常工作,但在尝试返回然后再次下一个页面时遇到了问题。
让我解释一下,假设你在主页上,导航到注册页面,然后你按浏览器中的后退按钮,然后你想按浏览器中的下一步按钮,但你不能,因为 Flutter 处理了最后一页,它不再存在于浏览器历史记录中。
有没有办法在 Flutter Web 中实现干净流畅的导航?
小智 3
我最近也遇到了同样的问题。我通过 Flutter Navigation 2.0 找到了解决方案。我的主要问题是,
这些问题在实现 Flutter Navigation 2.0 后都消失了。下面是简单的测试代码。您可以创建测试项目并复制和粘贴并检查您的要求是否合适。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() {
  runApp(GetMaterialApp.router(
    debugShowCheckedModeBanner: false,
    defaultTransition: Transition.fade,
    getPages: AppPages.pages,
    routerDelegate: AppRouterDelegate(),
  ));
}
abstract class Routes {
  static const HOME = '/';
  static const LOGIN = '/login';
  static const SIGNUP = '/signup';
}
class AppRouterDelegate extends GetDelegate {
  @override
  Widget build(BuildContext context) {
    return Navigator(
      onPopPage: (route, result) => route.didPop(result),
      pages: currentConfiguration != null
          ? [currentConfiguration!.currentPage!]
          : [GetNavConfig.fromRoute(Routes.HOME)!.currentPage!],
    );
  }
}
abstract class AppPages {
  static final pages = [
    GetPage(
      name: Routes.HOME,
      page: () => Home(),
    ),
    GetPage(
      name: Routes.LOGIN,
      page: () => Login(),
    ),
    GetPage(
      name: Routes.SIGNUP,
      page: () => Signup(),
    ),
  ];
}
class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.red,
      child: TextButton(
        child: Text(
          'Home',
          style: TextStyle(color: Colors.white),
        ),
        onPressed: () => Get.rootDelegate.toNamed(Routes.LOGIN),
      ),
    );
  }
}
class Login extends StatelessWidget {
  const Login({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.orange,
      child: TextButton(
        child: Text(
          'Login',
          style: TextStyle(color: Colors.white),
        ),
        onPressed: () => Get.rootDelegate.toNamed(Routes.SIGNUP),
      ),
    );
  }
}
class Signup extends StatelessWidget {
  const Signup({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.blue,
      child: TextButton(
        child: Text(
          'Signup',
          style: TextStyle(color: Colors.white),
        ),
        onPressed: () => Get.rootDelegate.toNamed(Routes.HOME),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)
我在这篇博客中写了详细的解释。我使用了GetX包,但你也可以将这种做法与MaterialApp.router.
https://dev.to/swimmingkiim/flutter-web-fix-refresh-back-button-problem-4gk3
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1556 次  |  
        
|   最近记录:  |