소스 검색

add local terminal example

mengyanshou 3 년 전
부모
커밋
888d0361ad
2개의 변경된 파일100개의 추가작업 그리고 2개의 파일을 삭제
  1. 97 0
      example/lib/local.dart
  2. 3 2
      example/pubspec.yaml

+ 97 - 0
example/lib/local.dart

@@ -0,0 +1,97 @@
+import 'dart:io';
+
+import 'package:flutter/material.dart';
+import 'package:pty/pty.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: LocalTerminal(),
+    );
+  }
+}
+
+class LocalTerminalBackend extends TerminalBackend {
+  LocalTerminalBackend();
+
+  final pty = PseudoTerminal.start(
+    '/system/bin/sh',
+    [],
+    blocking: false,
+    environment: Platform.environment,
+  );
+
+  @override
+  Future<int> get exitCode => pty.exitCode;
+
+  @override
+  void init() {
+    pty.init();
+  }
+
+  @override
+  Stream<String> get out => pty.out;
+
+  @override
+  void resize(int width, int height, int pixelWidth, int pixelHeight) {
+    pty.resize(width, height);
+  }
+
+  @override
+  void write(String input) {
+    pty.write(input);
+  }
+
+  @override
+  void terminate() {
+    // client.disconnect('terminate');
+  }
+
+  @override
+  void ackProcessed() {
+    // NOOP
+  }
+}
+
+class LocalTerminal extends StatefulWidget {
+  const LocalTerminal({Key? key}) : super(key: key);
+
+  @override
+  _LocalTerminalState createState() => _LocalTerminalState();
+}
+
+class _LocalTerminalState extends State<LocalTerminal> {
+  final terminal = Terminal(maxLines: 10000, backend: LocalTerminalBackend());
+
+  @override
+  void initState() {
+    super.initState();
+  }
+
+  void onInput(String input) {
+    print('input: $input');
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      body: SafeArea(
+        child: TerminalView(
+          terminal: terminal,
+        ),
+      ),
+    );
+  }
+}

+ 3 - 2
example/pubspec.yaml

@@ -27,7 +27,8 @@ dependencies:
   dartssh2:
     git:
       url: https://github.com/TerminalStudio/dartssh2
-
+  pty:
+    git: https://github.com/TerminalStudio/pty
   flutter:
     sdk: flutter
 
@@ -84,4 +85,4 @@ flutter:
   fonts:
     - family: Cascadia Mono
       fonts:
-        - asset: fonts/CascadiaMonoPL.ttf
+        - asset: fonts/CascadiaMonoPL.ttf