Flutter摩尔斯电码工具插件flutter_morse_util的使用

flutter_morse_util

一个基于Flutter开发的跨端摩尔斯标准密码工具,支持在线解码/编码和离线解码/编码。

项目环境

  • flutter --version v3.16.9
  • dart --version v3.2.6
  • Framework --version 41456452f2
  • Engine --version f40e976bed

使用方法

安装依赖

1. 检查版本号是否正确
flutter --version
2. 运行命令查看是否需要安装其他依赖
flutter doctor
3. 运行启动
flutter pub get
flutter run

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  # 添加依赖
  flutter_morse_util: ^0.0.3

示例

导入包

import 'package:flutter_morse_util/morse_util.dart';

实例化

MorseUtil _morseUtil = MorseUtil();

开始编码/解码

_morseUtil.encode('摩尔斯'); // 输出: --..-...--.-..-/-.---.....-.-../--..-.--.-.----/
_morseUtil.decode('--..-...--.-..-/-.---.....-.-../--..-.--.-.----/'); // 输出: 摩尔斯

示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_morse_util 插件进行摩尔斯电码的编码和解码。

import 'package:example/toast.dart'; // 自定义Toast工具类
import 'package:flutter/material.dart';
import 'package:flutter_morse_util/morse_util.dart'; // 引入摩尔斯电码工具类
import 'package:fluttertoast/fluttertoast.dart'; // 引入FlutterToast库
import 'package:url_launcher/url_launcher.dart'; // 引入URL跳转库

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Morse App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Morse-master'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  // 响应空白处的焦点的Node
  FocusNode blankNode = FocusNode();
  TextEditingController inputController = TextEditingController();

  // 摩斯解码工具类
  MorseUtil _morseUtil = MorseUtil();

  [@override](/user/override)
  void dispose() {
    inputController.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return GestureDetector(
      behavior: HitTestBehavior.translucent,
      onTap: () {
        // 触摸收起键盘
        FocusScope.of(context).requestFocus(FocusNode());
      },
      child: Scaffold(
        // 防止软键盘弹出时遮挡页面
        resizeToAvoidBottomInset: false,
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Container(
          margin: EdgeInsets.only(left: 5, top: 5, right: 5, bottom: 10),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: <Widget>[
              Expanded(
                flex: 8,
                child: _inputWidget(),
              ),
              Expanded(
                child: _decodeBtnWidget(),
              ),
              Expanded(
                child: _netMorseBtnWidget(),
              ),
            ],
          ),
        ),
      ),
    );
  }

  /// 摩尔斯电码输入框
  Widget _inputWidget() {
    return Container(
      width: MediaQuery.of(context).size.width,
      height: MediaQuery.of(context).size.height,
      margin: EdgeInsets.only(bottom: 20),
      child: TextField(
        minLines: 100,
        controller: inputController,
        maxLines: null, // 无行数限制
        textInputAction: TextInputAction.done,
        decoration: InputDecoration(border: OutlineInputBorder(), hintText: '请输入摩尔斯电码/中文'),
      ),
    );
  }

  /// 编码/解码功能按钮
  Widget _decodeBtnWidget() {
    return Container(
      width: 100,
      height: 60,
      margin: EdgeInsets.only(left: 30, right: 30),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: <Widget>[
          Expanded(
            child: MaterialButton(
              elevation: 5,
              color: Colors.blue,
              textColor: Colors.white,
              splashColor: Colors.deepPurpleAccent,
              child: Text(
                '编码(字符转电码)',
                style: TextStyle(fontSize: 12),
              ),
              onPressed: () {
                morseEncode();
              },
            ),
          ),
          SizedBox(width: 30),
          Expanded(
            child: MaterialButton(
              elevation: 5,
              color: Colors.blue,
              textColor: Colors.white,
              splashColor: Colors.deepPurpleAccent,
              child: Text(
                '解码(电码转字符)',
                style: TextStyle(fontSize: 12),
              ),
              onPressed: () {
                morseDecode();
              },
            ),
          ),
        ],
      ),
    );
  }

  /// 在线编码/解码按钮
  Widget _netMorseBtnWidget() {
    return Container(
      width: 100,
      height: 60,
      margin: EdgeInsets.only(top: 10, left: 30, right: 30, bottom: 10),
      child: ElevatedButton(
        onPressed: _launchURL,
        child: Text(
          '使用网络morse编/解码',
          style: TextStyle(fontSize: 12),
        ),
      ),
    );
  }

  _launchURL() async {
    const url = 'https://tool.lu/morse';
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
  }

  /// 摩尔斯解码
  void morseDecode() {
    String decodeString = inputController.text;
    if (decodeString.isEmpty) {
      ToastUtil.showGravityToast(
        '请输入摩尔斯码',
        ToastGravity.CENTER,
      );
      return;
    }
    try {
      if (decodeString.startsWith(RegExp('-')) || decodeString.startsWith(RegExp('.'))) {
        String decodeResult = _morseUtil.decode(decodeString);
        // 设置文本显示
        inputController.text = decodeResult;
      } else {
        int index_dit = decodeString.indexOf(RegExp('.'));
        int index_dah = decodeString.indexOf(RegExp('-'));
        if (index_dit == -1 || index_dah == -1) {
          // 设置文本清空
          inputController.text = '';
          return;
        }
        if (index_dit > index_dah) {
          String dahString = decodeString.substring(index_dah).trim();
          String dahResult = _morseUtil.decode(dahString);
          // 设置文本显示
          inputController.text = dahResult;
        } else {
          String ditString = decodeString.substring(index_dit).trim();
          String ditResult = _morseUtil.decode(ditString);
          // 设置文本显示
          inputController.text = ditResult;
        }
      }
    } catch (e) {
      print('解码失败');
      inputController.text = '';
    }
  }

  /// 摩尔斯编码
  void morseEncode() {
    String decodeString = inputController.text;
    if (decodeString.isEmpty) {
      ToastUtil.showGravityToast(
        '请输入文本或字符',
        ToastGravity.CENTER,
      );
      return;
    }
    try {
      String encodeString = _morseUtil.encode(decodeString);
      // 设置文本显示
      inputController.text = encodeString;
    } catch (e) {
      print('编码失败');
      inputController.text = '';
    }
  }
}

