Flutter消息模拟插件mockingbird_messaging的使用

Flutter消息模拟插件mockingbird_messaging的使用

Features

此部分描述了插件的主要功能。

Getting started

在开始使用 mockingbird_messaging 插件之前,确保已将插件添加到项目的 pubspec.yaml 文件中。例如:

dependencies:
  mockingbird_messaging: ^版本号

然后运行以下命令以获取依赖项:

flutter pub get

Usage

以下是使用 mockingbird_messaging 插件的基本示例。

初始化插件

首先,我们需要初始化插件并设置监听器。示例代码如下:

import 'dart:convert';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:mockingbird_messaging/mockingbird_messaging.dart';

Future<bool> installService(String token) async {
  // 创建 Miaoba 实例
  var miaoba = Miaoba(
    transport: WebsocketTransport("ws://127.0.0.1:9000/ws"), // WebSocket 连接地址
    encoding: JsonEncoding(), // 使用 JSON 编码
    cryptoMethod:
        kIsWeb ? AcceptCrypto.methodPlaintext : AcceptCrypto.methodAesRsaSha256, // 加密方法
    token: token, // 认证令牌
  );

  // 添加事件监听器
  Mockingbird.instance.addEventListener((Event e) {
    print("${e.type}: ${e.payload}");
  });

  // 初始化插件
  return await Mockingbird.instance.initialize(
    userId: "000004ydgqcv7aio", // 用户ID
    proto: miaoba,
    db: await Sqlite().getdb(), // 数据库实例
    clientId: "xxxxxx", // 客户端ID
  );
}

主程序

接下来,在主程序中调用初始化函数并启动应用。

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 确保 Flutter 绑定已初始化
  await installService("MDAwMDA1Z3g3b3RmaHc1Yw=="); // 调用初始化函数
  runApp(const MyApp()); // 启动应用
}

应用界面

创建一个简单的界面,包含按钮和文本字段,用于测试消息发送和文件上传功能。

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  String fileInfos = "";
  File? _file;
  TextEditingController controller = TextEditingController();

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('你已经点击了按钮多少次:'),
            Text('$_counter', style: Theme.of(context).textTheme.headlineMedium),
            ElevatedButton(
              onPressed: () async {
                final ImagePicker picker = ImagePicker();
                final List<XFile> media = await picker.pickMultipleMedia();
                _uploadMedia(media);
              },
              child: const Text("上传图片"),
            ),
            Text(fileInfos),
            TextField(controller: controller),
            ElevatedButton(
              onPressed: () async {
                var cacher = FileCacher(
                  fileManager: HttpFileManager(
                    helper: DioHelper(domain: "http://127.0.0.1:9000"),
                  ),
                );
                var file = await cacher.cacheFile(
                  controller.text,
                  size: ImageSize.origin,
                );
                if (file != null) {
                  setState(() {
                    _file = file;
                  });
                }
              },
              child: const Text("下载图片"),
            ),
            if (_file != null) Image.file(_file!),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }

  _uploadMedia(List<XFile> files) async {
    var uploader = FileUploader(
      fileManager: HttpFileManager(
        helper: DioHelper(
          domain: "http://127.0.0.1:9000",
        ),
      ),
    );
    var infos = await uploader.upload(files, onFail: (file, code, info) {
      print("${file.name}, $code, $info");
    });
    for (var i = 0; i < infos.length; i++) {
      if (infos[i] == null) {
        infos.removeAt(i);
      }
    }
    setState(() {
      controller.text = jsonEncode(infos);
    });
  }
}

更多关于Flutter消息模拟插件mockingbird_messaging的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter消息模拟插件mockingbird_messaging的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


mockingbird_messaging 是一个用于在 Flutter 应用中模拟消息传递的插件。它可以帮助开发者在没有实际后端服务的情况下,模拟消息的发送和接收,从而进行开发和测试。以下是如何使用 mockingbird_messaging 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 mockingbird_messaging 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  mockingbird_messaging: ^0.1.0  # 请使用最新版本

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

2. 初始化插件

在你的 Flutter 应用的入口文件(通常是 main.dart)中,初始化 mockingbird_messaging 插件:

import 'package:mockingbird_messaging/mockingbird_messaging.dart';

void main() {
  MockingbirdMessaging.initialize();
  runApp(MyApp());
}

3. 发送模拟消息

你可以使用 MockingbirdMessaging 来发送模拟消息。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:mockingbird_messaging/mockingbird_messaging.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Mockingbird Messaging Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              // 发送模拟消息
              MockingbirdMessaging.sendMessage('Hello, World!');
            },
            child: Text('Send Message'),
          ),
        ),
      ),
    );
  }
}

4. 接收模拟消息

你可以通过监听消息流来接收模拟消息。以下是如何设置监听器的示例:

import 'package:flutter/material.dart';
import 'package:mockingbird_messaging/mockingbird_messaging.dart';

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

class _MyAppState extends State<MyApp> {
  String _message = '';

  @override
  void initState() {
    super.initState();
    // 监听消息流
    MockingbirdMessaging.messageStream.listen((message) {
      setState(() {
        _message = message;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Mockingbird Messaging Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () {
                  // 发送模拟消息
                  MockingbirdMessaging.sendMessage('Hello, World!');
                },
                child: Text('Send Message'),
              ),
              SizedBox(height: 20),
              Text('Received Message: $_message'),
            ],
          ),
        ),
      ),
    );
  }
}

5. 自定义消息处理

你还可以自定义消息处理逻辑,例如根据消息内容执行不同的操作:

MockingbirdMessaging.messageStream.listen((message) {
  if (message == 'Hello, World!') {
    print('Received a greeting message');
  } else {
    print('Received a different message: $message');
  }
});
回到顶部