xterm 2.5.0-pre copy "xterm: ^2.5.0-pre" to clipboard
xterm: ^2.5.0-pre copied to clipboard

outdated

xterm.dart is a fast and fully-featured terminal emulator for Flutter applications, with support for mobile and desktop platforms.

example/lib/main.dart

import 'dart:async';

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'xterm.dart demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class FakeTerminalBackend extends TerminalBackend {
  Completer<int> _exitCodeCompleter;
  // ignore: close_sinks
  StreamController<String> _outStream;

  FakeTerminalBackend();

  @override
  Future<int> get exitCode => _exitCodeCompleter.future;

  @override
  void init() {
    _exitCodeCompleter = Completer<int>();
    _outStream = StreamController<String>();
    _outStream.sink.add('xterm.dart demo');
    _outStream.sink.add('\r\n');
    _outStream.sink.add('\$ ');
  }

  @override
  Stream<String> get out => _outStream.stream;

  @override
  void resize(int width, int height, int pixelWidth, int pixelHeight) {
    // NOOP
  }

  @override
  void write(String input) {
    if (input.length <= 0) {
      return;
    }
    // in a "real" terminal emulation you would connect onInput to the backend
    // (like a pty or ssh connection) that then handles the changes in the
    // terminal.
    // As we don't have a connected backend here we simulate the changes by
    // directly writing to the terminal.
    if (input == '\r') {
      _outStream.sink.add('\r\n');
      _outStream.sink.add('\$ ');
    } else if (input.codeUnitAt(0) == 127) {
      // Backspace handling
      _outStream.sink.add('\b \b');
    } else {
      _outStream.sink.add(input);
    }
  }

  @override
  void terminate() {
    //NOOP
  }

  @override
  void ackProcessed() {
    //NOOP
  }
}

class _MyHomePageState extends State<MyHomePage> {
  Terminal terminal;

  @override
  void initState() {
    super.initState();
    terminal = Terminal(
      backend: FakeTerminalBackend(),
      maxLines: 10000,
    );
  }

  void onInput(String input) {}

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: TerminalView(
          terminal: terminal,
          style: TerminalStyle(fontFamily: ['Cascadia Mono']),
        ),
      ),
    );
  }
}
158
likes
0
pub points
90%
popularity

Publisher

verified publisherterminal.studio

xterm.dart is a fast and fully-featured terminal emulator for Flutter applications, with support for mobile and desktop platforms.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

convert, equatable, flutter, meta, platform_info, quiver

More

Packages that depend on xterm