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
更多关于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"),
),
],
),
),
);
}
}