Flutter服务端交互插件jaspr_serverpod的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter服务端交互插件jaspr_serverpod的使用

🚀 Serverpod 集成用于 Jaspr

此包提供了 JasprServerpod 之间的集成。它提供了以下功能:

  • JasprRoute:在您的 Serverpod Web 服务器中使用,以在服务器端渲染 Jaspr 组件。
  • context.session 扩展:在组件的 build() 方法中获取 Session
  • JasprConnectivityMonitor:为生成的 Serverpod 客户端提供连接性监控。

您可以参考以下示例或查看我们的示例项目:

设置

请参阅我们官方的 设置指南,了解如何将 Jaspr 与 Serverpod 集成。

开发期间运行

在完成 设置 集成后,只需在终端中运行 jaspr serve 即可启动 两个 服务器:Jaspr 开发服务器和 Serverpod 调试模式。

这完全取代了开发期间运行 dart bin/main.dart 的需要。

构建和部署

要构建您的项目,请在终端中运行 jaspr build -i bin/main.dart。如果您使用 Docker 部署项目,请修改 Dockerfile 如下:

FROM dart:3.2.5 AS build

...

+ RUN dart pub global activate jaspr_cli
RUN dart pub get
- RUN dart compile exe bin/main.dart -o bin/main
+ RUN jaspr build -i lib/main.dart -v

...

FROM busybox:1.36.1-glibc  

...

COPY --from=build /runtime/ /
- COPY --from=build /app/bin/main /app/bin/main
+ COPY --from=build /app/build/jaspr/app /app/bin/main
COPY --from=build /app/config/ config/
- COPY --from=build /app/web/ web/
+ COPY --from=build /app/build/jaspr/web/ web/

...

示例代码

1. 基本示例

项目结构

my_project/
├── lib/
│   └── main.dart
├── web/
│   └── index.html
├── server/
│   └── main.dart
└── pubspec.yaml

pubspec.yaml

name: my_project
description: A new Flutter project.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev

environment:
  sdk: ">=2.17.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  jaspr: ^0.1.0
  jaspr_serverpod: ^0.1.0
  serverpod: ^0.1.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  jaspr_cli: ^0.1.0
  build_runner: ^2.0.0
  serverpod_flutter: ^0.1.0

lib/main.dart

import 'package:flutter/material.dart';
import 'package:jaspr/jaspr.dart';
import 'package:jaspr_serverpod/jaspr_serverpod.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

web/index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Flutter Demo</title>
  <script src="main.dart.js" type="application/javascript"></script>
</head>
<body>
</body>
</html>

server/main.dart

import 'package:serverpod/serverpod.dart';
import 'package:jaspr_serverpod/jaspr_serverpod.dart';

void main() async {
  var server = await Server.create(
    directory: 'path/to/your/project',
  );

  // Add JasprRoute to your server routes
  server.webServer.router.route('/').add(JasprRoute((context) {
    return ComponentBuilder(
      (context) {
        return MyApp();
      },
    );
  }));

  await server.start();
}

2. 运行项目

  1. 在项目根目录下运行 jaspr serve 启动开发服务器。
  2. 访问 http://localhost:8080 查看应用。

3. 构建和部署

  1. 在项目根目录下运行 jaspr build -i lib/main.dart 构建项目。
  2. 修改 Dockerfile 并构建 Docker 镜像。
  3. 部署到您的服务器。

希望这些信息对您有所帮助!如果有任何问题,请随时提问。


更多关于Flutter服务端交互插件jaspr_serverpod的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter服务端交互插件jaspr_serverpod的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用jaspr_serverpod插件与服务端进行交互的示例代码。jaspr_serverpod是一个用于Flutter的后端服务框架,它允许你在Dart中编写后端逻辑,并通过生成的客户端库与Flutter前端进行通信。

1. 设置后端服务

首先,你需要创建一个serverpod项目。你可以使用serverpod命令行工具来初始化项目。

# 安装 serverpod CLI
dart pub global activate serverpod

# 初始化一个新的 serverpod 项目
serverpod init my_serverpod_project

进入项目目录后,创建一个简单的服务。例如,创建一个名为HelloService的服务,它有一个方法返回问候语。

// lib/src/services/hello_service.dart
import 'package:serverpod/serverpod.dart';

class HelloService extends Service {
  @override
  String get name => 'hello';

  Future<String> greet(Session session, {required String name}) async {
    return 'Hello, $name!';
  }
}

然后,在pod.yaml文件中注册这个服务。

# pod.yaml
name: my_serverpod_project
version: 1.0.0

dependencies:
  serverpod: ^latest_version

services:
  - hello: lib/src/services/hello_service.dart

2. 生成客户端库

在项目根目录下运行以下命令来生成客户端库。

serverpod generate

这将在generated目录下生成一个Dart包,你可以将其导入到你的Flutter项目中。

3. 在Flutter项目中使用生成的客户端库

将生成的客户端库添加到你的Flutter项目中。通常,你可以将生成的代码作为一个本地依赖项添加到pubspec.yaml中,或者直接将生成的代码文件复制到Flutter项目中。

# flutter_project/pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  my_serverpod_client:
    path: ../my_serverpod_project/generated/my_serverpod_client

注意:这里的路径需要根据你的实际项目结构进行调整。

4. 在Flutter前端调用后端服务

在你的Flutter项目中,你可以这样使用生成的客户端库来调用后端服务。

// flutter_project/lib/main.dart
import 'package:flutter/material.dart';
import 'package:my_serverpod_client/my_serverpod_client.dart'; // 导入生成的客户端库

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late MyServerpodClient client;
  String? greeting;

  @override
  void initState() {
    super.initState();
    // 初始化客户端并连接到服务器
    client = MyServerpodClient(url: Uri.parse('http://localhost:8080'));
    client.connect().then((_) async {
      // 调用后端服务
      greeting = await client.hello.greet(name: 'Flutter User');
      setState(() {});
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter ServerPod Example'),
        ),
        body: Center(
          child: Text(greeting ?? 'Loading...'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它在启动时连接到后端服务并调用greet方法,然后将返回的问候语显示在屏幕上。

5. 运行后端服务和Flutter应用

首先,确保后端服务正在运行:

cd my_serverpod_project
dart run

然后,在另一个终端窗口中运行你的Flutter应用:

cd flutter_project
flutter run

这样,你的Flutter应用就应该能够成功调用后端服务并显示问候语了。

这个示例展示了如何使用jaspr_serverpod(通常称为serverpod)在Flutter项目中进行服务端交互。根据实际需求,你可以扩展和修改这个示例。

回到顶部