当前位置: 首页 > news >正文

南京网站制作开发wordpress 产品管理

南京网站制作开发,wordpress 产品管理,wordpress怎么用外链,2021年不付费黄台软件下载简介 Flutter是一种由Google开发的移动应用程序开发框架#xff0c;它允许开发人员使用单个代码库构建高性能、高质量的移动体验。而Android终端命令行工具则允许用户在Android手机上运行类似于Linux的操作系统命令。本文的目的是介绍如何在Flutter应用中开发一个Android终端命…简介 Flutter是一种由Google开发的移动应用程序开发框架它允许开发人员使用单个代码库构建高性能、高质量的移动体验。而Android终端命令行工具则允许用户在Android手机上运行类似于Linux的操作系统命令。本文的目的是介绍如何在Flutter应用中开发一个Android终端命令行工具包括终端命令行页面的布局设计、与Shell通信的基本原理、输入输出处理的基本技巧、终端样式和输出样式的可配置性以及如何在具体应用中利用终端命令行工具来执行系统命令和与用户进行交互。 实现终端命令行页面 为了实现一个完整的终端命令行页面我们可以使用Flutter提供的基础控制台模块例如TextArea、TextField等。需要注意的是在Android中Shell是另一个进程我们需要使用Flutter提供的方法来与Shell进行通信。具体来说我们可以通过创建一个Future或者Stream来与Shell进行通信。其中Future用于单个结果的返回而Stream则可以返回多个结果。我们可以在Flutter使用Async函数和这些模块的onChanged()方法来处理输入和输出。以下是最简单的实现方式。 dart复制代码 class TerminalPage extends StatefulWidget {override_TerminalPageState createState() _TerminalPageState(); }class _TerminalPageState extends StateTerminalPage {TextEditingController _controller;FutureProcess _process;StreamString _output;overridevoid initState() {super.initState();_controller TextEditingController();_process Process.start(/system/bin/sh, []);_controller.addListener(_handleInput);}void _handleInput() {_process.then((process) {process.stdin.writeln(_controller.text);_controller.clear();});}overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(Terminal Command),),body: Column(children: [Flexible(flex: 1,child: StreamBuilderString(stream: _output,builder: (BuildContext context, AsyncSnapshotString snapshot) {if (snapshot.hasData) {return Text(snapshot.data);} else {return CircularProgressIndicator();}},),),TextField(controller: _controller,decoration: InputDecoration(border: InputBorder.none, hintText: Input terminal command),)],),);} }终端样式和输出样式的设计 除了基本的终端命令行页面我们也需要为终端和输出样式提供更多的可配置性。在Flutter中我们可以使用TextStyle模块例如color、fontSize、fontFamily等来控制终端和输出的样式。我们可以将TextStyle保存在Flutter的本地存储中以便在应用中进行修改。以下是一个具体的样例 dart复制代码 class _TerminalPageState extends StateTerminalPage {TextEditingController _controller;FutureProcess _process;StreamString _output;TextStyle _terminalStyle;TextStyle _outputStyle;overridevoid initState() {super.initState();_controller TextEditingController();_process Process.start(/system/bin/sh, []);_terminalStyle TextStyle(color: Colors.white, backgroundColor: Colors.black, fontFamily: Monospace);_outputStyle TextStyle(color: Colors.white, backgroundColor: Colors.black, fontSize: 16);_controller.addListener(_handleInput);}void _handleInput() {_process.then((process) {process.stdin.writeln(_controller.text);_controller.clear();});}FutureFile _getTerminalStyleFile() async {final directory await getApplicationDocumentsDirectory();final file File(${directory.path}/terminalStyle);if (file.existsSync()) {return file;} else {await file.create();await file.writeAsString({color: #FFFFFF, background: #000000});return file;}}FutureFile _getOutputStyleFile() async {final directory await getApplicationDocumentsDirectory();final file File(${directory.path}/outputStyle);if (file.existsSync()) {return file;} else {await file.create();await file.writeAsString({color: #FFFFFF, background: #000000, size: 16});return file;}}Futurevoid _loadStyles() async {final terminalFile await _getTerminalStyleFile();final terminalJson await terminalFile.readAsString();final terminalStylesMap jsonDecode(terminalJson);_terminalStyle TextStyle(color: Color(int.parse(terminalStylesMap[color].toString(), radix: 16)),backgroundColor: Color(int.parse(terminalStylesMap[background].toString(), radix: 16)),fontFamily: Monospace,);final outputFile await _getOutputStyleFile();final outputJson await outputFile.readAsString();final outputStylesMap jsonDecode(outputJson);_outputStyle TextStyle(color: Color(int.parse(outputStylesMap[color].toString(), radix: 16)),backgroundColor: Color(int.parse(outputStylesMap[background].toString(), radix: 16)),fontSize: outputStylesMap[size].toDouble(),);}Futurevoid _saveTerminalStyle(String color, String background) async {final terminalFile await _getTerminalStyleFile();final terminalStylesMap {color: color, background: background};final terminalJson jsonEncode(terminalStylesMap);await terminalFile.writeAsString(terminalJson);}Futurevoid _saveOutputStyle(String color, String background, double size) async {final outputFile await _getOutputStyleFile();final outputStylesMap {color: color, background: background, size: size.toInt()};final outputJson jsonEncode(outputStylesMap);await outputFile.writeAsString(outputJson);}overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(Terminal Command),),body: FutureBuilder(future: _loadStyles(),builder: (BuildContext context, AsyncSnapshotvoid snapshot) {switch (snapshot.connectionState) {case ConnectionState.done:return Column(children: [Flexible(flex: 1,child: StreamBuilderString(stream: _output,builder: (BuildContext context, AsyncSnapshotString snapshot) {if (snapshot.hasData) {return Text(snapshot.data, style: _outputStyle);} else {return CircularProgressIndicator();}},),),TextField(style: _terminalStyle,controller: _controller,decoration: InputDecoration(border: InputBorder.none,hintText: Input terminal command,hintStyle: _terminalStyle,),)],);default:return Center(child: CircularProgressIndicator());}},),);}}在Flutter应用中使用终端命令行工具的例子 在具体应用中我们可以使用终端命令行工具来执行一些系统命令例如ping、df、top等。同时我们也可以利用终端界面来与用户进行交互例如读取用户的输入并将其传递给后端服务器。以下是一个简单的应用案例 dart复制代码 class PingPage extends StatelessWidget {final String ip;PingPage({Key key, this.ip}) : super(key: key);FutureProcess _getPingProcess() async {final process await Process.start(/system/bin/ping, [-c, 5, ip]);return process;}overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(Ping $ip)),body: Container(child: FutureBuilder(future: _getPingProcess(),builder: (BuildContext context, AsyncSnapshotProcess snapshot) {if (snapshot.hasData) {return Column(children: [Expanded(child: TerminalOutput(process: snapshot.data),),Container(margin: EdgeInsets.all(10),child: TextField(decoration: InputDecoration(border: OutlineInputBorder(),hintText: Input Ping Command,),),),Container(margin: EdgeInsets.all(10),child: ElevatedButton(onPressed: () {},child: Text(Send Command),),)],);} else {return Center(child: CircularProgressIndicator());}},),),);} }class TerminalOutput extends StatelessWidget {final Process process;TerminalOutput({Key key, this.process}) : super(key: key);overrideWidget build(BuildContext context) {return StreamBuilderString(stream: process.stdout.transform(utf8.decoder),builder: (BuildContext context, AsyncSnapshotString snapshot) {if (snapshot.hasData) {return SingleChildScrollView(child: Text(snapshot.data,style: TextStyle(color: Colors.white,fontFamily: Monospace,backgroundColor: Colors.black,),),);} else {return Center(child: CircularProgressIndicator());}},);} }总结 本文介绍了在Flutter应用中开发Android终端命令行工具的方法。主要包括终端命令行页面的布局设计、与Shell通信的基本原理、输入输出处理的基本技巧、终端样式和输出样式的可配置性以及如何在具体应用中利用终端命令行工具来执行系统命令和与用户进行交互。 本文提供了一个完整的演示案例包括输出和输入的显示、终端命令行页面的开发、以及关于终端样式为可配置的输出样式也为可配置的。希望这篇文章对于Flutter开发者有所帮助能够为他们在实际开发中提供参考。 除了本文所介绍的方法外还有其他方法可以在Flutter应用中实现终端命令行工具例如使用Dart的Process类进行进程调用或者将Flutter应用封装为Docker容器。这些方法也值得开发者进一步探索和试验。未来随着移动应用越来越复杂终端命令行工具的需求也会越来越大。因此掌握Flutter中开发终端命令行工具的技能将会变得越来越重要。 链接https://juejin.cn/post/7248827630865596474
http://www.ho-use.cn/article/10818254.html

