Flutter本地服务器插件mini_server的使用

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

Flutter本地服务器插件mini_server的使用

简介

mini_server 是一个用于在Flutter应用程序运行时创建本地服务器的插件。例如,想象以下场景:您开发了一个带有Sqlite数据库的桌面应用程序,并且需要创建一个移动应用程序来消费相同的数据,只要它们在同一个局域网内,这个插件就能够实现这种通信。

注意:

  • 该服务器仅在应用程序打开时工作。
  • 未在大型应用程序中进行测试。

功能

  • GET 请求
  • POST 请求
  • PUT 请求
  • DELETE 请求

使用步骤

Step 1: 添加依赖

pubspec.yaml 文件中添加 mini_server 依赖:

dependencies:
  mini_server: ^最新版本号
Step 2: 导入依赖

在您的 Dart 文件中导入必要的包:

import 'dart:io';
import 'package:mini_server/mini_server.dart';
Step 3: 创建实例

创建 MiniServer 的实例,指定主机和端口:

final miniServer = MiniServer(
  host: 'localhost', // 如果在移动设备上测试,请替换为当前计算机的IP地址
  port: 8080,
);
Step 4: 生成路由

定义服务器的路由处理逻辑:

// 处理 GET 请求
miniServer.get("/", (HttpRequest httpRequest) async {
  value.value++; // 增加计数器
  return httpRequest.response.write(value.value.toString()); // 返回计数值
});

// 处理 POST 请求(示例1)
miniServer.post("/test", (HttpRequest httpRequest) async {
  MiniResponse res = await MiniResponse.instance.init(httpRequest); // 初始化响应
  return httpRequest.response.write(res.parameters.toString()); // 返回请求参数
});

// 处理 POST 请求(示例2)
miniServer.post("/test02", (HttpRequest httpRequest) async {
  final res = await MiniResponse.instance.init(httpRequest); // 初始化响应
  return httpRequest.response.write(res.body); // 返回请求体
});

完整示例代码

import 'dart:io';
import 'package:mini_server/mini_server.dart';
import 'package:flutter/material.dart';

// 使用 ValueNotifier 来管理计数器
ValueNotifier<int> value = ValueNotifier(0);

void main() {
  // 创建 MiniServer 实例
  final miniServer = MiniServer(
    host: 'localhost', // 如果在移动设备上测试,请替换为当前计算机的IP地址
    port: 8080,
  );

  // 定义 GET 路由
  miniServer.get("/", (HttpRequest httpRequest) async {
    value.value++; // 增加计数器
    return httpRequest.response.write(value.value.toString()); // 返回计数值
  });

  // 定义 POST 路由(示例1)
  miniServer.post("/test", (HttpRequest httpRequest) async {
    MiniResponse res = await MiniResponse.instance.init(httpRequest); // 初始化响应
    return httpRequest.response.write(res.parameters.toString()); // 返回请求参数
  });

  // 定义 POST 路由(示例2)
  miniServer.post("/test02", (HttpRequest httpRequest) async {
    final res = await MiniResponse.instance.init(httpRequest); // 初始化响应
    return httpRequest.response.write(res.body); // 返回请求体
  });

  // 运行 Flutter 应用程序
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: ValueListenableBuilder(
        valueListenable: value, // 监听计数器的变化
        builder: (_, value, __) {
          return Center(
            child: Text(
              "$value", // 显示计数值
              style: const TextStyle(
                fontWeight: FontWeight.bold,
                fontSize: 100,
              ),
            ),
          );
        },
      ),
    );
  }
}

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

1 回复

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


当然,关于Flutter本地服务器插件mini_server的使用,下面是一个简单的示例代码,展示了如何在Flutter应用中使用该插件来启动一个本地服务器并处理HTTP请求。

首先,确保你已经在pubspec.yaml文件中添加了mini_server依赖:

dependencies:
  flutter:
    sdk: flutter
  mini_server: ^latest_version  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用mini_server插件:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:mini_server/mini_server.dart';
  1. 创建一个Flutter应用并启动本地服务器
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  MiniServer? _server;

  @override
  void initState() {
    super.initState();
    startLocalServer();
  }

  void startLocalServer() async {
    _server = await MiniServer.start(port: 8080);
    _server!.get('/hello', (req, res) async {
      res.write('Hello, World!');
      res.close();
    });

    // 打印服务器启动信息
    print('Local server started at http://localhost:8080');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Local Server Example'),
      ),
      body: Center(
        child: Text('Local server is running. Open your browser and go to http://localhost:8080/hello'),
      ),
    );
  }

  @override
  void dispose() {
    _server?.close();
    super.dispose();
  }
}

在这个示例中,我们做了以下几件事:

  • 使用MiniServer.start(port: 8080)方法启动了一个本地服务器,监听8080端口。
  • 使用_server!.get('/hello', ...)方法为/hello路径注册了一个GET请求处理器。当访问http://localhost:8080/hello时,服务器会响应"Hello, World!"。
  • initState方法中启动服务器,并在dispose方法中关闭服务器,以确保资源得到正确释放。

运行这个Flutter应用后,打开浏览器并访问http://localhost:8080/hello,你应该会看到服务器返回的"Hello, World!"消息。

请注意,这个示例仅展示了基本的用法。mini_server插件还支持更多功能,如POST请求处理、文件上传、静态文件服务等,你可以根据需求查阅官方文档以获取更多信息和高级用法。

回到顶部