Flutter终端模拟插件termare_view的使用

Flutter终端模拟插件termare_view的使用

termare_view

语言: 中文简体 | English

支持全平台的终端模拟器,使用 Flutter 开发,是一个通过 canvas 渲染的上层组件,不依赖任何平台代码。

终端序列支持文档

这个 view 类似于 xterm.js,仅仅是一个上层 UI 显示组件,你可以使用来自操作系统底层的终端流,亦或者是连接 ssh 服务器的终端流,只需要给这个组件输入,就能自动解析终端序列并渲染终端。

如果对这个组件有任何问题,请随时提出。


开始使用

引入项目

这是一个纯 Flutter 包,因此只需在 pubspec.yaml 文件的 dependencies 下引入:

dependencies:
  termare_view:
    git: https://github.com/termare/termare_view.git

执行 flutter pub get 来安装依赖。


创建终端控制器

首先需要创建一个 TermareController 实例,用于管理终端的行为和状态:

TermareController controller = TermareController(
  showBackgroundLine: true, // 是否显示背景分割线
);

使用组件

TermareView 是一个 Flutter Widget,通常情况下只需要给它传递一个 TermareController 作为终端组件的控制器即可:

TermareView(
  controller: controller,
),

让终端显示一些东西

可以使用 write 方法向终端发送内容:

controller.write('hello termare_view');

更详细的例子

以下是一个完整的示例,展示了如何使用 termare_view 插件来创建一个简单的终端模拟器。

示例代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:termare_view/termare_view.dart';

void main() {
  // 初始化系统样式
  for (int i = 0; i < 256; i++) {
    print('\x1b[48;5;$i\m$i     \x1b[0m');
  }
  print('\x1b[2J');
  runApp(
    MaterialApp(
      home: Example(),
    ),
  );
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
    statusBarColor: Colors.transparent,
    systemNavigationBarColor: Colors.transparent,
    systemNavigationBarDividerColor: Colors.transparent,
  ));
}

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

class _ExampleState extends State<Example> {
  TermareController controller = TermareController(
      // showBackgroundLine: true,
      );

  [@override](/user/override)
  void initState() {
    super.initState();
    startTest();
  }

  Future<void> startTest() async {
    await Future<void>.delayed(const Duration(milliseconds: 100));
    SequencesTest.testColorText(controller); // 测试颜色文本
    controller.write('啊123撒大声地abc'); // 写入普通文本
    controller.write('\x1b[7m123'); // 写入带格式的文本
    for (int i = 0; i < 100; i++) {
      controller.write('$i\n'); // 模拟大量输出
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomInset: true,
      backgroundColor: Colors.white,
      body: SafeArea(
        child: TermareView(
          keyboardInput: (value) {
            print('键盘输入: ${value.codeUnits}'); // 打印输入字符的 ASCII 值
            controller.enableAutoScroll(); // 启用自动滚动
            controller.write(value); // 将输入内容写入终端
          },
          controller: controller,
        ),
      ),
    );
  }
}

更多关于Flutter终端模拟插件termare_view的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter终端模拟插件termare_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


TermareView 是一个用于在 Flutter 应用中嵌入终端模拟器的插件。它允许你在 Flutter 应用中显示一个终端,并执行命令。以下是如何在 Flutter 项目中使用 termare_view 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 termare_view 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  termare_view: ^0.1.0  # 请检查最新版本

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

2. 导入插件

在你的 Dart 文件中导入 termare_view 插件。

import 'package:termare_view/termare_view.dart';

3. 使用 TermareView

你可以在你的 Flutter 应用中使用 TermareView 组件来显示终端。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('TermareView Example'),
        ),
        body: TermareView(),
      ),
    );
  }
}

4. 控制终端

你可以通过 TermareController 来控制终端的行为,例如发送命令、设置初始环境等。

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

class _MyAppState extends State<MyApp> {
  TermareController _controller;

  [@override](/user/override)
  void initState() {
    super.initState();
    _controller = TermareController();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('TermareView Example'),
        ),
        body: Column(
          children: [
            Expanded(
              child: TermareView(
                controller: _controller,
              ),
            ),
            ElevatedButton(
              onPressed: () {
                _controller.sendCommand('ls\n');
              },
              child: Text('Run ls command'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 自定义终端

你可以通过 TermareView 的属性来自定义终端的外观和行为,例如设置终端的背景颜色、字体大小等。

TermareView(
  controller: _controller,
  backgroundColor: Colors.black,
  textColor: Colors.white,
  fontSize: 14.0,
);

6. 处理终端输出

你可以通过监听 TermareControlleronOutput 回调来处理终端的输出。

_controller.onOutput.listen((output) {
  print('Terminal Output: $output');
});

7. 清理资源

dispose 方法中释放 TermareController 的资源。

[@override](/user/override)
void dispose() {
  _controller.dispose();
  super.dispose();
}
回到顶部