更多关于Flutter摩尔斯电码工具插件flutter_morse_util的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter摩尔斯电码工具插件flutter_morse_util的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_morse_util 是一个用于在 Flutter 应用中处理摩尔斯电码的工具插件。它可以帮助你将文本转换为摩尔斯电码,或者将摩尔斯电码转换回文本。以下是如何使用 flutter_morse_util 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_morse_util: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 flutter_morse_util

import 'package:flutter_morse_util/flutter_morse_util.dart';

3. 使用插件

flutter_morse_util 提供了两个主要功能:将文本转换为摩尔斯电码,以及将摩尔斯电码转换回文本。

将文本转换为摩尔斯电码

你可以使用 MorseUtil.encode 方法将文本转换为摩尔斯电码:

String text = "HELLO";
String morseCode = MorseUtil.encode(text);
print(morseCode);  // 输出: .... . .-.. .-.. ---

将摩尔斯电码转换为文本

你可以使用 MorseUtil.decode 方法将摩尔斯电码转换回文本:

String morseCode = ".... . .-.. .-.. ---";
String text = MorseUtil.decode(morseCode);
print(text);  // 输出: HELLO

4. 处理错误

flutter_morse_util 可能会在遇到无效字符时抛出异常。你可以使用 try-catch 块来处理这些异常:

try {
  String morseCode = MorseUtil.encode("HELLO 123");
  print(morseCode);
} catch (e) {
  print("Error: $e");
}

5. 自定义摩尔斯电码表

flutter_morse_util 允许你自定义摩尔斯电码表。你可以通过 MorseUtil.setCustomMorseCode 方法来设置自定义的摩尔斯电码表:

Map<String, String> customMorseCode = {
  'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.',
  // 添加其他字符的摩尔斯电码
};

MorseUtil.setCustomMorseCode(customMorseCode);

String text = "ABC";
String morseCode = MorseUtil.encode(text);
print(morseCode);  // 输出: .- -... -.-.

6. 其他功能

flutter_morse_util 还提供了其他一些功能,例如播放摩尔斯电码声音、设置播放速度等。你可以参考插件的文档来了解更多详细信息。

示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_morse_util

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MorseCodeExample(),
    );
  }
}

class MorseCodeExample extends StatefulWidget {
  [@override](/user/override)
  _MorseCodeExampleState createState() => _MorseCodeExampleState();
}

class _MorseCodeExampleState extends State<MorseCodeExample> {
  String text = "HELLO";
  String morseCode = "";

  void encodeText() {
    setState(() {
      morseCode = MorseUtil.encode(text);
    });
  }

  void decodeMorse() {
    setState(() {
      text = MorseUtil.decode(morseCode);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Morse Code Example"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text("Text: $text"),
            Text("Morse Code: $morseCode"),
            ElevatedButton(
              onPressed: encodeText,
              child: Text("Encode to Morse"),
            ),
            ElevatedButton(
              onPressed: decodeMorse,
              child: Text("Decode to Text"),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部