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

互联网公司响应式网站互联网营销行业

互联网公司响应式网站,互联网营销行业,肃宁网站建设,网站建设公司发展简介 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.sczhlp.com/news/192815/

相关文章:

  • 京东网站是自己做的吗软件定制平台有哪些
  • 黄页游戏引流推广网站大连开发区网站开发公司
  • 装修行业网站建设备案网站可以做影视站
  • 在哪个网站开发外贸业务10g免费空间申请
  • 网站地图如何做网站建设犭金手指a排名15
  • 天津网站建设索王道下拉论坛推广工具
  • 网站原型是什么网站建设 ui设计公司
  • 重庆科技建设信息网站中山建设安监站网站
  • 河北网站建设价格低大丰哪家专业做网站
  • 北京网站建设制作方案深圳影视传媒公司有哪些
  • 用于建设教学网站的建站工具有哪些特点免费设计app的网站建设
  • 网站免费维护期是多少青岛网站制作选ls15227
  • 公司要做网站去哪里2345网址导航浏览器主页
  • 网站会员等级审核功能怎么做网站建设技术氵金手指排名26
  • php网站开发基础教程做网站和做app哪个容易
  • 电子商务 网站前台功能搜索引擎seo是什么
  • 平和县建设局网站江门网站制作专业
  • shiro 架构
  • test9 - post
  • JVM引入
  • 网站平台在线提交功能百度指数的使用
  • 网上发帖推广宁波专业seo推广价格
  • 做任务挣钱的网站app河南做网站公司排名
  • 网站建设的公做任务什么网站
  • apple网站设计电脑网页翻译
  • 建设flash网站猎头公司主要做什么
  • 哪些网站会盗取电力建设科学技术进步申报网站
  • 如何实现网站的快速排名网站导航图怎么做
  • 网站开发方案模板上海崇明林业建设有限公司 网站
  • 网站的分享按键群晖wordpress更新下载失败