Compare commits

..

2 Commits

8 changed files with 88 additions and 49 deletions

25
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,25 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "markettakers-flutter",
"request": "launch",
"type": "dart"
},
{
"name": "markettakers-flutter (profile mode)",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
},
{
"name": "markettakers-flutter (release mode)",
"request": "launch",
"type": "dart",
"flutterMode": "release"
}
]
}

View File

@@ -1,7 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:markettakers/markettakers.dart'; import 'package:mtcore/markettakers.dart';
class SimpleStage extends StageFactory { class SimpleStage extends StageFactory {
@override @override

View File

@@ -2,9 +2,14 @@ import 'package:flutter/material.dart';
import 'package:rive_native/rive_native.dart'; import 'package:rive_native/rive_native.dart';
import 'package:talker_flutter/talker_flutter.dart'; import 'package:talker_flutter/talker_flutter.dart';
export 'package:markettakers/src/bootstrapper.dart' export 'package:mtcore/src/bootstrapper.dart'
show Bootstrapper, StageFactory, StageController; show Bootstrapper, StageFactory, StageController;
export 'package:mtcore/src/about_screen.dart' show AboutScreen;
export 'package:mtcore/src/loader.dart'
show Loader, LoaderFlavour, LoaderController;
export 'package:mtcore/src/credits.dart' show Credits;
final talker = Talker(); final talker = Talker();
final ThemeData commonTheme = ThemeData( final ThemeData commonTheme = ThemeData(

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:markettakers/markettakers.dart'; import 'package:mtcore/markettakers.dart';
import 'package:markettakers/src/loaders/loader.dart'; import 'package:mtcore/src/credits.dart';
import 'package:mtcore/src/loader.dart';
import 'package:talker_flutter/talker_flutter.dart'; import 'package:talker_flutter/talker_flutter.dart';
class AboutScreen extends StatelessWidget { class AboutScreen extends StatelessWidget {
@@ -54,41 +55,23 @@ class Footer extends StatelessWidget {
final List<Widget> children; final List<Widget> children;
@override
Widget build(BuildContext context) {
return FractionallySizedBox(
widthFactor: 0.5,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
OutlinedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => TalkerScreen(talker: talker),
),
);
},
child: const Text("View Logs"),
),
...children,
],
),
);
}
}
class Credits extends StatelessWidget {
const Credits({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
const Text("Made with "), OutlinedButton(
const Icon(Icons.favorite, color: Colors.red), onPressed: () {
const Text(" by Skipper, Clewerwild and karabyn2187"), Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => TalkerScreen(talker: talker),
),
);
},
child: const Text("View Logs"),
),
...children,
], ],
); );
} }

View File

@@ -4,8 +4,8 @@ import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:markettakers/markettakers.dart'; import 'package:mtcore/markettakers.dart';
import 'package:markettakers/src/loaders/loader.dart'; import 'package:mtcore/src/loader.dart';
import 'package:percent_indicator/circular_percent_indicator.dart'; import 'package:percent_indicator/circular_percent_indicator.dart';
part 'bootstrapper.freezed.dart'; part 'bootstrapper.freezed.dart';
@@ -75,8 +75,14 @@ class _BootstrapController extends Bloc<_BootstrapEvent, BootstrapState> {
_BootstrapController(super.initialState, this.completer) { _BootstrapController(super.initialState, this.completer) {
assert(state.stages.isNotEmpty, "Stages list cannot be empty"); assert(state.stages.isNotEmpty, "Stages list cannot be empty");
on<StartEvent>((event, emit) { on<StartEvent>((event, emit) async {
talker.info("BootstrapController: Starting bootstrap process"); talker.info("BootstrapController: Starting bootstrap process");
if (await state.currentStage.isAlreadyCompleted) {
add(const _BootstrapEvent.stageCompleted());
return;
}
final controller = launchCurrentStage( final controller = launchCurrentStage(
state.stages, state.stages,
state.currentStageIndex, state.currentStageIndex,
@@ -94,21 +100,24 @@ class _BootstrapController extends Bloc<_BootstrapEvent, BootstrapState> {
if (newState.areStagesCompleted) { if (newState.areStagesCompleted) {
talker.info("BootstrapController: All stages completed"); talker.info("BootstrapController: All stages completed");
completer.complete(); completer.complete();
return;
}
// skip already completed stages // skip already completed stages
} else if (await newState.currentStage.isAlreadyCompleted) { if (await newState.currentStage.isAlreadyCompleted) {
talker.info( talker.info(
"BootstrapController: Stage ${newState.currentStage.title} already completed, skipping", "BootstrapController: Stage ${newState.currentStage.title} already completed, skipping",
); );
add(const _BootstrapEvent.stageCompleted());
// move to next stage
} else {
final nextStage = newState.currentStage;
talker.info("BootstrapController: Starting stage ${nextStage.title}");
launchCurrentStage(state.stages, nextIndex);
emit(newState); emit(newState);
add(const _BootstrapEvent.stageCompleted());
return;
} }
// move to next stage
final nextStage = newState.currentStage;
talker.info("BootstrapController: Starting stage ${nextStage.title}");
launchCurrentStage(state.stages, nextIndex);
emit(newState);
}); });
} }

17
lib/src/credits.dart Normal file
View File

@@ -0,0 +1,17 @@
import 'package:flutter/material.dart';
class Credits extends StatelessWidget {
const Credits({super.key});
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text("Made with "),
const Icon(Icons.favorite, color: Colors.red),
const Text(" by Skipper, Clewerwild and karabyn2187"),
],
);
}
}

View File

@@ -41,7 +41,7 @@ class Loader extends HookWidget {
final animFile = useMemoized( final animFile = useMemoized(
() => () =>
FileLoader.fromAsset("packages/markettakers/${flavour.filepath}", riveFactory: Factory.flutter), FileLoader.fromAsset("packages/mtcore/${flavour.filepath}", riveFactory: Factory.flutter),
); );
return RiveWidgetBuilder( return RiveWidgetBuilder(

View File

@@ -1,5 +1,5 @@
name: markettakers name: mtcore
description: "MarketTakers library" description: "MarketTakers shared/core library"
version: 1.0.2 version: 1.0.2
publish_to: https://gitea.tailc58da6.ts.net/api/packages/MarketTakers/pub/ publish_to: https://gitea.tailc58da6.ts.net/api/packages/MarketTakers/pub/
repository: https://gitea.tailc58da6.ts.net/MarketTakers/markettakers-flutter repository: https://gitea.tailc58da6.ts.net/MarketTakers/markettakers-flutter