使用 Flutter 和 Fluro 像在web上一样导航

简介: 本文主要介绍使用 Flutter 和 Fluro 像在web上一样导航Fluro是一个路由库,它为我们处理了一些基础知识,并为我们提供了一些类似 web 的路由功能。在本教程中,我将向您展示如何设置 Fluro、使用内置转换以及使用类似 Web 的路由。

本文主要介绍使用 Flutter 和 Fluro 像在web上一样导航

Fluro是一个路由库,它为我们处理了一些基础知识,并为我们提供了一些类似 web 的路由功能。在本教程中,我将向您展示如何设置 Fluro、使用内置转换以及使用类似 Web 的路由。

设置

我们首先将 Fluro 添加到我们的项目中。

fluro: 1.4.0
复制代码

然后以与我们命名的路由教程相同的方式,我们将创建一个新文件,这次称为 fluro_router.dart。

import 'package:fluro/fluro.dart';
class FluroRouter {
  static Router router = Router();
}
复制代码

Fluro 为您提供了一个路由器,您可以在其中定义路径名和它接收的变量,类似于某些 Web 框架中的路由。我们将创建一个可以在应用程序开始运行之前从 main 调用的静态方法。

// In fluro_router.dart class
static void setupRouter() {
}
// in main.dart
void main() {
  FluroRouter.setupRouter();
  runApp(MyApp());
}
复制代码

现在我们可以定义我们的处理程序。要定义路由,您必须提供一个处理程序。处理程序有一个可选类型和一个 handlerFunc。handlerFunc 接受一个上下文和一个 Map<String, List> 参数并返回一个小部件。返回的小部件是路由器将显示的。我们将创建两个视图来显示导航。

class LoginView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.yellow[400],
      floatingActionButton: FloatingActionButton(
        onPressed: () {
        },
      ),
      body: Center(
          child: Text(
        this.runtimeType.toString(),
        style: TextStyle(fontSize: 23.0, fontWeight: FontWeight.bold),
      )),
    );
  }
}
class HomeView extends StatelessWidget {
  final String data;
  HomeView(this.data);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue[400],
      body: Center(
          child: Text(
            data,
            style: TextStyle(fontSize: 23.0, fontWeight: FontWeight.bold),
      )),
    );
  }
}
复制代码

主页视图接受一个字符串,登录有一个浮动操作按钮,我们将在其中添加导航调用。在我们可以导航之前,我们必须使用 Fluro 定义我们的路线并为其提供处理程序。先登录。

static Handler _loginHandler = Handler(
    handlerFunc: (BuildContext context, Map<String, dynamic> params) =>
        LoginView());
复制代码

login 是一个静态 Handler 变量,带有一个返回 LoginView 的 handlerFunc。非常简单,我们仍然需要向路由器注册处理程序。为此,我们使用定义。

static void setupRouter() {
    router.define("login", handler: _loginHandler);
}
复制代码

这里我们告诉路由器,当namedRoute登录被推送时,调用我上面定义的_loginHandler。还剩下一件事要做,我们将完成所有设置以显示一个视图。转到 main.dart 文件并为 onGenerateRoute 提供 Fluro 路由器的生成器。我们还将设置初始路由以登录

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        initialRoute: 'login',
        onGenerateRoute: FluroRouter.router.generator);
  }
}
复制代码

如果您现在运行它,您的应用程序将在登录时启动并且您正在使用 Fluro 路由器 😁

像在web上一样导航

Fluro 导航与 Flutter Navigator 相关联,因此导航仍然相同。您 pushNamedRoute 它将通过 Fluro 定义的路由来确定您期望该路由的小部件。Fluro 的一件很酷的事情是您可以导航和传递查询参数。作为示例,我们将为 HomeView 定义一个路由。

// Define the home view handler
static Handler _homeViewHandler = Handler(
    handlerFunc: (BuildContext context, Map<String, dynamic> params) =>
        HomeView(params['userId'][0]));
static void setupRouter() {
  ...
  // define the route
  router.define("home/:userId", handler: _homeViewHandler);
}
复制代码

处理程序几乎相同,除了使用 userId 在 params 值中建立索引并在其中传递第一个项目。此用户 ID 是在 setupRouter 函数中使用路径“home/:userId”定义的。':' 告诉 Fluro 您将向路径传递一个参数,并且他们应该将其提取到 params 映射中供您使用。最后,我们必须对主视图进行实际导航。转到登录视图并在 onPressed 函数中添加导航调用。

...
floatingActionButton: FloatingActionButton(
    onPressed: () {
      Navigator.pushNamed(context, 'home/90');
    },
  ),
...
复制代码

我们将使用 Navigator 并推送一个命名路由,传入 90 作为用户 ID。如果您运行它并按下按钮,您将导航到 Home,屏幕上显示值 90。