相关文章:

  • 青岛公司网站建设公司排名招标网官网登录
  • 加强企业网站建设小榄网站建设
  • 培训营销型网站建设怎样在微信上开店卖东西
  • dede手机医院网站模板个人免费网站注册com
  • 文档分享类网站建设wordpress主题添加字体设置
  • 企业如何选择网站搜索引擎推广预算
  • 青岛网站制作开发页面设计说明怎么写
  • 学校网站英文中国建设工程招聘信息网站
  • 云顶科技做网站的网站开发使用什么技术
  • 酒店网站建设方案结束语今天最新新闻10条
  • 丹东网站制作wordpress插件去除google
  • 自建网站怎么做推广给你一个新的网站怎么做
  • 国家住房和城乡建设部网站免费营销网站制作
  • 做公司网站要多少钱深圳做律师网站公司
  • 那些是flash做的网站中信建设有限责任公司投资部执行总监张鹏
  • 智能网站推广软件兰州官网seo诊断
  • 住房和城乡建设部网站职称查询网站建设和管理颁奖
  • 在线免费网站模板提高工作效率整改措施
  • dw怎么做网站相册投资公司注册资金要求
  • 东莞高端品牌网站建设网站的回到顶部怎么做
  • cad如何做图纸模板下载网站系统网站设计
  • html移动网站开发网站开发专业术语大全
  • wordpress建设的网站涪陵网站制作
  • 放单网站百度发广告怎么发
  • 人社门户网站建设方案网站建设做的好的公司
  • 照明做外贸的有那些网站php 视频播放网站开发
  • 关于网站内容建设的正确说法网站开发网上教学
  • 网站设计公司请示深圳网站建设哪些
  • 南京网站微信建设网站开发排行
  • 做网站每一步的是什么安全的网站制作公司