This commit is contained in:
lollipopkit
2023-05-28 15:03:02 +08:00
parent ae822de737
commit 68c1fe4943
11 changed files with 294 additions and 140 deletions

View File

@@ -360,7 +360,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 328;
CURRENT_PROJECT_VERSION = 329;
DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -368,7 +368,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.328;
MARKETING_VERSION = 1.0.329;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -491,7 +491,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 328;
CURRENT_PROJECT_VERSION = 329;
DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -499,7 +499,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.328;
MARKETING_VERSION = 1.0.329;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -516,7 +516,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 328;
CURRENT_PROJECT_VERSION = 329;
DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -524,7 +524,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.328;
MARKETING_VERSION = 1.0.329;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";

View File

@@ -1,90 +0,0 @@
import 'package:flutter/material.dart';
import 'package:xterm/ui.dart' hide TerminalColors;
class TerminalUITheme {
final Color cursor;
final Color selection;
final Color foreground;
final Color background;
final Color searchHitBackground;
final Color searchHitBackgroundCurrent;
final Color searchHitForeground;
const TerminalUITheme({
required this.cursor,
required this.selection,
required this.foreground,
required this.background,
required this.searchHitBackground,
required this.searchHitBackgroundCurrent,
required this.searchHitForeground,
});
TerminalTheme toTerminalTheme(TerminalColors termColor) {
return TerminalTheme(
cursor: cursor,
selection: selection,
foreground: foreground,
background: background,
black: termColor.black,
red: termColor.red,
green: termColor.green,
yellow: termColor.yellow,
blue: termColor.blue,
magenta: termColor.magenta,
cyan: termColor.cyan,
white: termColor.white,
brightBlack: termColor.brightBlack,
brightRed: termColor.brightRed,
brightGreen: termColor.brightGreen,
brightYellow: termColor.brightYellow,
brightBlue: termColor.brightBlue,
brightMagenta: termColor.brightMagenta,
brightCyan: termColor.brightCyan,
brightWhite: termColor.brightWhite,
searchHitBackground: searchHitBackground,
searchHitBackgroundCurrent: searchHitBackgroundCurrent,
searchHitForeground: searchHitForeground,
);
}
}
class TerminalColors {
final Color black;
final Color red;
final Color green;
final Color yellow;
final Color blue;
final Color magenta;
final Color cyan;
final Color white;
/// Also called grey
final Color brightBlack;
final Color brightRed;
final Color brightGreen;
final Color brightYellow;
final Color brightBlue;
final Color brightMagenta;
final Color brightCyan;
final Color brightWhite;
const TerminalColors(
this.red,
this.green,
this.yellow,
this.blue,
this.magenta,
this.cyan,
this.white,
this.brightBlack,
this.brightRed,
this.brightGreen,
this.brightYellow,
this.brightBlue,
this.brightMagenta,
this.brightCyan, {
this.black = const Color(0x00000000),
this.brightWhite = const Color(0xFFFFFFFF),
});
}

View File

@@ -2,8 +2,8 @@
class BuildData {
static const String name = "ServerBox";
static const int build = 328;
static const int build = 329;
static const String engine = "3.10.0";
static const String buildAt = "2023-05-27 19:03:35.177457";
static const int modifications = 3;
static const String buildAt = "2023-05-27 22:51:11.684423";
static const int modifications = 7;
}

View File

