美文网首页Flutter圈子Flutter
开源一个Flutter编写的简易终端模拟器

开源一个Flutter编写的简易终端模拟器

作者: Nightmare_梦魇兽 | 来源:发表于2020-02-16 15:39 被阅读0次
    在Android原生中执行shell可以使用Runtime的这些类,更多的会选择第三方开发者封装好的库来调用shell,完整的终端模拟器,如termux,Android Terminal等都涉及到一些jni通信,C语言中system函数可以执行命令行命令,python中则是os.system函数,各类语言都有执行命令行的函数与方法,在dart中,我们通过Process类来实现这些功能

    这是我一直为我的工具箱维护的功能之一,一个简易的终端模拟器,起初的实现涉及到了大量的与原生之间Plugin的调用,后来慢慢的将所有功能的实现迁移到纯Flutter中,现在来开源几个页面

    先看一下在安卓跟Mac上的运行效果

    gif gif
    其它平台还待测试

    上面就是同一套代码跑出来的,Flutter在Mac上的性能也越来越好了哈哈,不过最新的master分支Textfield无法输入空格
    整个页面就一个dart文件,写得比较烂,大部分的业务逻辑起码都是半年前的了,也没怎么变动,我直接从我工具箱项目copy出来的,有些与外部耦合的变量我直接弄成全局变量了,我的工具箱很多地方会以弹窗的方式依赖这个页面

    Process类

    关于Process类的使用,我也是先查了相应的帖子,最后发现dart官网中有提到,直接看Process类这个文件读起来问题也不大
    简单说,Process.run可以执行一行sh命令,不过执行完后这个进程就会退出,返回的为一个ProcessResult对象,这个对象包含了,stdout,stderr,exitcode这些,而Porcess.start会持续维持这个进程,直到输入exit,它返回的是Process对象,通过这个对象即可对它的stdout,stderr进行监听,执行stdin.write这些操作。

    一点细节

    这个进程不会关闭,那我们是如何知道一条命令什么时候执行结束呢
    例如

    find
    sleep
    

    这类需要耗时的命令 ,我用了一点小技巧还获取何时来告诉用户这条命令执行结束,无论输入什么样的命令,我都在之后跟一行echo exitCode=$?,其实$?是Linux得到上一行命令退出的代码,这样不仅能知道上一行代码什么时候运行结束,还拿到了它的退出代码

    地址

    https://github.com/Nightmare-MYS/flutter_terminal
    MToolkit下载地址
    下一篇应该会开源Flutter编写的文件管理器,代码都还有很多问题,包括很多命名不规范的地方,我慢慢完善

    相关文章

      网友评论

        本文标题:开源一个Flutter编写的简易终端模拟器

        本文链接:https://www.haomeiwen.com/subject/czbpfhtx.html