Flutter路由管理类插件shelf_router_classes的使用
Flutter路由管理类插件shelf_router_classes的使用
shelf_router_classes
是一个用于简化 shelf
和 shelf_router
包中路由声明和使用的插件。通过使用类和 @Route
注解,它可以自动处理所有声明,无需代码生成。
安装
在你的 pubspec.yaml
文件中添加 shelf_router_classes
作为依赖:
dependencies:
shelf_router_classes: ^x.x.x
然后运行 flutter pub get
来安装它。
使用
使用方式非常简单。首先,你需要使用类和 @Route
注解来声明你的路由。以下是一个示例:
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf_router_classes/shelf_router_classes.dart';
@RoutePrefix('/prefix')
class ExampleService {
// GET 请求 /prefix/example
@Route('GET', '/example')
Response getAllExamples(Request request) {
return Response.ok('["1", "2", "3", "4"]');
}
// GET 请求 /prefix/example/number
@Route('GET', '/example/<number>')
Response getSpecificExample(Request request, int number) {
return Response.ok(number);
}
// POST 请求 /prefix/example
@Route('POST', '/example')
Future<Response> postExampe(Request request) async {
return Response.ok(await request.readAsString());
}
}
在上面的代码中,我们定义了三个方法来处理不同类型的 HTTP 请求。每个方法都有一个 @Route
注解来指定请求类型和路径。
接下来,你可以将这些类传递给 getRoutersByClass
方法来创建路由器,并将其服务化:
void main(List<String> arguments) async {
// 创建路由器并传入包含路由的类
Router router = getRoutersByClass([ExampleService]);
// 启动服务器
await serve(logRequests().addHandler(router), 'localhost', 8080);
}
现在,所有你声明的 @Route
注解都会自动被注册到路由器中,并且可以通过浏览器访问它们。例如,你可以通过访问 http://localhost:8080/prefix/example
来测试 getAllExamples
方法。
更多示例
以下是一个更复杂的示例,展示了如何同时使用多个服务类:
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf_router_classes/shelf_router_classes.dart';
import 'example_second_service.dart'; // 引入第二个服务类
import 'example_service.dart'; // 引入第一个服务类
void main(List<String> arguments) async {
// 创建路由器并传入多个服务类
Router router = getRoutersByClass([ExampleService, ExampleSecondService]);
// 启动服务器
await serve(logRequests().addHandler(router), 'localhost', 8080);
}
更多关于Flutter路由管理类插件shelf_router_classes的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter路由管理类插件shelf_router_classes的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
Shelf
是一个用于构建 HTTP 服务器的 Dart 包,而 shelf_router
是 Shelf
的一个扩展,用于更方便地管理路由。shelf_router_classes
是一个基于 shelf_router
的插件,它允许你使用类和方法来定义路由,从而使得代码更加模块化和易于维护。
安装
首先,你需要在 pubspec.yaml
文件中添加 shelf
、shelf_router
和 shelf_router_classes
依赖:
dependencies:
shelf: ^1.1.0
shelf_router: ^1.1.0
shelf_router_classes: ^1.0.0
然后运行 flutter pub get
来安装这些依赖。
基本用法
ShelfRouterClasses
允许你通过类和方法来定义路由。以下是一个简单的例子:
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf_router_classes/shelf_router_classes.dart';
class Api {
// 使用 `@route` 注解标记路由方法
[@Route](/user/Route).get('/hello')
Response hello(Request request) {
return Response.ok('Hello, world!');
}
[@Route](/user/Route).post('/greet')
Response greet(Request request) async {
final name = await request.readAsString();
return Response.ok('Hello, $name!');
}
}
void main() async {
// 创建路由实例
final app = Router();
// 使用 `ShelfRouterClasses` 将类中的路由方法添加到路由器
final api = Api();
ShelfRouterClasses(app).add(api);
// 启动服务器
var server = await serve(app, 'localhost', 8080);
print('Server running on localhost:${server.port}');
}
路由注解
ShelfRouterClasses
提供了多种注解来定义不同类型的路由:
[@Route](/user/Route).get(path)
: 定义一个 GET 请求的路由。[@Route](/user/Route).post(path)
: 定义一个 POST 请求的路由。[@Route](/user/Route).put(path)
: 定义一个 PUT 请求的路由。[@Route](/user/Route).delete(path)
: 定义一个 DELETE 请求的路由。[@Route](/user/Route).all(path)
: 定义一个处理所有 HTTP 方法的路由。
路由参数
你还可以在路由路径中使用参数。例如:
[@Route](/user/Route).get('/user/<id>')
Response getUser(Request request, String id) {
return Response.ok('User ID: $id');
}
中间件
ShelfRouterClasses
也支持中间件。你可以通过在方法上添加 @Middleware
注解来应用中间件:
[@Route](/user/Route).get('/secure')
@Middleware(validateToken)
Response secure(Request request) {
return Response.ok('Secure content');
}
Handler validateToken(Handler handler) {
return (Request request) async {
// 验证逻辑
if (request.headers['token'] != 'valid-token') {
return Response.forbidden('Invalid token');
}
return handler(request);
};
}
完整的例子
以下是一个更完整的例子,展示了如何使用 ShelfRouterClasses
来构建一个简单的 API:
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf_router_classes/shelf_router_classes.dart';
class UserApi {
[@Route](/user/Route).get('/user/<id>')
Response getUser(Request request, String id) {
return Response.ok('User ID: $id');
}
[@Route](/user/Route).post('/user')
Response createUser(Request request) async {
final body = await request.readAsString();
return Response.ok('User created with data: $body');
}
}
class ProductApi {
[@Route](/user/Route).get('/product/<id>')
Response getProduct(Request request, String id) {
return Response.ok('Product ID: $id');
}
}
void main() async {
final app = Router();
ShelfRouterClasses(app)
..add(UserApi())
..add(ProductApi());
var server = await serve(app, 'localhost', 8080);
print('Server running on localhost:${server.port}');
}