Compare commits

..

7 commits

Author SHA1 Message Date
Kiril Tijsma
87bf58e6e7
Merge pull request #40 from Iconica-Development/fix/splashscreen-future
fix: always call the splashHandler with the splashScreenFuture and killswitchService when a splashScreenBuilder is provided
2025-04-30 10:01:30 +02:00
Freek van de Ven
ada23abbc5 fix: always call the splashHandler with the splashScreenFuture and killswitchService when a splashScreenBuilder is provided 2025-04-30 09:50:45 +02:00
Jacques
2c61f8d7db fix: Check with the service if the introduction should be shown before actually showing
When removing this, the introduction is briefly shown before calling the onComplete
2025-04-29 15:16:35 +02:00
Freek van de Ven
2a66e11611 chore: add component release workflow 2025-04-22 10:34:27 +02:00
0976083a9f feat(navigator): add navigator widget to allow for app independent navigation 2025-03-17 15:46:44 +01:00
6f24e0521d chore(example): add standard flutter readme 2025-03-17 15:46:44 +01:00
328a75b5a2 chore(example): add web platform to gitignore 2025-03-17 15:46:44 +01:00
7 changed files with 93 additions and 28 deletions

14
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,14 @@
name: Iconica Standard Component Release Workflow
# Workflow Caller version: 1.0.0
on:
release:
types: [published]
workflow_dispatch:
jobs:
call-global-iconica-workflow:
uses: Iconica-Development/.github/.github/workflows/component-release.yml@master
secrets: inherit
permissions: write-all

View file

@ -1,6 +1,14 @@
## 4.2.1 ## 4.2.4
- Fixed the userstory to always call the splashScreenFuture and killswitchservice logic when a custom splashScreenBuilder is provided
* Updated flutter_introduction to 5.0.0 ## 4.2.3
- Added check if introduction should be shown according to the service before showing the introduction at all
## 4.2.2
- Added custom navigator in the root of the navigator user-story
## 4.2.1
- Updated flutter_introduction to 5.0.0
## 4.1.0 ## 4.1.0
- Updated README - Updated README

3
example/.gitignore vendored
View file

@ -31,6 +31,9 @@ migrate_working_dir/
.pub/ .pub/
/build/ /build/
# platforms
/web
# Symbolication related # Symbolication related
app.*.symbols app.*.symbols

16
example/README.md Normal file
View file

@ -0,0 +1,16 @@
# example
A new Flutter project.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
For help getting started with Flutter development, view the
[online documentation](https://docs.flutter.dev/), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

View file

@ -19,13 +19,11 @@ class NavigatorStartUserStory extends StatelessWidget {
final void Function(BuildContext context) onComplete; final void Function(BuildContext context) onComplete;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) => Navigator(
if (!configuration.showSplashScreen) { onGenerateInitialRoutes: (_, __) => [
return _introduction(configuration, context, onComplete); _getInitialRoute(configuration, onComplete),
} ],
);
return _splashScreen(configuration, context, onComplete);
}
} }
/// Enter the start user story with the Navigator 1.0 API. /// Enter the start user story with the Navigator 1.0 API.
@ -42,6 +40,15 @@ Future<void> startNavigatorUserStory(
StartUserStoryConfiguration configuration, { StartUserStoryConfiguration configuration, {
required void Function(BuildContext context) onComplete, required void Function(BuildContext context) onComplete,
}) async { }) async {
var initialRoute = _getInitialRoute(configuration, onComplete);
await Navigator.of(context).push(initialRoute);
}
MaterialPageRoute<dynamic> _getInitialRoute(
StartUserStoryConfiguration configuration,
void Function(BuildContext context) onComplete,
) {
var initialRoute = MaterialPageRoute( var initialRoute = MaterialPageRoute(
builder: (context) => _splashScreen( builder: (context) => _splashScreen(
configuration, configuration,
@ -59,8 +66,7 @@ Future<void> startNavigatorUserStory(
), ),
); );
} }
return initialRoute;
await Navigator.of(context).push(initialRoute);
} }
Widget _splashScreen( Widget _splashScreen(
@ -98,12 +104,16 @@ Widget _splashScreen(
if (configuration.useKillswitch && isAllowedToPassThrough) return; if (configuration.useKillswitch && isAllowedToPassThrough) return;
if ((!configuration.showIntroduction) && context.mounted) { var introService = configuration.introductionService ??
onComplete(context); IntroductionService(SharedPreferencesIntroductionDataProvider());
return;
} var shouldShowIntroduction =
configuration.showIntroduction && await introService.shouldShow();
if (!context.mounted) return;
if (!shouldShowIntroduction) return onComplete(context);
if (context.mounted) {
await navigator.pushReplacement( await navigator.pushReplacement(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => _introduction( builder: (context) => _introduction(
@ -114,12 +124,12 @@ Widget _splashScreen(
), ),
); );
} }
}
unawaited(splashHandler());
var builder = configuration.splashScreenBuilder; var builder = configuration.splashScreenBuilder;
if (builder == null) { if (builder == null) {
unawaited(splashHandler());
return Scaffold( return Scaffold(
backgroundColor: configuration.splashScreenBackgroundColor, backgroundColor: configuration.splashScreenBackgroundColor,
body: Center( body: Center(

View file

@ -1,6 +1,6 @@
name: flutter_start name: flutter_start
description: "Flutter_start is a package that allows you to jumpstart your application with a splashScreen, introduction and a home." description: "Flutter_start is a package that allows you to jumpstart your application with a splashScreen, introduction and a home."
version: 4.2.1 version: 4.2.4
publish_to: https://forgejo.internal.iconica.nl/api/packages/internal/pub publish_to: https://forgejo.internal.iconica.nl/api/packages/internal/pub
@ -16,7 +16,7 @@ dependencies:
package_info_plus: ">=8.0.0 <9.0.0" package_info_plus: ">=8.0.0 <9.0.0"
flutter_introduction: flutter_introduction:
hosted: https://forgejo.internal.iconica.nl/api/packages/internal/pub hosted: https://forgejo.internal.iconica.nl/api/packages/internal/pub
version: "^5.0.0" version: ^5.0.0
flutter_introduction_shared_preferences: flutter_introduction_shared_preferences:
hosted: https://forgejo.internal.iconica.nl/api/packages/internal/pub/ hosted: https://forgejo.internal.iconica.nl/api/packages/internal/pub/
version: ^5.0.0 version: ^5.0.0

14
test/_test.dart Normal file
View file

@ -0,0 +1,14 @@
// This is an example unit test.
//
// A unit test tests a single function, method, or class. To learn more about
// writing unit tests, visit
// https://flutter.dev/docs/cookbook/testing/unit/introduction
import 'package:flutter_test/flutter_test.dart';
void main() {
group('Plus Operator', () {
test('should add two numbers together', () {
expect(1 + 1, 2);
});
});
}