@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:toolbox/data/model/ssh/terminal_color.dart';
import 'package:xterm/ui.dart';
const termDarkTheme = TerminalUITheme(
const termDarkTheme = TerminalTheme(
cursor: Color.fromARGB(137, 174, 175, 173),
selection: Color.fromARGB(147, 174, 175, 173),
foreground: Color(0XFFCCCCCC),
@@ -9,9 +9,25 @@ const termDarkTheme = TerminalUITheme(
searchHitBackground: Color(0XFFFFFF2B),
searchHitBackgroundCurrent: Color(0XFF31FF26),
searchHitForeground: Color(0XFF000000),
red: Color.fromARGB(255, 194, 54, 33),
green: Color.fromARGB(255, 37, 188, 36),
yellow: Color.fromARGB(255, 173, 173, 39),
blue: Color.fromARGB(255, 73, 46, 225),
magenta: Color.fromARGB(255, 211, 56, 211),
cyan: Color.fromARGB(255, 51, 187, 200),
white: Color.fromARGB(255, 203, 204, 205),
brightBlack: Color.fromARGB(255, 129, 131, 131),
brightRed: Color.fromARGB(255, 252, 57, 31),
brightGreen: Color.fromARGB(255, 49, 231, 34),
brightYellow: Color.fromARGB(255, 234, 236, 35),
brightBlue: Color.fromARGB(255, 88, 51, 255),
brightMagenta: Color.fromARGB(255, 249, 53, 248),
brightCyan: Color.fromARGB(255, 20, 240, 240),
brightWhite: Color.fromARGB(255, 233, 235, 235),
black: Colors.black,
);
const termLightTheme = TerminalUITheme(
const termLightTheme = TerminalTheme(
cursor: Color.fromARGB(153, 174, 175, 173),
selection: Color.fromARGB(102, 174, 175, 173),
foreground: Color(0XFF000000),
@@ -19,25 +35,20 @@ const termLightTheme = TerminalUITheme(
searchHitBackground: Color(0XFFFFFF2B),
searchHitBackgroundCurrent: Color(0XFF31FF26),
searchHitForeground: Color(0XFF000000),
red: Color.fromARGB(255, 194, 54, 33),
green: Color.fromARGB(255, 37, 188, 36),
yellow: Color.fromARGB(255, 173, 173, 39),
blue: Color.fromARGB(255, 73, 46, 225),
magenta: Color.fromARGB(255, 211, 56, 211),
cyan: Color.fromARGB(255, 51, 187, 200),
white: Color.fromARGB(255, 203, 204, 205),
brightBlack: Color.fromARGB(255, 129, 131, 131),
brightRed: Color.fromARGB(255, 252, 57, 31),
brightGreen: Color.fromARGB(255, 49, 231, 34),
brightYellow: Color.fromARGB(255, 234, 236, 35),
brightBlue: Color.fromARGB(255, 88, 51, 255),
brightMagenta: Color.fromARGB(255, 249, 53, 248),
brightCyan: Color.fromARGB(255, 20, 240, 240),
brightWhite: Color.fromARGB(255, 233, 235, 235),
black: Colors.black,
);
class MacOSTerminalColor extends TerminalColors {
MacOSTerminalColor()
: super(
const Color.fromARGB(255, 194, 54, 33),
const Color.fromARGB(255, 37, 188, 36),
const Color.fromARGB(255, 173, 173, 39),
const Color.fromARGB(255, 73, 46, 225),
const Color.fromARGB(255, 211, 56, 211),
const Color.fromARGB(255, 51, 187, 200),
const Color.fromARGB(255, 203, 204, 205),
const Color.fromARGB(255, 129, 131, 131),
const Color.fromARGB(255, 252, 57, 31),
const Color.fromARGB(255, 49, 231, 34),
const Color.fromARGB(255, 234, 236, 35),
const Color.fromARGB(255, 88, 51, 255),
const Color.fromARGB(255, 249, 53, 248),
const Color.fromARGB(255, 20, 240, 240),
brightWhite: const Color.fromARGB(255, 233, 235, 235),
);
}

66
lib/view/page/editor.dart Normal file
View File

@@ -0,0 +1,66 @@
import 'package:flutter/material.dart';
import 'package:flutter_code_editor/flutter_code_editor.dart';
import 'package:flutter_highlight/themes/monokai-sublime.dart';
import 'package:highlight/languages/java.dart';
import 'package:toolbox/core/extension/navigator.dart';
class EditorPage extends StatefulWidget {
final String? initCode;
const EditorPage({Key? key, this.initCode}) : super(key: key);
@override
_EditorPageState createState() => _EditorPageState();
}
class _EditorPageState extends State<EditorPage> {
late CodeController _controller;
late final _focusNode = FocusNode();
@override
void initState() {
super.initState();
_focusNode.requestFocus();
_controller = CodeController(
text: widget.initCode,
language: java,
analyzer: const DefaultLocalAnalyzer(),
);
}
@override
void dispose() {
_controller.dispose();
_focusNode.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: monokaiSublimeTheme['root']!.backgroundColor,
appBar: AppBar(
title: const Text('Editor'),
actions: [
IconButton(
icon: const Icon(Icons.done),
onPressed: () {
context.pop(_controller.fullText);
},
),
],
),
body: CodeTheme(
data: CodeThemeData(styles: monokaiSublimeTheme),
child: SingleChildScrollView(
child: CodeField(
controller: _controller,
gutterStyle: const GutterStyle(
width: 37,
showLineNumbers: false,
),
),
),
),
);
}
}

View File

@@ -3,6 +3,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:toolbox/core/extension/navigator.dart';
import 'package:toolbox/view/page/editor.dart';
import '../../../core/extension/numx.dart';
import '../../../core/extension/stringx.dart';
@@ -172,6 +173,21 @@ class _SFTPDownloadedPageState extends State<SFTPDownloadedPage> {
shareFiles(context, [file.absolute.path]);
},
),
ListTile(
leading: const Icon(Icons.edit),
title: Text(_s.edit),
onTap: () async {
context.pop();
final stat = await file.stat();
if (stat.size > 1024 * 1024) {
showRoundDialog(context: context, child: Text('too big'));
return;
}
final f = await File(file.absolute.path).readAsString();
AppRoute(EditorPage(initCode: f), 'sftp dled editor')
.go(context);
},
)
],
),
actions: [

View File

@@ -10,7 +10,6 @@ import 'package:toolbox/core/extension/navigator.dart';
import 'package:xterm/xterm.dart';
import '../../core/utils/platform.dart';
import '../../data/model/ssh/terminal_color.dart';
import '../../core/utils/misc.dart';
import '../../core/utils/ui.dart';
import '../../core/utils/server.dart';
@@ -44,7 +43,6 @@ class _SSHPageState extends State<SSHPage> {
late TextStyle _menuTextStyle;
late S _s;
late TerminalStyle _terminalStyle;
late TerminalUITheme _termUITheme;
late TerminalTheme _terminalTheme;
var _isDark = false;
@@ -68,8 +66,7 @@ class _SSHPageState extends State<SSHPage> {
_media = MediaQuery.of(context);
_menuTextStyle = TextStyle(color: contentColor.resolve(context));
_s = S.of(context)!;
_termUITheme = _isDark ? termDarkTheme : termLightTheme;
_terminalTheme = _termUITheme.toTerminalTheme(MacOSTerminalColor());
_terminalTheme = _isDark ? termDarkTheme : termLightTheme;
}
@override
@@ -81,7 +78,7 @@ class _SSHPageState extends State<SSHPage> {
@override
Widget build(BuildContext context) {
Widget child = Scaffold(
backgroundColor: _termUITheme.background,
backgroundColor: _terminalTheme.background,
body: _buildBody(),
bottomNavigationBar: _buildBottom(),
);
@@ -120,7 +117,7 @@ class _SSHPageState extends State<SSHPage> {
duration: const Duration(milliseconds: 23),
curve: Curves.fastOutSlowIn,
child: Container(
color: _termUITheme.background,
color: _terminalTheme.background,
height: _virtualKeyboardHeight,
child: Consumer<VirtualKeyboard>(
builder: (_, __, ___) => _buildVirtualKey(),

View File

@@ -475,9 +475,9 @@
baseConfigurationReference = C1C758C41C4E208965A68933 /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 328;
CURRENT_PROJECT_VERSION = 329;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0.328;
MARKETING_VERSION = 1.0.329;
PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
@@ -490,9 +490,9 @@
baseConfigurationReference = 15AF97DF993E8968098D6EBE /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 328;
CURRENT_PROJECT_VERSION = 329;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0.328;
MARKETING_VERSION = 1.0.329;
PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
@@ -505,9 +505,9 @@
baseConfigurationReference = 7CFA7DE7FABA75685DFB6948 /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 328;
CURRENT_PROJECT_VERSION = 329;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0.328;
MARKETING_VERSION = 1.0.329;
PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;

View File

@@ -8,9 +8,9 @@ const appName = 'ServerBox';
const buildDataFilePath = 'lib/data/res/build_data.dart';
const apkPath = 'build/app/outputs/flutter-apk/app-release.apk';
const xcarchivePath = 'build/ios/archive/Runner.xcarchive';
const ipaPath = 'build/ios/ipa/$appName.ipa';
const appleXCConfigPath = 'Runner.xcodeproj/project.pbxproj';
const releaseDirPath = './release';
const releaseDirPath = '/Volumes/bc4/releases';
var regAppleProjectVer = RegExp(r'CURRENT_PROJECT_VERSION = .+;');
var regAppleMarketVer = RegExp(r'MARKETING_VERSION = .+');
@@ -148,12 +148,11 @@ Future<void> flutterBuild(
}
Future<void> flutterBuildIOS() async {
await flutterBuild(xcarchivePath, '${appName}_ios_build.xcarchive', 'ipa');
await flutterBuild(ipaPath, '${appName}_ios_build.ipa', 'ios');
}
Future<void> flutterBuildMacOS() async {
await flutterBuild(
xcarchivePath, '${appName}_macos_build.xcarchive', 'macos');
await flutterBuild(ipaPath, '${appName}_macos_build.ipa', 'macos');
}
Future<void> flutterBuildAndroid() async {

View File

@@ -57,6 +57,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.11.0"
autotrie:
dependency: transitive
description:
name: autotrie
sha256: "55da6faefb53cfcb0abb2f2ca8636123fb40e35286bb57440d2cf467568188f8"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
boolean_selector:
dependency: transitive
description:
@@ -137,6 +145,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.0"
charcode:
dependency: transitive
description:
name: charcode
sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306
url: "https://pub.dev"
source: hosted
version: "1.3.1"
checked_yaml:
dependency: transitive
description:
@@ -194,6 +210,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "22.09.0"
coverage:
dependency: transitive
description:
name: coverage
sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097"
url: "https://pub.dev"
source: hosted
version: "1.6.3"
cross_file:
dependency: transitive
description:
@@ -319,6 +343,22 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_code_editor:
dependency: "direct main"
description:
name: flutter_code_editor
sha256: "5cd0337a24155dcac85d4f5b0cc8fa022ab19785a968a86726cdc62e363ee428"
url: "https://pub.dev"
source: hosted
version: "0.2.23"
flutter_highlight:
dependency: "direct main"
description:
name: flutter_highlight
sha256: "7b96333867aa07e122e245c033b8ad622e4e3a42a1a2372cbb098a2541d8782c"
url: "https://pub.dev"
source: hosted
version: "0.7.0"
flutter_lints:
dependency: "direct dev"
description:
@@ -398,6 +438,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.2.0"
highlight:
dependency: "direct main"
description:
name: highlight
sha256: "5353a83ffe3e3eca7df0abfb72dcf3fa66cc56b953728e7113ad4ad88497cf21"
url: "https://pub.dev"
source: hosted
version: "0.7.0"
hive:
dependency: transitive
description:
@@ -502,6 +550,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.8.1"
linked_scroll_controller:
dependency: transitive
description:
name: linked_scroll_controller
sha256: e6020062bcf4ffc907ee7fd090fa971e65d8dfaac3c62baf601a3ced0b37986a
url: "https://pub.dev"
source: hosted
version: "0.2.0"
lints:
dependency: transitive
description:
@@ -550,6 +606,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.4"
mocktail:
dependency: transitive
description:
name: mocktail
sha256: "80a996cd9a69284b3dc521ce185ffe9150cde69767c2d3a0720147d93c0cef53"
url: "https://pub.dev"
source: hosted
version: "0.3.0"
nested:
dependency: transitive
description:
@@ -558,6 +622,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.0"
node_preamble:
dependency: transitive
description:
name: node_preamble
sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
package_config:
dependency: transitive
description:
@@ -742,6 +814,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.3.8+2"
scrollable_positioned_list:
dependency: transitive
description:
name: scrollable_positioned_list
sha256: "1b54d5f1329a1e263269abc9e2543d90806131aa14fe7c6062a8054d57249287"
url: "https://pub.dev"
source: hosted
version: "0.3.8"
share_plus:
dependency: "direct main"
description:
@@ -774,6 +854,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.4.1"
shelf_packages_handler:
dependency: transitive
description:
name: shelf_packages_handler
sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
shelf_static:
dependency: transitive
description:
name: shelf_static
sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e
url: "https://pub.dev"
source: hosted
version: "1.1.2"
shelf_web_socket:
dependency: transitive
description:
@@ -803,6 +899,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.3"
source_map_stack_trace:
dependency: transitive
description:
name: source_map_stack_trace
sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
source_maps:
dependency: transitive
description:
name: source_maps
sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703"
url: "https://pub.dev"
source: hosted
version: "0.10.12"
source_span:
dependency: transitive
description:
@@ -851,6 +963,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.2.1"
test:
dependency: transitive
description:
name: test
sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4"
url: "https://pub.dev"
source: hosted
version: "1.24.1"
test_api:
dependency: transitive
description:
@@ -859,6 +979,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.5.1"
test_core:
dependency: transitive
description:
name: test_core
sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93"
url: "https://pub.dev"
source: hosted
version: "0.5.1"
timing:
dependency: transitive
description:
@@ -867,6 +995,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.1"
tuple:
dependency: transitive
description:
name: tuple
sha256: "0ea99cd2f9352b2586583ab2ce6489d1f95a5f6de6fb9492faaf97ae2060f0aa"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
typed_data:
dependency: transitive
description:
@@ -963,6 +1099,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.4"
vm_service:
dependency: transitive
description:
name: vm_service
sha256: f3743ca475e0c9ef71df4ba15eb2d7684eecd5c8ba20a462462e4e8b561b2e11
url: "https://pub.dev"
source: hosted
version: "11.6.0"
watcher:
dependency: transitive
description:
@@ -979,6 +1123,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.4.0"
webkit_inspection_protocol:
dependency: transitive
description:
name: webkit_inspection_protocol
sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
win32:
dependency: transitive
description:

View File

@@ -63,6 +63,9 @@ dependencies:
url: https://github.com/lollipopkit/xterm.dart
file_picker: ^5.2.5
plain_notification_token: ^0.0.4
highlight: ^0.7.0
flutter_highlight: ^0.7.0
flutter_code_editor: ^0.2.23
dev_dependencies:
flutter_native_splash: ^2.1.6