过渡

Fluro 有一些内置的转换,准确地说如下。

enum TransitionType {
  native,
  nativeModal,
  inFromLeft,
  inFromRight,
  inFromBottom,
  fadeIn,
  custom, // if using custom then you must also provide a transition
}
复制代码

您可以为每个路由定义一个过渡,我们将只使用淡入淡出来保持简单并展示功能性。你应该玩弄这些值并检查它们。在我们定义路由的路由器文件中,在末尾添加一个新属性并传入您想要的过渡。

static void setupRouter() {
  router.define("login",
      handler: _loginHandler, transitionType: TransitionType.fadeIn);
  router.define("home/:userId",
      handler: _homeViewHandler, transitionType: TransitionType.fadeIn);
}
复制代码

多个参数

如果要传递多个参数值,则不必在路径中定义它们中的任何一个。您只需使用 Navigator 导航并像传递普通 url 查询参数一样传递它。这将使其在处理程序的参数函数中可用。例如,您可以深度链接登录路径。

// Example push
Navigator.pushNamed('login?name=FilledStacks&account=2');
// Handler
static Handler _loginHandler =
    Handler(handlerFunc: (BuildContext context, Map<String, dynamic> params) {
  var name = params['name']?.first;
  var account = params['account']?.first;
  // Use name and account values
  return LoginView();
});
复制代码

如果您不传递复杂的对象,这是一种非常方便的设置路由的方法。


相关文章
|
2月前
|
Dart 前端开发 Java
|
2月前
|
前端开发 JavaScript Android开发
Flutter 调用本地 web
Flutter 调用本地 web
34 0
|
3月前
flutter 导航组件 AppBar (含顶部选项卡TabBar,抽屉菜单 drawer ,自定义导航图标)
flutter 导航组件 AppBar (含顶部选项卡TabBar,抽屉菜单 drawer ,自定义导航图标)
54 1
|
4月前
|
监控 Serverless 持续交付
阿里云云效产品使用问题之如何让流水线支持构建 flutter web 应用到 OSS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
开发框架 Dart JavaScript
深入探讨Flutter中的Web支持功能,以及如何利用Flutter构建跨平台Web应用的最佳实践
【6月更文挑战第11天】Flutter,Google的开源跨平台框架,已延伸至Web支持,让开发者能用同一代码库构建移动和Web应用。Flutter Web基于Dart转JavaScript,利用WebAssembly和JavaScript在Web上运行。构建Web应用最佳实践包括选择合适项目、优化性能、进行兼容性测试和利用Flutter的声明式UI、热重载等优势。尽管性能挑战存在,Flutter Web为跨平台开发提供了更多机会和潜力。
89 1
|
3月前
|
机器人 开发工具 Android开发
flutter web 优化和flutter_admin_template
flutter web 优化和flutter_admin_template
|
4月前
|
移动开发 小程序 安全
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
基础入门-APP架构&小程序&H5+Vue语言&Web封装&原生开发&Flutter
|
4月前
|
Dart 前端开发 JavaScript
Flutter for Web:跨平台移动与Web开发的新篇章
Flutter for Web是Google的开源UI工具包Flutter的延伸,用于构建高性能、高保真的跨平台应用,包括Web。它基于Dart语言和Flutter的核心框架,利用Skia渲染引擎通过WebAssembly在Web上运行。开发流程包括安装SDK、创建项目、编写Dart代码和部署。性能优化涉及减少渲染开销、代码压缩等。与传统Web框架相比,Flutter for Web在开发效率和性能上有优势,但兼容性和生态系统尚待完善。
75 0
|
5月前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
【4月更文挑战第30天】Flutter,Google的开源跨平台框架,已延伸至Web领域,让开发者能用同一代码库构建移动和Web应用。Flutter Web通过将Dart代码编译成JavaScript和WASM运行在Web上。尽管性能可能不及原生Web应用,但适合交互性强、UI复杂的应用。开发者应关注性能优化、兼容性测试,并利用Flutter的声明式UI、热重载等优势。随着其发展,Flutter Web为跨平台开发带来更多潜力。
128 0
【Flutter前端技术开发专栏】Flutter中的Web支持:构建跨平台Web应用
|
5月前
|
开发框架 Dart 前端开发
构建响应式Web界面:Flutter的跨界前端技术
【2月更文挑战第23天】随着移动互联网的飞速发展,响应式Web设计成为现代前端开发的重要趋势。在众多框架中,Google推出的Flutter以其高效的渲染性能、跨平台能力及丰富的组件生态,为前端开发者带来了新的选择。本文将深入探讨如何利用Flutter进行高效、美观的响应式界面构建,同时剖析其与传统前端技术的差异和优势。