mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
commit
7314f02282
9
.github/workflows/dart_lint.yml
vendored
9
.github/workflows/dart_lint.yml
vendored
@ -8,9 +8,12 @@ name: Flutter lint
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
paths:
|
||||
- 'frontend/app_flowy'
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
paths:
|
||||
- 'frontend/app_flowy'
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
@ -25,10 +28,10 @@ jobs:
|
||||
- uses: subosito/flutter-action@v1
|
||||
with:
|
||||
channel: "stable"
|
||||
- name: Flutter pub get
|
||||
- name: Deps Flutter
|
||||
run: flutter pub get
|
||||
working-directory: frontend/app_flowy
|
||||
- name: Generate language files
|
||||
- name: Code Generate
|
||||
working-directory: frontend/app_flowy
|
||||
run:
|
||||
flutter pub run easy_localization:generate --source-dir ./assets/translations -f keys -O lib/generated -o locale_keys.g.dart
|
||||
|
47
.github/workflows/dart_test.yml
vendored
Normal file
47
.github/workflows/dart_test.yml
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
name: Unit test(Flutter)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- uses: subosito/flutter-action@v1
|
||||
with:
|
||||
channel: "stable"
|
||||
- uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
- name: Deps Rust
|
||||
working-directory: frontend
|
||||
run: |
|
||||
cargo install --force cargo-make
|
||||
cargo install --force duckscript_cli
|
||||
cargo make flowy_dev
|
||||
echo PATH="$PATH":"$HOME/.pub-cache/bin" >> $GITHUB_PATH
|
||||
- name: Deps Flutter
|
||||
run: flutter pub get
|
||||
working-directory: frontend/app_flowy
|
||||
- name: Code Generate
|
||||
working-directory: frontend/app_flowy
|
||||
run:
|
||||
flutter pub run easy_localization:generate --source-dir ./assets/translations -f keys -O lib/generated -o locale_keys.g.dart
|
||||
- name: Build FlowySDK
|
||||
working-directory: frontend
|
||||
run: |
|
||||
flutter config --enable-linux-desktop
|
||||
cargo make --profile development-linux-x86 flowy-sdk-dev
|
||||
- name: Run bloc tests
|
||||
working-directory: frontend/app_flowy
|
||||
run: |
|
||||
flutter test
|
||||
|
16
.github/workflows/rust_test.yml
vendored
16
.github/workflows/rust_test.yml
vendored
@ -3,14 +3,14 @@ name: Unit test(Rust)
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
# paths:
|
||||
# - 'frontend/rust-lib'
|
||||
# - 'shared-lib'
|
||||
paths:
|
||||
- 'frontend/rust-lib'
|
||||
- 'shared-lib'
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
# paths:
|
||||
# - 'frontend/rust-lib'
|
||||
# - 'shared-lib'
|
||||
paths:
|
||||
- 'frontend/rust-lib'
|
||||
- 'shared-lib'
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
@ -31,9 +31,9 @@ jobs:
|
||||
- name: Install cargo-make
|
||||
run: cargo install --force cargo-make
|
||||
working-directory: frontend
|
||||
- name: RustLib tests
|
||||
- name: Run rust-lib tests
|
||||
run: cargo test --no-default-features
|
||||
working-directory: frontend/rust-lib
|
||||
- name: Sharedlib tests
|
||||
- name: Run shared-lib tests
|
||||
run: cargo test --no-default-features
|
||||
working-directory: shared-lib
|
||||
|
@ -14,12 +14,13 @@ RUST_LOG = "info"
|
||||
CARGO_MAKE_EXTEND_WORKSPACE_MAKEFILE = true
|
||||
CARGO_MAKE_CRATE_FS_NAME = "dart_ffi"
|
||||
CARGO_MAKE_CRATE_NAME = "dart-ffi"
|
||||
LIB_NAME = "dart_ffi"
|
||||
VERSION = "0.0.3"
|
||||
FEATURES = "flutter"
|
||||
PRODUCT_NAME = "AppFlowy"
|
||||
#CRATE_TYPE: https://doc.rust-lang.org/reference/linkage.html
|
||||
CRATE_TYPE = "staticlib"
|
||||
SDK_EXT = "a"
|
||||
CRATE_TYPE = "cdylib"
|
||||
SDK_EXT = "dylib"
|
||||
APP_ENVIRONMENT = "local"
|
||||
FLUTTER_FLOWY_SDK_PATH="app_flowy/packages/flowy_sdk"
|
||||
PROTOBUF_DERIVE_CACHE="../shared-lib/flowy-derive/src/derive_cache/derive_cache.rs"
|
||||
@ -124,7 +125,6 @@ script_runner = "@shell"
|
||||
[env.production-ios]
|
||||
BUILD_FLAG = "release"
|
||||
TARGET_OS = "ios"
|
||||
CRATE_TYPE = "staticlib"
|
||||
FLUTTER_OUTPUT_DIR = "Release"
|
||||
PRODUCT_EXT = "ipa"
|
||||
|
||||
@ -153,7 +153,6 @@ script = [
|
||||
]
|
||||
script_runner = "@duckscript"
|
||||
|
||||
|
||||
[tasks.test-build]
|
||||
condition = { env_set = [ "FLUTTER_FLOWY_SDK_PATH"] }
|
||||
script = [
|
||||
|
3
frontend/app_flowy/.gitignore
vendored
3
frontend/app_flowy/.gitignore
vendored
@ -59,4 +59,5 @@ windows/flutter/dart_ffi/
|
||||
**/**/*.lib
|
||||
**/**/*.dll
|
||||
**/**/*.so
|
||||
**/**/Brewfile.lock.json
|
||||
**/**/Brewfile.lock.json
|
||||
**/.sandbox
|
4
frontend/app_flowy/.vscode/launch.json
vendored
4
frontend/app_flowy/.vscode/launch.json
vendored
@ -11,7 +11,7 @@
|
||||
"type": "dart",
|
||||
"preLaunchTask": "build_flowy_sdk",
|
||||
"env":{
|
||||
"RUST_LOG":"info",
|
||||
"RUST_LOG":"debug"
|
||||
},
|
||||
"cwd": "${workspaceRoot}"
|
||||
},
|
||||
@ -22,7 +22,7 @@
|
||||
"type": "dart",
|
||||
"preLaunchTask": "build_flowy_sdk",
|
||||
"env":{
|
||||
"RUST_LOG":"trace",
|
||||
"RUST_LOG":"trace"
|
||||
},
|
||||
"cwd": "${workspaceRoot}"
|
||||
},
|
||||
|
@ -14,5 +14,5 @@ void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
await EasyLocalization.ensureInitialized();
|
||||
|
||||
System.run(FlowyApp());
|
||||
await FlowyRunner.run(FlowyApp());
|
||||
}
|
||||
|
@ -1,40 +0,0 @@
|
||||
import 'package:app_flowy/startup/startup.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
|
||||
class LaunchContext {
|
||||
GetIt getIt;
|
||||
IntegrationEnv env;
|
||||
LaunchContext(this.getIt, this.env);
|
||||
}
|
||||
|
||||
enum LaunchTaskType {
|
||||
dataProcessing,
|
||||
appLauncher,
|
||||
}
|
||||
|
||||
/// The interface of an app launch task, which will trigger
|
||||
/// some nonresident indispensable task in app launching task.
|
||||
abstract class LaunchTask {
|
||||
LaunchTaskType get type => LaunchTaskType.dataProcessing;
|
||||
Future<void> initialize(LaunchContext context);
|
||||
}
|
||||
|
||||
class AppLauncher {
|
||||
List<LaunchTask> tasks;
|
||||
IntegrationEnv env;
|
||||
GetIt getIt;
|
||||
|
||||
AppLauncher(this.env, this.getIt) : tasks = List.from([]);
|
||||
|
||||
void addTask(LaunchTask task) {
|
||||
tasks.add(task);
|
||||
}
|
||||
|
||||
void launch() async {
|
||||
final context = LaunchContext(getIt, env);
|
||||
for (var task in tasks) {
|
||||
await task.initialize(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
//test git hooks
|
@ -1,13 +1,13 @@
|
||||
import 'package:app_flowy/startup/launcher.dart';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:app_flowy/startup/tasks/prelude.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
import 'package:app_flowy/workspace/infrastructure/deps_resolver.dart';
|
||||
import 'package:app_flowy/user/infrastructure/deps_resolver.dart';
|
||||
import 'package:flowy_sdk/flowy_sdk.dart';
|
||||
|
||||
import 'tasks/init_platform_service.dart';
|
||||
|
||||
// [[diagram: flowy startup flow]]
|
||||
// ┌──────────┐
|
||||
// │ FlowyApp │
|
||||
@ -26,44 +26,100 @@ import 'tasks/init_platform_service.dart';
|
||||
//
|
||||
// 3.build MeterialApp
|
||||
final getIt = GetIt.instance;
|
||||
enum IntegrationEnv {
|
||||
dev,
|
||||
pro,
|
||||
}
|
||||
|
||||
abstract class EntryPoint {
|
||||
Widget create();
|
||||
}
|
||||
|
||||
class System {
|
||||
static void run(EntryPoint f) {
|
||||
class FlowyRunner {
|
||||
static Future<void> run(EntryPoint f) async {
|
||||
// Specify the env
|
||||
const env = IntegrationEnv.dev;
|
||||
|
||||
// Config the deps graph
|
||||
getIt.registerFactory<EntryPoint>(() => f);
|
||||
|
||||
resolveDependencies(env);
|
||||
final env = integrationEnv();
|
||||
initGetIt(getIt, env, f);
|
||||
|
||||
// add task
|
||||
getIt<AppLauncher>().addTask(InitRustSDKTask());
|
||||
getIt<AppLauncher>().addTask(AppWidgetTask());
|
||||
getIt<AppLauncher>().addTask(InitPlatformService());
|
||||
|
||||
if (!env.isTest()) {
|
||||
getIt<AppLauncher>().addTask(InitAppWidgetTask());
|
||||
getIt<AppLauncher>().addTask(InitPlatformServiceTask());
|
||||
}
|
||||
|
||||
// execute the tasks
|
||||
getIt<AppLauncher>().launch();
|
||||
}
|
||||
}
|
||||
|
||||
void resolveDependencies(IntegrationEnv env) => initGetIt(getIt, env);
|
||||
|
||||
Future<void> initGetIt(
|
||||
GetIt getIt,
|
||||
IntegrationEnv env,
|
||||
IntegrationMode env,
|
||||
EntryPoint f,
|
||||
) async {
|
||||
getIt.registerFactory<EntryPoint>(() => f);
|
||||
getIt.registerLazySingleton<FlowySDK>(() => const FlowySDK());
|
||||
getIt.registerLazySingleton<AppLauncher>(() => AppLauncher(env, getIt));
|
||||
|
||||
await UserDepsResolver.resolve(getIt);
|
||||
await HomeDepsResolver.resolve(getIt);
|
||||
}
|
||||
|
||||
class LaunchContext {
|
||||
GetIt getIt;
|
||||
IntegrationMode env;
|
||||
LaunchContext(this.getIt, this.env);
|
||||
}
|
||||
|
||||
enum LaunchTaskType {
|
||||
dataProcessing,
|
||||
appLauncher,
|
||||
}
|
||||
|
||||
/// The interface of an app launch task, which will trigger
|
||||
/// some nonresident indispensable task in app launching task.
|
||||
abstract class LaunchTask {
|
||||
LaunchTaskType get type => LaunchTaskType.dataProcessing;
|
||||
Future<void> initialize(LaunchContext context);
|
||||
}
|
||||
|
||||
class AppLauncher {
|
||||
List<LaunchTask> tasks;
|
||||
IntegrationMode env;
|
||||
GetIt getIt;
|
||||
|
||||
AppLauncher(this.env, this.getIt) : tasks = List.from([]);
|
||||
|
||||
void addTask(LaunchTask task) {
|
||||
tasks.add(task);
|
||||
}
|
||||
|
||||
Future<void> launch() async {
|
||||
final context = LaunchContext(getIt, env);
|
||||
for (var task in tasks) {
|
||||
await task.initialize(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum IntegrationMode {
|
||||
develop,
|
||||
release,
|
||||
test,
|
||||
}
|
||||
|
||||
extension IntegrationEnvExt on IntegrationMode {
|
||||
bool isTest() {
|
||||
return this == IntegrationMode.test;
|
||||
}
|
||||
}
|
||||
|
||||
IntegrationMode integrationEnv() {
|
||||
if (Platform.environment.containsKey('FLUTTER_TEST')) {
|
||||
return IntegrationMode.test;
|
||||
}
|
||||
|
||||
if (kReleaseMode) {
|
||||
return IntegrationMode.release;
|
||||
}
|
||||
|
||||
return IntegrationMode.develop;
|
||||
}
|
||||
|
@ -7,11 +7,10 @@ import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:window_size/window_size.dart';
|
||||
import 'package:app_flowy/startup/launcher.dart';
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
|
||||
class AppWidgetTask extends LaunchTask {
|
||||
class InitAppWidgetTask extends LaunchTask {
|
||||
@override
|
||||
LaunchTaskType get type => LaunchTaskType.appLauncher;
|
||||
|
@ -1,9 +1,7 @@
|
||||
import 'dart:io';
|
||||
import 'package:app_flowy/startup/launcher.dart';
|
||||
import 'package:app_flowy/startup/startup.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:flowy_sdk/flowy_sdk.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class InitRustSDKTask extends LaunchTask {
|
||||
@override
|
||||
@ -11,23 +9,27 @@ class InitRustSDKTask extends LaunchTask {
|
||||
|
||||
@override
|
||||
Future<void> initialize(LaunchContext context) async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
Directory directory = await getApplicationDocumentsDirectory();
|
||||
final documentPath = directory.path;
|
||||
|
||||
return Directory('$documentPath/flowy').create().then((Directory directory) async {
|
||||
switch (context.env) {
|
||||
case IntegrationEnv.dev:
|
||||
// await context.getIt<FlowySDK>().init(Directory('./temp/flowy_dev'));
|
||||
await context.getIt<FlowySDK>().init(directory);
|
||||
break;
|
||||
case IntegrationEnv.pro:
|
||||
await context.getIt<FlowySDK>().init(directory);
|
||||
break;
|
||||
default:
|
||||
assert(false, 'Unsupported env');
|
||||
}
|
||||
});
|
||||
switch (context.env) {
|
||||
case IntegrationMode.release:
|
||||
Directory documentsDir = await getApplicationDocumentsDirectory();
|
||||
return Directory('${documentsDir.path}/flowy').create().then(
|
||||
(Directory directory) async {
|
||||
await context.getIt<FlowySDK>().init(directory);
|
||||
},
|
||||
);
|
||||
case IntegrationMode.develop:
|
||||
Directory documentsDir = await getApplicationDocumentsDirectory();
|
||||
return Directory('${documentsDir.path}/flowy_dev').create().then(
|
||||
(Directory directory) async {
|
||||
await context.getIt<FlowySDK>().init(directory);
|
||||
},
|
||||
);
|
||||
case IntegrationMode.test:
|
||||
final directory = Directory("${Directory.current.path}/.sandbox");
|
||||
await context.getIt<FlowySDK>().init(directory);
|
||||
break;
|
||||
default:
|
||||
assert(false, 'Unsupported env');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,12 @@
|
||||
import 'package:app_flowy/startup/launcher.dart';
|
||||
import 'package:app_flowy/user/infrastructure/network_monitor.dart';
|
||||
|
||||
import '../startup.dart';
|
||||
|
||||
class InitPlatformService extends LaunchTask {
|
||||
class InitPlatformServiceTask extends LaunchTask {
|
||||
@override
|
||||
LaunchTaskType get type => LaunchTaskType.dataProcessing;
|
||||
|
||||
@override
|
||||
Future<void> initialize(LaunchContext context) async {
|
||||
getIt<NetworkMonitor>().start();
|
||||
getIt<NetworkListener>().start();
|
||||
}
|
||||
}
|
@ -1,2 +1,3 @@
|
||||
export 'application_widget.dart';
|
||||
export 'app_widget.dart';
|
||||
export 'init_sdk.dart';
|
||||
export 'platform_service.dart';
|
||||
|
@ -24,6 +24,6 @@ class UserDepsResolver {
|
||||
getIt.registerFactory<HomeBloc>(() => HomeBloc());
|
||||
getIt.registerFactory<EditPannelBloc>(() => EditPannelBloc());
|
||||
getIt.registerFactory<SplashBloc>(() => SplashBloc());
|
||||
getIt.registerLazySingleton<NetworkMonitor>(() => NetworkMonitor());
|
||||
getIt.registerLazySingleton<NetworkListener>(() => NetworkListener());
|
||||
}
|
||||
}
|
||||
|
@ -1,16 +1,16 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-net/network_state.pb.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class NetworkMonitor {
|
||||
class NetworkListener {
|
||||
final Connectivity _connectivity = Connectivity();
|
||||
late StreamSubscription<ConnectivityResult> _connectivitySubscription;
|
||||
|
||||
NetworkMonitor() {
|
||||
NetworkListener() {
|
||||
_connectivitySubscription = _connectivity.onConnectivityChanged.listen(_updateConnectionStatus);
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ import 'package:flowy_infra/theme.dart';
|
||||
import 'package:flowy_infra/uuid.dart';
|
||||
import 'package:flowy_infra_ui/widget/rounded_button.dart';
|
||||
import 'package:flowy_infra_ui/widget/spacing.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/protobuf.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||
|
@ -2,7 +2,7 @@ import 'package:app_flowy/startup/startup.dart';
|
||||
import 'package:app_flowy/user/application/splash_bloc.dart';
|
||||
import 'package:app_flowy/user/domain/auth_state.dart';
|
||||
import 'package:app_flowy/user/infrastructure/router.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/errors.pb.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'package:app_flowy/workspace/infrastructure/repos/app_repo.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/app.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||
|
@ -1,7 +1,7 @@
|
||||
import 'package:app_flowy/user/infrastructure/repos/user_setting_repo.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flowy_infra/theme.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-user-data-model/user_setting.pb.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
|
@ -6,7 +6,7 @@ import 'package:flowy_sdk/protobuf/flowy-folder-data-model/trash.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||
import 'package:flutter_quill/flutter_quill.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
|
@ -3,7 +3,7 @@ import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart';
|
||||
import 'package:app_flowy/workspace/infrastructure/repos/workspace_repo.dart';
|
||||
import 'package:app_flowy/workspace/presentation/stack_page/blank/blank_page.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/app.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-user-data-model/user_profile.pb.dart';
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'package:app_flowy/workspace/infrastructure/repos/trash_repo.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/trash.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
@ -1,5 +1,5 @@
|
||||
import 'package:app_flowy/workspace/infrastructure/repos/user_repo.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/workspace.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
@ -1,7 +1,7 @@
|
||||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
||||
import 'package:flowy_sdk/protobuf/dart-notify/subject.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/app.pb.dart';
|
||||
|
@ -3,7 +3,7 @@ import 'dart:typed_data';
|
||||
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/dispatch/dispatch.dart';
|
||||
import 'package:flowy_sdk/protobuf/dart-notify/subject.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-user-data-model/protobuf.dart' show UserProfile;
|
||||
|
@ -5,7 +5,7 @@ import 'package:app_flowy/workspace/presentation/stack_page/home_stack.dart';
|
||||
import 'package:app_flowy/workspace/presentation/widgets/float_bubble/question_bubble.dart';
|
||||
import 'package:app_flowy/workspace/presentation/widgets/prelude.dart';
|
||||
import 'package:app_flowy/startup/startup.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_infra_ui/style_widget/container.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-user-data-model/protobuf.dart' show UserProfile;
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/protobuf.dart';
|
||||
|
@ -11,7 +11,7 @@ import 'package:flowy_infra/size.dart';
|
||||
import 'package:flowy_infra/theme.dart';
|
||||
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||
import 'package:flowy_infra_ui/widget/rounded_button.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/share.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
|
||||
|
@ -2,7 +2,7 @@ import 'package:app_flowy/startup/startup.dart';
|
||||
import 'package:app_flowy/workspace/domain/page_stack/page_stack.dart';
|
||||
import 'package:app_flowy/workspace/presentation/home/home_screen.dart';
|
||||
import 'package:flowy_infra/theme.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:time/time.dart';
|
||||
|
@ -7,7 +7,7 @@ import 'package:flowy_infra_ui/widget/buttons/secondary_button.dart';
|
||||
import 'package:flowy_infra_ui/widget/spacing.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:app_flowy/startup/tasks/application_widget.dart';
|
||||
import 'package:app_flowy/startup/tasks/app_widget.dart';
|
||||
import 'package:flowy_infra/size.dart';
|
||||
import 'package:flowy_infra_ui/style_widget/text_input.dart';
|
||||
import 'package:flowy_infra_ui/widget/dialog/styled_dialogs.dart';
|
||||
|
@ -5,7 +5,7 @@ import 'package:flowy_infra_ui/flowy_infra_ui.dart';
|
||||
import 'package:flowy_infra_ui/style_widget/button.dart';
|
||||
import 'package:flowy_infra_ui/style_widget/text.dart';
|
||||
import 'package:flowy_infra_ui/widget/spacing.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
@ -48,14 +48,14 @@ class QuestionBubble extends StatelessWidget {
|
||||
case BubbleAction.debug:
|
||||
final deviceInfoPlugin = DeviceInfoPlugin();
|
||||
final deviceInfo = deviceInfoPlugin.deviceInfo;
|
||||
|
||||
|
||||
deviceInfo.then((info) {
|
||||
var debugText = "";
|
||||
info.toMap().forEach((key, value) {
|
||||
debugText = debugText + "$key: $value\n";
|
||||
});
|
||||
|
||||
Clipboard.setData(ClipboardData( text: debugText ));
|
||||
Clipboard.setData(ClipboardData(text: debugText));
|
||||
|
||||
Widget toast = Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0),
|
||||
@ -64,8 +64,8 @@ class QuestionBubble extends StatelessWidget {
|
||||
color: theme.main1,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Icon(Icons.check),
|
||||
const SizedBox(
|
||||
width: 12.0,
|
||||
@ -76,9 +76,9 @@ class QuestionBubble extends StatelessWidget {
|
||||
);
|
||||
|
||||
fToast.showToast(
|
||||
child: toast,
|
||||
gravity: ToastGravity.BOTTOM,
|
||||
toastDuration: const Duration(seconds: 3),
|
||||
child: toast,
|
||||
gravity: ToastGravity.BOTTOM,
|
||||
toastDuration: const Duration(seconds: 3),
|
||||
);
|
||||
}).catchError((error) {
|
||||
Log.info("Debug info has not yet been implemented on this platform");
|
||||
@ -90,8 +90,8 @@ class QuestionBubble extends StatelessWidget {
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
const Icon(Icons.close),
|
||||
const SizedBox(
|
||||
width: 12.0,
|
||||
@ -102,9 +102,9 @@ class QuestionBubble extends StatelessWidget {
|
||||
);
|
||||
|
||||
fToast.showToast(
|
||||
child: toast,
|
||||
gravity: ToastGravity.BOTTOM,
|
||||
toastDuration: const Duration(seconds: 3),
|
||||
child: toast,
|
||||
gravity: ToastGravity.BOTTOM,
|
||||
toastDuration: const Duration(seconds: 3),
|
||||
);
|
||||
}, test: (e) => e is UnimplementedError);
|
||||
break;
|
||||
@ -213,11 +213,7 @@ class FlowyVersionDescription extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
enum BubbleAction {
|
||||
whatsNews,
|
||||
help,
|
||||
debug
|
||||
}
|
||||
enum BubbleAction { whatsNews, help, debug }
|
||||
|
||||
class BubbleActionWrapper extends ActionItem {
|
||||
final BubbleAction inner;
|
||||
|
@ -34,7 +34,6 @@ class ViewSection extends StatelessWidget {
|
||||
|
||||
Widget _renderSectionItems(BuildContext context, List<View> views) {
|
||||
List<Widget> viewWidgets = [];
|
||||
|
||||
if (views.isNotEmpty) {
|
||||
viewWidgets = views
|
||||
.map(
|
||||
|
75
frontend/app_flowy/packages/flowy_log/.gitignore
vendored
75
frontend/app_flowy/packages/flowy_log/.gitignore
vendored
@ -1,75 +0,0 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
.idea/
|
||||
|
||||
# The .vscode folder contains launch configuration and tasks you configure in
|
||||
# VS Code which you may wish to be included in version control, so this line
|
||||
# is commented out by default.
|
||||
#.vscode/
|
||||
|
||||
# Flutter/Dart/Pub related
|
||||
**/doc/api/
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
build/
|
||||
|
||||
# Android related
|
||||
**/android/**/gradle-wrapper.jar
|
||||
**/android/.gradle
|
||||
**/android/captures/
|
||||
**/android/gradlew
|
||||
**/android/gradlew.bat
|
||||
**/android/local.properties
|
||||
**/android/**/GeneratedPluginRegistrant.java
|
||||
|
||||
# iOS/XCode related
|
||||
**/ios/**/*.mode1v3
|
||||
**/ios/**/*.mode2v3
|
||||
**/ios/**/*.moved-aside
|
||||
**/ios/**/*.pbxuser
|
||||
**/ios/**/*.perspectivev3
|
||||
**/ios/**/*sync/
|
||||
**/ios/**/.sconsign.dblite
|
||||
**/ios/**/.tags*
|
||||
**/ios/**/.vagrant/
|
||||
**/ios/**/DerivedData/
|
||||
**/ios/**/Icon?
|
||||
**/ios/**/Pods/
|
||||
**/ios/**/.symlinks/
|
||||
**/ios/**/profile
|
||||
**/ios/**/xcuserdata
|
||||
**/ios/.generated/
|
||||
**/ios/Flutter/App.framework
|
||||
**/ios/Flutter/Flutter.framework
|
||||
**/ios/Flutter/Flutter.podspec
|
||||
**/ios/Flutter/Generated.xcconfig
|
||||
**/ios/Flutter/ephemeral
|
||||
**/ios/Flutter/app.flx
|
||||
**/ios/Flutter/app.zip
|
||||
**/ios/Flutter/flutter_assets/
|
||||
**/ios/Flutter/flutter_export_environment.sh
|
||||
**/ios/ServiceDefinitions.json
|
||||
**/ios/Runner/GeneratedPluginRegistrant.*
|
||||
|
||||
# Exceptions to above rules.
|
||||
!**/ios/**/default.mode1v3
|
||||
!**/ios/**/default.mode2v3
|
||||
!**/ios/**/default.pbxuser
|
||||
!**/ios/**/default.perspectivev3
|
@ -1,10 +0,0 @@
|
||||
# This file tracks properties of this Flutter project.
|
||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||
#
|
||||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: cc00e7e6bc281f6af9a257e7e33868ef782b1cf7
|
||||
channel: dev
|
||||
|
||||
project_type: package
|
@ -1 +0,0 @@
|
||||
TODO: Add your license here.
|
@ -1,4 +0,0 @@
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
# Additional information about this file can be found at
|
||||
# https://dart.dev/guides/language/analysis-options
|
@ -1,168 +0,0 @@
|
||||
# Generated by pub
|
||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||
packages:
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.8.2"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: boolean_selector
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
charcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: charcode
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.1"
|
||||
clock:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: clock
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.15.0"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fake_async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_lints:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_lints
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.4"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
lints:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: lints
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
logger:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: logger
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.11"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.7.0"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.99"
|
||||
source_span:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_span
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.1"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.3"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_math
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
sdks:
|
||||
dart: ">=2.12.0 <3.0.0"
|
||||
flutter: ">=1.17.0"
|
@ -1,55 +0,0 @@
|
||||
name: flowy_log
|
||||
description: A new Flutter package project.
|
||||
version: 0.0.1
|
||||
homepage:
|
||||
|
||||
environment:
|
||||
sdk: ">=2.12.0 <3.0.0"
|
||||
flutter: ">=1.17.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
logger: ^1.0.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
flutter_lints: ^1.0.0
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
# following page: https://dart.dev/tools/pub/pubspec
|
||||
|
||||
# The following section is specific to Flutter.
|
||||
flutter:
|
||||
|
||||
# To add assets to your package, add an assets section, like this:
|
||||
# assets:
|
||||
# - images/a_dot_burr.jpeg
|
||||
# - images/a_dot_ham.jpeg
|
||||
#
|
||||
# For details regarding assets in packages, see
|
||||
# https://flutter.dev/assets-and-images/#from-packages
|
||||
#
|
||||
# An image asset can refer to one or more resolution-specific "variants", see
|
||||
# https://flutter.dev/assets-and-images/#resolution-aware.
|
||||
|
||||
# To add custom fonts to your package, add a fonts section here,
|
||||
# in this "flutter" section. Each entry in this list should have a
|
||||
# "family" key with the font family name, and a "fonts" key with a
|
||||
# list giving the asset and other descriptors for the font. For
|
||||
# example:
|
||||
# fonts:
|
||||
# - family: Schyler
|
||||
# fonts:
|
||||
# - asset: fonts/Schyler-Regular.ttf
|
||||
# - asset: fonts/Schyler-Italic.ttf
|
||||
# style: italic
|
||||
# - family: Trajan Pro
|
||||
# fonts:
|
||||
# - asset: fonts/TrajanPro.ttf
|
||||
# - asset: fonts/TrajanPro_Bold.ttf
|
||||
# weight: 700
|
||||
#
|
||||
# For details regarding fonts in packages, see
|
||||
# https://flutter.dev/custom-fonts/#from-packages
|
@ -99,13 +99,6 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
flowy_log:
|
||||
dependency: transitive
|
||||
description:
|
||||
path: "../../flowy_log"
|
||||
relative: true
|
||||
source: path
|
||||
version: "0.0.1"
|
||||
flowy_sdk:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -187,6 +180,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.11"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.3"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -207,7 +207,7 @@ packages:
|
||||
name: platform
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.2"
|
||||
version: "3.1.0"
|
||||
process:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -275,7 +275,7 @@ packages:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.3"
|
||||
version: "0.4.8"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -296,7 +296,7 @@ packages:
|
||||
name: vm_service
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "7.3.0"
|
||||
version: "7.5.0"
|
||||
webdriver:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'dart:ffi';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
// ignore: unnecessary_import
|
||||
import 'package:flowy_sdk/protobuf/dart-ffi/ffi_response.pb.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-collaboration/document_info.pb.dart';
|
||||
|
@ -12,11 +12,21 @@ final DynamicLibrary _dl = _open();
|
||||
/// Reference to the Dynamic Library, it should be only used for low-level access
|
||||
final DynamicLibrary dl = _dl;
|
||||
DynamicLibrary _open() {
|
||||
if (Platform.isAndroid) return DynamicLibrary.open('libdart_ffi.so');
|
||||
if (Platform.isMacOS) return DynamicLibrary.executable();
|
||||
if (Platform.isIOS) return DynamicLibrary.executable();
|
||||
if (Platform.isWindows) return DynamicLibrary.open('dart_ffi.dll');
|
||||
if (Platform.isLinux) return DynamicLibrary.open('libdart_ffi.so');
|
||||
if (Platform.environment.containsKey('FLUTTER_TEST')) {
|
||||
final prefix = "${Directory.current.path}/.sandbox";
|
||||
if (Platform.isLinux) return DynamicLibrary.open('${prefix}/libdart_ffi.so');
|
||||
if (Platform.isAndroid) return DynamicLibrary.open('${prefix}/libdart_ffi.so');
|
||||
if (Platform.isMacOS) return DynamicLibrary.open('${prefix}/libdart_ffi.dylib');
|
||||
if (Platform.isIOS) return DynamicLibrary.open('${prefix}/libdart_ffi.dylib');
|
||||
if (Platform.isWindows) return DynamicLibrary.open('${prefix}/dart_ffi.dll');
|
||||
} else {
|
||||
if (Platform.isLinux) return DynamicLibrary.open('libdart_ffi.so');
|
||||
if (Platform.isAndroid) return DynamicLibrary.open('libdart_ffi.so');
|
||||
if (Platform.isMacOS) return DynamicLibrary.executable();
|
||||
if (Platform.isIOS) return DynamicLibrary.executable();
|
||||
if (Platform.isWindows) return DynamicLibrary.open('dart_ffi.dll');
|
||||
}
|
||||
|
||||
throw UnsupportedError('This platform is not supported.');
|
||||
}
|
||||
|
||||
|
@ -9,8 +9,7 @@ class Log {
|
||||
_logger = Logger(
|
||||
printer: PrettyPrinter(
|
||||
methodCount: 2, // number of method calls to be displayed
|
||||
errorMethodCount:
|
||||
8, // number of method calls if stacktrace is provided
|
||||
errorMethodCount: 8, // number of method calls if stacktrace is provided
|
||||
lineLength: 120, // width of the output
|
||||
colors: true, // Colorful log messages
|
||||
printEmojis: true, // Print an emoji for each log message
|
||||
@ -27,6 +26,10 @@ class Log {
|
||||
Log.shared._logger.d(msg);
|
||||
}
|
||||
|
||||
static void warn(dynamic msg) {
|
||||
Log.shared._logger.w(msg);
|
||||
}
|
||||
|
||||
static void trace(dynamic msg) {
|
||||
Log.shared._logger.d(msg);
|
||||
}
|
@ -2,7 +2,7 @@ import 'dart:isolate';
|
||||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
import 'dart:ffi';
|
||||
import 'package:flowy_log/flowy_log.dart';
|
||||
import 'package:flowy_sdk/log.dart';
|
||||
import 'protobuf/dart-notify/subject.pb.dart';
|
||||
|
||||
typedef ObserverCallback = void Function(SubscribeObject observable);
|
||||
|
@ -20,6 +20,6 @@ A new flutter plugin project.
|
||||
s.platform = :osx, '10.11'
|
||||
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
|
||||
s.swift_version = '5.0'
|
||||
s.static_framework = true
|
||||
s.vendored_libraries = "libdart_ffi.a"
|
||||
# s.static_framework = true
|
||||
s.vendored_libraries = "libdart_ffi.dylib"
|
||||
end
|
||||
|
@ -197,13 +197,6 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
flowy_log:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "../flowy_log"
|
||||
relative: true
|
||||
source: path
|
||||
version: "0.0.1"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
@ -292,7 +285,7 @@ packages:
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
logger:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: logger
|
||||
url: "https://pub.dartlang.org"
|
||||
@ -312,6 +305,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.11"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.3"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -442,7 +442,7 @@ packages:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.3"
|
||||
version: "0.4.8"
|
||||
timing:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -2,7 +2,7 @@ name: flowy_sdk
|
||||
description: A new flutter plugin project.
|
||||
version: 0.0.1
|
||||
homepage:
|
||||
publish_to: 'none'
|
||||
publish_to: "none"
|
||||
|
||||
environment:
|
||||
sdk: ">=2.12.0-0 <3.0.0"
|
||||
@ -14,16 +14,14 @@ dependencies:
|
||||
ffi: ^1.0.0
|
||||
isolates: ^3.0.3+8
|
||||
protobuf: "2.0.0"
|
||||
dartz: '0.10.0-nullsafety.2'
|
||||
dartz: "0.10.0-nullsafety.2"
|
||||
freezed_annotation: ^0.14.1
|
||||
flowy_log:
|
||||
path: ../flowy_log
|
||||
|
||||
|
||||
logger: ^1.0.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
build_runner: '1.12.2'
|
||||
build_runner: "1.12.2"
|
||||
flutter_lints: ^1.0.0
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
|
@ -43,6 +43,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "8.0.2"
|
||||
bloc_test:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: bloc_test
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "9.0.2"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -211,6 +218,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
coverage:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: coverage
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
cross_file:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -393,13 +407,6 @@ packages:
|
||||
relative: true
|
||||
source: path
|
||||
version: "0.0.1"
|
||||
flowy_log:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "packages/flowy_log"
|
||||
relative: true
|
||||
source: path
|
||||
version: "0.0.1"
|
||||
flowy_sdk:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -709,6 +716,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
mocktail:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: mocktail
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
nested:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -723,6 +737,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.2"
|
||||
node_preamble:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: node_preamble
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
package_config:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -989,6 +1010,20 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
shelf_packages_handler:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_packages_handler
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
shelf_static:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_static
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
shelf_web_socket:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1015,6 +1050,20 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.1"
|
||||
source_map_stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_map_stack_trace
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
source_maps:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_maps
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.10.10"
|
||||
source_span:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1078,6 +1127,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
test:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.19.5"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1085,6 +1141,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.8"
|
||||
test_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_core
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.9"
|
||||
textstyle_extensions:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1218,6 +1281,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.6"
|
||||
vm_service:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "7.5.0"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1232,6 +1302,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
webkit_inspection_protocol:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: webkit_inspection_protocol
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -37,8 +37,6 @@ dependencies:
|
||||
path: packages/flowy_infra_ui
|
||||
flowy_infra:
|
||||
path: packages/flowy_infra
|
||||
flowy_log:
|
||||
path: packages/flowy_log
|
||||
flutter_quill:
|
||||
git:
|
||||
url: https://github.com/appflowy/flutter-quill.git
|
||||
@ -82,6 +80,7 @@ dev_dependencies:
|
||||
sdk: flutter
|
||||
build_runner:
|
||||
freezed: "^0.14.2"
|
||||
bloc_test: ^9.0.2
|
||||
|
||||
# The "flutter_lints" package below contains a set of recommended lints to
|
||||
# encourage good coding practices. The lint set provided by the package is
|
||||
@ -105,7 +104,7 @@ flutter:
|
||||
fonts:
|
||||
- family: FlowyIconData
|
||||
fonts:
|
||||
- asset: fonts/FlowyIconData.ttf
|
||||
- asset: assets/fonts/FlowyIconData.ttf
|
||||
|
||||
# To add assets to your application, add an assets section, like this:
|
||||
assets:
|
||||
|
41
frontend/app_flowy/test/util/test_env.dart
Normal file
41
frontend/app_flowy/test/util/test_env.dart
Normal file
@ -0,0 +1,41 @@
|
||||
import 'package:app_flowy/startup/startup.dart';
|
||||
import 'package:app_flowy/user/infrastructure/repos/auth_repo.dart';
|
||||
import 'package:flowy_infra/uuid.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-user-data-model/protobuf.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
class FlowyTest {
|
||||
static Future<FlowyTest> setup() async {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
// await EasyLocalization.ensureInitialized();
|
||||
|
||||
await FlowyRunner.run(FlowyTestApp());
|
||||
return FlowyTest();
|
||||
}
|
||||
|
||||
Future<UserProfile> signIn() async {
|
||||
final authRepo = getIt<AuthRepository>();
|
||||
const password = "AppFlowy123@";
|
||||
final uid = uuid();
|
||||
final userEmail = "$uid@appflowy.io";
|
||||
final result = await authRepo.signUp(
|
||||
name: "FlowyTestUser",
|
||||
password: password,
|
||||
email: userEmail,
|
||||
);
|
||||
return result.fold(
|
||||
(user) => user,
|
||||
(error) {
|
||||
throw StateError("$error");
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class FlowyTestApp implements EntryPoint {
|
||||
@override
|
||||
Widget create() {
|
||||
return Container();
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
|
29
frontend/app_flowy/test/workspace_bloc_test.dart
Normal file
29
frontend/app_flowy/test/workspace_bloc_test.dart
Normal file
@ -0,0 +1,29 @@
|
||||
import 'package:app_flowy/startup/startup.dart';
|
||||
import 'package:app_flowy/workspace/application/workspace/welcome_bloc.dart';
|
||||
import 'package:flowy_sdk/protobuf/flowy-user-data-model/protobuf.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:bloc_test/bloc_test.dart';
|
||||
|
||||
import 'util/test_env.dart';
|
||||
|
||||
void main() {
|
||||
UserProfile? userInfo;
|
||||
setUpAll(() async {
|
||||
final flowyTest = await FlowyTest.setup();
|
||||
userInfo = await flowyTest.signIn();
|
||||
});
|
||||
|
||||
group('WelcomeBloc', () {
|
||||
blocTest<WelcomeBloc, WelcomeState>(
|
||||
"welcome screen init",
|
||||
build: () => getIt<WelcomeBloc>(param1: userInfo),
|
||||
act: (bloc) {
|
||||
bloc.add(const WelcomeEvent.initial());
|
||||
},
|
||||
wait: const Duration(seconds: 3),
|
||||
verify: (bloc) {
|
||||
assert(bloc.state.isLoading == false);
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
@ -38,7 +38,6 @@ pub struct FlowySDKConfig {
|
||||
impl fmt::Debug for FlowySDKConfig {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("FlowySDKConfig")
|
||||
.field("name", &self.name)
|
||||
.field("root", &self.root)
|
||||
.field("server_config", &self.server_config)
|
||||
.finish()
|
||||
|
@ -16,17 +16,17 @@ linux_alias = "flowy-sdk-dev-linux"
|
||||
[tasks.flowy-sdk-dev-macos]
|
||||
category = "Build"
|
||||
dependencies = ["env_check"]
|
||||
run_task = { name = ["setup-crate-type","sdk-build", "post-desktop", "restore-crate-type"] }
|
||||
run_task = { name = ["setup-crate-type","sdk-build", "post-desktop", "restore-crate-type", "copy-to-sys-tmpdir"] }
|
||||
|
||||
[tasks.flowy-sdk-dev-windows]
|
||||
category = "Build"
|
||||
dependencies = ["env_check"]
|
||||
run_task = { name = ["setup-crate-type","sdk-build", "post-desktop", "restore-crate-type"] }
|
||||
run_task = { name = ["setup-crate-type","sdk-build", "post-desktop", "restore-crate-type", "copy-to-sys-tmpdir"] }
|
||||
|
||||
[tasks.flowy-sdk-dev-linux]
|
||||
category = "Build"
|
||||
dependencies = ["env_check"]
|
||||
run_task = { name = ["setup-crate-type","sdk-build", "post-desktop", "restore-crate-type"] }
|
||||
run_task = { name = ["setup-crate-type","sdk-build", "post-desktop", "restore-crate-type", "copy-to-sys-tmpdir"] }
|
||||
|
||||
#
|
||||
[tasks.sdk-build]
|
||||
@ -82,27 +82,29 @@ private = true
|
||||
script = [
|
||||
"""
|
||||
echo "🚀 🚀 🚀 Flowy-SDK(macOS) build success"
|
||||
dart_ffi_dir= set ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/packages/flowy_sdk/${TARGET_OS}
|
||||
lib = set lib${LIB_NAME}.${SDK_EXT}
|
||||
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/lib${CARGO_MAKE_CRATE_FS_NAME}.${SDK_EXT} \
|
||||
${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/packages/flowy_sdk/${TARGET_OS}/lib${CARGO_MAKE_CRATE_FS_NAME}.${SDK_EXT}
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/${lib} \
|
||||
${dart_ffi_dir}/${lib}
|
||||
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/binding.h \
|
||||
${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/packages/flowy_sdk/${TARGET_OS}/Classes/binding.h
|
||||
${dart_ffi_dir}/Classes/binding.h
|
||||
""",
|
||||
]
|
||||
script_runner = "@duckscript"
|
||||
|
||||
|
||||
[tasks.post-desktop-windows]
|
||||
private = true
|
||||
script = [
|
||||
"""
|
||||
echo "🚀 🚀 🚀 Flowy-SDK(windows) build success"
|
||||
dart_ffi_dir= set ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/windows/flutter/dart_ffi
|
||||
lib = set ${LIB_NAME}.${SDK_EXT}
|
||||
|
||||
# copy dll
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/${CARGO_MAKE_CRATE_FS_NAME}.${SDK_EXT} \
|
||||
${dart_ffi_dir}/${CARGO_MAKE_CRATE_FS_NAME}.${SDK_EXT}
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/${lib} \
|
||||
${dart_ffi_dir}/${lib}
|
||||
|
||||
# copy binding.h
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/binding.h \
|
||||
@ -117,10 +119,11 @@ script = [
|
||||
"""
|
||||
echo "🚀 🚀 🚀 Flowy-SDK(linux) build success"
|
||||
dart_ffi_dir= set ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/linux/flutter/dart_ffi
|
||||
lib = set lib${LIB_NAME}.${SDK_EXT}
|
||||
|
||||
# copy dll
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/lib${CARGO_MAKE_CRATE_FS_NAME}.${SDK_EXT} \
|
||||
${dart_ffi_dir}/lib${CARGO_MAKE_CRATE_FS_NAME}.${SDK_EXT}
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/${lib} \
|
||||
${dart_ffi_dir}/${lib}
|
||||
|
||||
# copy binding.h
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/${CARGO_MAKE_CRATE_NAME}/binding.h \
|
||||
@ -129,29 +132,25 @@ script = [
|
||||
]
|
||||
script_runner = "@duckscript"
|
||||
|
||||
#
|
||||
[tasks.copy-to-sys-tmpdir]
|
||||
private = true
|
||||
condition = { profiles = [ "development-mac" ], platforms = ["mac"] }
|
||||
script = [
|
||||
"""
|
||||
# post the dylib target_path that use for flutter unit test
|
||||
target_path = set ${TMPDIR}/appflowy/lib${CARGO_MAKE_CRATE_FS_NAME}.${SDK_EXT}
|
||||
rm ${target_path}
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/lib${CARGO_MAKE_CRATE_FS_NAME}.${SDK_EXT} ${target_path}
|
||||
# Copy the flowy_sdk lib to system temp directory for flutter unit test.
|
||||
lib = set lib${LIB_NAME}.${SDK_EXT}
|
||||
dest = set ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/app_flowy/.sandbox/${lib}
|
||||
rm ${dest}
|
||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/target/${RUST_COMPILE_TARGET}/${BUILD_FLAG}/${lib} \
|
||||
${dest}
|
||||
""",
|
||||
]
|
||||
script_runner = "@duckscript"
|
||||
|
||||
[tasks.check_protoc_cmd]
|
||||
[tasks.copy-to-sys-tmpdir.windows]
|
||||
private = true
|
||||
script = [
|
||||
"""
|
||||
ret = which protoc
|
||||
if is_empty ${ret}
|
||||
echo Please make sure <protoc_installation_folder>/bin/ is in PATH env var
|
||||
echo See BUILD_ON_{LINUX|WINDOWS}.md for how to get protoc
|
||||
exit -1
|
||||
end
|
||||
# Doesn't work on windows
|
||||
""",
|
||||
]
|
||||
script_runner = "@duckscript"
|
||||
script_runner = "@duckscript"
|
@ -52,19 +52,6 @@ dart pub global activate protoc_plugin
|
||||
script_runner = "@shell"
|
||||
|
||||
|
||||
[tasks.check_protoc_cmd]
|
||||
script = [
|
||||
"""
|
||||
ret = which protoc
|
||||
if is_empty ${ret}
|
||||
echo Please make sure <protoc_installation_folder>/bin/ is in PATH env var
|
||||
echo See BUILD_ON_{LINUX|WINDOWS}.md for how to get protoc
|
||||
exit -1
|
||||
end
|
||||
""",
|
||||
]
|
||||
script_runner = "@duckscript"
|
||||
|
||||
[tasks.gen_pb_file]
|
||||
script = [
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user