Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/azkadev/terminal_library
Terminal Library Cross Platform Support
https://github.com/azkadev/terminal_library
dart flutter pty xterm
Last synced: 6 days ago
JSON representation
Terminal Library Cross Platform Support
- Host: GitHub
- URL: https://github.com/azkadev/terminal_library
- Owner: azkadev
- License: other
- Created: 2024-08-22T09:47:51.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2024-10-01T17:06:06.000Z (about 2 months ago)
- Last Synced: 2024-10-11T05:40:55.520Z (about 1 month ago)
- Topics: dart, flutter, pty, xterm
- Language: Dart
- Homepage:
- Size: 2.74 MB
- Stars: 25
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# Terminal Library
**Terminal Library** for dart and flutter support cross platform with user friendly, so this will help you to integrated terminal to your app without any hastle## Demo
## đī¸ Docs
1. [Documentation]({url_documentation})
2. [Youtube](https://youtube.com/azkadev)
3. [Telegram Support Group](https://t.me/{telegram_support_username})
4. [Contact Developer](https://github.com/azkadev) (check social media or readme profile github)## đī¸ Features
1. [x] đąī¸ **Cross Platform** support (Device)
2. [x] đī¸ **Standarization** Style Code
3. [x] â¨ī¸ **Cli** (Terminal for help you use this library or create project)
4. [x] đĨī¸ **Api** (If you developer bot / userbot you can use this library without interact cli just add library and use đī¸)
5. [x] đ§Šī¸ **Customizable Extension** (if you want add extension so you can more speed up on development)
6. [x] â¨ī¸ **Pretty Information** (user friendly for newbie)
7. [x] đĨī¸ **Multi Function** One library with multi function (INCLUDE SSH CLIENT) so you can connect ssh terminal or acces file using SFTP without any hastle## âī¸ Fun Fact
This library work on everywhere platform (cli, server, web, gui) ignore flutter flag only pub.dev
## Support
I Really need energy for make this library easy to use please help me like
1. [Sponsor / Donate Me On Github](https://github.com/azkadev)
2. [Follow My Youtube Account](https://youtube.com/@azkadev)
3. [Buy Services On Telegram Bot](https://t.me/azkadevbot?start=buy_services)### đĨī¸ Install Library
1. **Dart**
```bash
dart pub add terminal_library
```2. **Flutter**
```bash
flutter pub add terminal_library
```
## ? Who use this project / EXAMPLE PROJECT USE THIS LIBRARY1. General Studio Developer App
General Studio Developer App Is Application code editor with cross platform support with extra feature native (SSH CLIENT, CHROOT LINUX, HTTP CLIENT, NETWORK PROXY) so this app is can help you to develop without use more one app so you will significant decrease ram usage
1. General Bot App / General Automation App
2. General Application
## đī¸ Quick Start
Example Quickstart script minimal for insight you or make you use this library because very simple
```dart
// ignore_for_file: empty_catches, non_constant_identifier_names
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:general_lib/general_lib.dart';
import 'package:general_lib_flutter/extension/build_context.dart';
import 'package:general_lib_flutter/widget/widget.dart';
import 'package:terminal_library/pty_library/pty_library.dart';
import 'package:terminal_library/xterm_library/xterm.dart';void main(List args) {
WidgetsFlutterBinding.ensureInitialized();
runApp(const App());
}class App extends StatelessWidget {
static GeneralLibFlutterApp generalLibFlutterApp = GeneralLibFlutterApp();
const App({super.key});
@override
Widget build(BuildContext context) {
return GeneralLibFlutterAppMain(
generalLibFlutterApp: generalLibFlutterApp,
builder: (themeMode, lightTheme, darkTheme, widget) {
Widget child = MaterialApp(
theme: lightTheme,
darkTheme: darkTheme,
themeMode: themeMode,
debugShowCheckedModeBanner: false,
home: const MyApp(),
);
return child;
},
);
}
}class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State createState() => _MyAppState();
}class _MyAppState extends State {
TerminalLibraryFlutterController terminalLibraryFlutterController = TerminalLibraryFlutterController();
final TerminalLibraryFlutter terminalLibraryFlutter = TerminalLibraryFlutter(
maxLines: 1000,
// inputHandler:
);
late final TerminalPtyLibrary ptyLibrary;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
await refresh();
});
}@override
void dispose() {
ptyLibrary.kill();
terminalLibraryFlutterController.dispose();
super.dispose();
}bool is_loading = false;
Future refresh() async {
if (is_loading) {
return;
}
setState(() {
is_loading = true;
});
await Future(() async {
await Future.delayed(Durations.short1);
ptyLibrary = TerminalPtyLibrary(
executable: TerminalPtyLibraryBase.defaultShell,
columns: terminalLibraryFlutter.viewWidth,
rows: terminalLibraryFlutter.viewHeight,
);
ptyLibrary.output.listen((event) {
if (event.isNotEmpty) {
try {
terminalLibraryFlutter.write(utf8.decode(event, allowMalformed: true));
} catch (e) {}
}
});
terminalLibraryFlutter.onOutput = (String value) {
if (value.isNotEmpty) {
try {
ptyLibrary.write(utf8.encode(value));
} catch (e) {}
}
};
terminalLibraryFlutter.onResize = (w, h, pw, ph) {
ptyLibrary.resize(h, w);
};
terminalLibraryFlutter.buffer.clear();
terminalLibraryFlutter.buffer.setCursor(0, 0);
terminalLibraryFlutter.textInput("clear");
terminalLibraryFlutter.keyInput(TerminalLibraryFlutterKey.enter);
setState(() {});
});
setState(() {
is_loading = false;
});
}@override
Widget build(BuildContext context) {
if (is_loading) {
return Scaffold(
body: Center(
child: CircularProgressIndicator(
color: context.theme.indicatorColor,
),
),
);
}
return Scaffold(
appBar: AppBar(
title: const Text("Terminal Library:"),
),
body: TerminalLibraryFlutterViewWidget(
terminalLibraryFlutter,
controller: terminalLibraryFlutterController,
autofocus: true,
backgroundOpacity: 0,
simulateScroll: true,
padding: const EdgeInsets.all(5),
alwaysShowCursor: true,
deleteDetection: Dart.isMobile,
),
);
}
}
```