From 690642ac9d6fb5c6bd82bbc67882e69a3ebb7ff9 Mon Sep 17 00:00:00 2001 From: mike doornenbal Date: Fri, 19 Apr 2024 09:52:01 +0200 Subject: [PATCH] feat: add default styling --- CHANGELOG.md | 5 + .../example/lib/main.dart | 24 ++-- packages/flutter_introduction/pubspec.yaml | 6 +- .../pubspec.yaml | 6 +- .../pubspec.yaml | 2 +- .../flutter_introduction_service/pubspec.yaml | 4 +- .../pubspec.yaml | 4 +- .../assets/first.png | Bin 0 -> 15136 bytes .../assets/second.png | Bin 0 -> 12554 bytes .../assets/third.png | Bin 0 -> 7891 bytes .../example/lib/main.dart | 34 +++--- .../config/default_introduction_pages.dart | 115 ++++++++++++++++++ .../lib/src/config/introduction.dart | 35 ++++-- .../lib/src/types/page_introduction.dart | 111 +++++++++++++---- .../lib/src/widgets/indicator.dart | 1 + .../flutter_introduction_widget/pubspec.yaml | 4 +- pubspec.yaml | 2 +- 17 files changed, 277 insertions(+), 76 deletions(-) create mode 100644 packages/flutter_introduction_widget/assets/first.png create mode 100644 packages/flutter_introduction_widget/assets/second.png create mode 100644 packages/flutter_introduction_widget/assets/third.png create mode 100644 packages/flutter_introduction_widget/lib/src/config/default_introduction_pages.dart diff --git a/CHANGELOG.md b/CHANGELOG.md index 97f796f..1edcec8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 3.0.0 + +* Update default styling +* Add default introduction + ## 2.1.0 * Upgrade dependencies diff --git a/packages/flutter_introduction/example/lib/main.dart b/packages/flutter_introduction/example/lib/main.dart index 8eef932..2edeb60 100644 --- a/packages/flutter_introduction/example/lib/main.dart +++ b/packages/flutter_introduction/example/lib/main.dart @@ -39,20 +39,20 @@ class _MyHomePageState extends State { body: Introduction( options: IntroductionOptions( pages: [ - IntroductionPage( - title: const Text('First page'), - text: const Text('Wow a page'), - graphic: const FlutterLogo(), + const IntroductionPage( + title: Text('First page'), + text: Text('Wow a page'), + graphic: FlutterLogo(), ), - IntroductionPage( - title: const Text('Second page'), - text: const Text('Another page'), - graphic: const FlutterLogo(), + const IntroductionPage( + title: Text('Second page'), + text: Text('Another page'), + graphic: FlutterLogo(), ), - IntroductionPage( - title: const Text('Third page'), - text: const Text('The final page of this app'), - graphic: const FlutterLogo(), + const IntroductionPage( + title: Text('Third page'), + text: Text('The final page of this app'), + graphic: FlutterLogo(), ), ], introductionTranslations: const IntroductionTranslations( diff --git a/packages/flutter_introduction/pubspec.yaml b/packages/flutter_introduction/pubspec.yaml index 7237226..b2a5053 100644 --- a/packages/flutter_introduction/pubspec.yaml +++ b/packages/flutter_introduction/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_introduction description: Combined Package of Flutter Introduction Widget and Flutter Introduction Service -version: 2.1.0 +version: 3.0.0 publish_to: none environment: @@ -13,12 +13,12 @@ dependencies: flutter_introduction_widget: git: url: https://github.com/Iconica-Development/flutter_introduction - ref: 2.1.0 + ref: 3.0.0 path: packages/flutter_introduction_widget flutter_introduction_service: git: url: https://github.com/Iconica-Development/flutter_introduction - ref: 2.1.0 + ref: 3.0.0 path: packages/flutter_introduction_service dev_dependencies: diff --git a/packages/flutter_introduction_firebase/pubspec.yaml b/packages/flutter_introduction_firebase/pubspec.yaml index cd4b126..e55dd08 100644 --- a/packages/flutter_introduction_firebase/pubspec.yaml +++ b/packages/flutter_introduction_firebase/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_introduction_firebase description: Flutter Introduction Page that uses firebase for the pages and some settings -version: 2.1.0 +version: 3.0.0 publish_to: none environment: @@ -15,12 +15,12 @@ dependencies: flutter_introduction_widget: git: url: https://github.com/Iconica-Development/flutter_introduction - ref: 2.1.0 + ref: 3.0.0 path: packages/flutter_introduction_widget flutter_introduction_service: git: url: https://github.com/Iconica-Development/flutter_introduction - ref: 2.1.0 + ref: 3.0.0 path: packages/flutter_introduction_service dev_dependencies: diff --git a/packages/flutter_introduction_interface/pubspec.yaml b/packages/flutter_introduction_interface/pubspec.yaml index 645fd0c..b331169 100644 --- a/packages/flutter_introduction_interface/pubspec.yaml +++ b/packages/flutter_introduction_interface/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_introduction_interface description: A new Flutter package project. -version: 2.1.0 +version: 3.0.0 publish_to: none environment: diff --git a/packages/flutter_introduction_service/pubspec.yaml b/packages/flutter_introduction_service/pubspec.yaml index 8376320..cfb2e99 100644 --- a/packages/flutter_introduction_service/pubspec.yaml +++ b/packages/flutter_introduction_service/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_introduction_service description: A new Flutter package project. -version: 2.1.0 +version: 3.0.0 publish_to: none environment: @@ -13,7 +13,7 @@ dependencies: flutter_introduction_interface: git: url: https://github.com/Iconica-Development/flutter_introduction - ref: 2.1.0 + ref: 3.0.0 path: packages/flutter_introduction_interface dev_dependencies: diff --git a/packages/flutter_introduction_shared_preferences/pubspec.yaml b/packages/flutter_introduction_shared_preferences/pubspec.yaml index 04741d2..229c931 100644 --- a/packages/flutter_introduction_shared_preferences/pubspec.yaml +++ b/packages/flutter_introduction_shared_preferences/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_introduction_shared_preferences description: A new Flutter package project. -version: 2.1.0 +version: 3.0.0 publish_to: none environment: @@ -13,7 +13,7 @@ dependencies: flutter_introduction_interface: git: url: https://github.com/Iconica-Development/flutter_introduction - ref: 2.1.0 + ref: 3.0.0 path: packages/flutter_introduction_interface shared_preferences: any diff --git a/packages/flutter_introduction_widget/assets/first.png b/packages/flutter_introduction_widget/assets/first.png new file mode 100644 index 0000000000000000000000000000000000000000..e2283e44daf6b3a57df9156c43e670125b21ee51 GIT binary patch literal 15136 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 ?0$LRrEk1}+ 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 literal 0 HcmV?d00001 diff --git a/packages/flutter_introduction_widget/assets/third.png b/packages/flutter_introduction_widget/assets/third.png new file mode 100644 index 0000000000000000000000000000000000000000..f67e47c3f85ba4507eb188996891a281ce2b74ba GIT binary patch literal 7891 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 literal 0 HcmV?d00001 diff --git a/packages/flutter_introduction_widget/example/lib/main.dart b/packages/flutter_introduction_widget/example/lib/main.dart index 035ce15..cc9cbb2 100644 --- a/packages/flutter_introduction_widget/example/lib/main.dart +++ b/packages/flutter_introduction_widget/example/lib/main.dart @@ -32,29 +32,29 @@ class MyApp extends StatelessWidget { home: IntroductionScreen( options: IntroductionOptions( pages: [ - IntroductionPage( - title: const Text('Basic Page'), - text: const Text( + const IntroductionPage( + title: Text('Basic Page'), + text: Text( 'A page with some text and a widget in the middle.', ), - graphic: const FlutterLogo(size: 100), + graphic: FlutterLogo(size: 100), ), - IntroductionPage( - title: const Text('Layout Shift'), - text: const Text( + const IntroductionPage( + title: Text('Layout Shift'), + text: Text( 'You can change the layout of a page to mix things up.', ), - graphic: const FlutterLogo(size: 100), + graphic: FlutterLogo(size: 100), layoutStyle: IntroductionLayoutStyle.imageTop, ), - IntroductionPage( - title: const Text( + const IntroductionPage( + title: Text( 'Decoration', style: TextStyle( color: Colors.white, ), ), - decoration: const BoxDecoration( + decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topRight, end: Alignment.bottomLeft, @@ -66,24 +66,24 @@ class MyApp extends StatelessWidget { ], ), ), - text: const Text( + text: Text( 'Add a Decoration to make a custom background, like a LinearGradient', style: TextStyle( color: Colors.white, ), ), - graphic: const FlutterLogo( + graphic: FlutterLogo( size: 100, ), ), - IntroductionPage( - title: const Text( + const IntroductionPage( + title: Text( 'Background Image', ), - text: const Text( + text: Text( 'Add a Decoration with a DecorationImage, to add an background image', ), - decoration: const BoxDecoration( + decoration: BoxDecoration( image: DecorationImage( fit: BoxFit.cover, image: AssetImage( diff --git a/packages/flutter_introduction_widget/lib/src/config/default_introduction_pages.dart b/packages/flutter_introduction_widget/lib/src/config/default_introduction_pages.dart new file mode 100644 index 0000000..e5c38aa --- /dev/null +++ b/packages/flutter_introduction_widget/lib/src/config/default_introduction_pages.dart @@ -0,0 +1,115 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_introduction_widget/flutter_introduction_widget.dart'; + +const List defaultIntroductionPages = [ + IntroductionPage( + decoration: BoxDecoration( + color: Color(0xffFAF9F6), + ), + title: Column( + children: [ + SizedBox(height: 100), + Text( + 'welcome to iconinstagram', + style: TextStyle( + color: Color(0xff71C6D1), + fontSize: 24, + fontWeight: FontWeight.w700, + ), + ), + SizedBox(height: 6), + Text( + 'Welcome to the world of Instagram, where creativity' + ' knows no bounds and connections are made' + ' through captivating visuals.', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w400, + ), + textAlign: TextAlign.center, + ), + ], + ), + graphic: Image( + image: AssetImage( + 'assets/first.png', + package: 'flutter_introduction_widget', + ), + ), + text: Text(''), + ), + IntroductionPage( + decoration: BoxDecoration( + color: Color(0xffFAF9F6), + ), + title: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox(height: 100), + Text( + 'discover iconinstagram', + style: TextStyle( + color: Color(0xff71C6D1), + fontSize: 24, + fontWeight: FontWeight.w700, + ), + ), + SizedBox(height: 6), + Text( + 'Dive into the vibrant world of' + ' Instagram and discover endless possibilities.' + ' From stunning photography to engaging videos,' + ' Instagram offers a diverse range of content to explore and enjoy.', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w400, + ), + textAlign: TextAlign.center, + ), + ], + ), + graphic: Image( + image: AssetImage( + 'assets/second.png', + package: 'flutter_introduction_widget', + ), + ), + text: Text(''), + ), + IntroductionPage( + decoration: BoxDecoration( + color: Color(0xffFAF9F6), + ), + title: Column( + children: [ + SizedBox(height: 100), + Text( + 'elevate your experience', + style: TextStyle( + color: Color(0xff71C6D1), + fontSize: 24, + fontWeight: FontWeight.w700, + ), + ), + SizedBox(height: 6), + Text( + 'Whether promoting your business, or connecting' + ' with friends and family, Instagram provides the' + ' tools and platform to make your voice heard.', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w400, + ), + textAlign: TextAlign.center, + ), + ], + ), + graphic: Image( + image: AssetImage( + 'assets/third.png', + package: 'flutter_introduction_widget', + ), + ), + text: Text(''), + ), +]; diff --git a/packages/flutter_introduction_widget/lib/src/config/introduction.dart b/packages/flutter_introduction_widget/lib/src/config/introduction.dart index e46bbb8..37f19f4 100644 --- a/packages/flutter_introduction_widget/lib/src/config/introduction.dart +++ b/packages/flutter_introduction_widget/lib/src/config/introduction.dart @@ -3,6 +3,7 @@ // SPDX-License-Identifier: BSD-3-Clause import 'package:flutter/material.dart'; +import 'package:flutter_introduction_widget/src/config/default_introduction_pages.dart'; enum IntroductionScreenMode { showNever, showAlways, showOnce } @@ -42,7 +43,7 @@ class IntroductionPage { /// /// The [background] is fully optional and if not provided will show the /// [ThemeData.colorScheme.background] as default. - IntroductionPage({ + const IntroductionPage({ this.title, this.text, this.graphic, @@ -60,11 +61,11 @@ class IntroductionOptions { const IntroductionOptions({ this.introductionTranslations = const IntroductionTranslations(), this.introductionButtonTextstyles = const IntroductionButtonTextstyles(), - this.indicatorMode = IndicatorMode.dash, + this.indicatorMode = IndicatorMode.dot, this.indicatorBuilder, this.layoutStyle = IntroductionLayoutStyle.imageCenter, - this.pages = const [], - this.buttonMode = IntroductionScreenButtonMode.disabled, + this.pages = defaultIntroductionPages, + this.buttonMode = IntroductionScreenButtonMode.text, this.tapEnabled = false, this.mode = IntroductionScreenMode.showNever, this.textAlign = TextAlign.center, @@ -248,9 +249,9 @@ class IntroductionOptions { class IntroductionTranslations { const IntroductionTranslations({ this.skipButton = 'skip', - this.nextButton = 'next', - this.previousButton = 'previous', - this.finishButton = 'finish', + this.nextButton = 'Next', + this.previousButton = 'Previous', + this.finishButton = 'Get Started', }); final String skipButton; final String nextButton; @@ -260,10 +261,22 @@ class IntroductionTranslations { class IntroductionButtonTextstyles { const IntroductionButtonTextstyles({ - this.skipButtonStyle, - this.nextButtonStyle, - this.previousButtonStyle, - this.finishButtonStyle, + this.skipButtonStyle = const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + ), + this.nextButtonStyle = const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + ), + this.previousButtonStyle = const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + ), + this.finishButtonStyle = const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + ), }); final TextStyle? skipButtonStyle; final TextStyle? nextButtonStyle; diff --git a/packages/flutter_introduction_widget/lib/src/types/page_introduction.dart b/packages/flutter_introduction_widget/lib/src/types/page_introduction.dart index e7d89d0..18cf936 100644 --- a/packages/flutter_introduction_widget/lib/src/types/page_introduction.dart +++ b/packages/flutter_introduction_widget/lib/src/types/page_introduction.dart @@ -351,12 +351,28 @@ class IntroductionTwoButtons extends StatelessWidget { ), IntroductionButtonType.previous, ) ?? - TextButton( - onPressed: _previous, - child: Text( - translations.previousButton, - style: options - .introductionButtonTextstyles.previousButtonStyle, + InkWell( + onTap: _previous, + child: Container( + width: 180, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + border: Border.all( + color: const Color( + 0xff979797, + ), + ), + ), + child: Center( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 2.0), + child: Text( + translations.previousButton, + style: options + .introductionButtonTextstyles.previousButtonStyle, + ), + ), + ), ), ), ] else @@ -371,11 +387,28 @@ class IntroductionTwoButtons extends StatelessWidget { ), IntroductionButtonType.next, ) ?? - TextButton( - onPressed: _next, - child: Text( - translations.nextButton, - style: options.introductionButtonTextstyles.nextButtonStyle, + InkWell( + onTap: _next, + child: Container( + width: 180, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + border: Border.all( + color: const Color( + 0xff979797, + ), + ), + ), + child: Center( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 2.0), + child: Text( + translations.nextButton, + style: options + .introductionButtonTextstyles.nextButtonStyle, + ), + ), + ), ), ), ] else if (last) ...[ @@ -391,14 +424,30 @@ class IntroductionTwoButtons extends StatelessWidget { ), IntroductionButtonType.finish, ) ?? - TextButton( - onPressed: () { + InkWell( + onTap: () { onFinish?.call(); }, - child: Text( - translations.finishButton, - style: - options.introductionButtonTextstyles.finishButtonStyle, + child: Container( + width: 180, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + border: Border.all( + color: const Color( + 0xff979797, + ), + ), + ), + child: Center( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 2.0), + child: Text( + translations.finishButton, + style: options + .introductionButtonTextstyles.finishButtonStyle, + ), + ), + ), ), ), ] else ...[ @@ -426,14 +475,30 @@ class IntroductionTwoButtons extends StatelessWidget { ), IntroductionButtonType.finish, ) ?? - ElevatedButton( - onPressed: () { + InkWell( + onTap: () { onFinish?.call(); }, - child: Text( - translations.finishButton, - style: options - .introductionButtonTextstyles.finishButtonStyle, + child: Container( + width: 180, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + border: Border.all( + color: const Color( + 0xff979797, + ), + ), + ), + child: Center( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 2.0), + child: Text( + translations.finishButton, + style: options.introductionButtonTextstyles + .finishButtonStyle, + ), + ), + ), ), ), ), diff --git a/packages/flutter_introduction_widget/lib/src/widgets/indicator.dart b/packages/flutter_introduction_widget/lib/src/widgets/indicator.dart index 53bcf08..e967315 100644 --- a/packages/flutter_introduction_widget/lib/src/widgets/indicator.dart +++ b/packages/flutter_introduction_widget/lib/src/widgets/indicator.dart @@ -63,6 +63,7 @@ class Indicator extends StatelessWidget { ); case IndicatorMode.dash: return DashIndicator( + color: theme.colorScheme.primary, controller: controller, selectedColor: theme.colorScheme.primary, itemCount: count, diff --git a/packages/flutter_introduction_widget/pubspec.yaml b/packages/flutter_introduction_widget/pubspec.yaml index a1e18e3..41315ca 100644 --- a/packages/flutter_introduction_widget/pubspec.yaml +++ b/packages/flutter_introduction_widget/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_introduction_widget description: Flutter Introduction Widget for showing a list of introduction pages on a single scrollable page or horizontal pageview -version: 2.1.0 +version: 3.0.0 homepage: https://github.com/Iconica-Development/flutter_introduction_widget environment: @@ -20,3 +20,5 @@ dev_dependencies: ref: 6.0.0 flutter: + assets: + - assets/ diff --git a/pubspec.yaml b/pubspec.yaml index 85a26ab..b691982 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: flutter_introduction_workspace -version: 2.1.0 +version: 3.0.0 environment: sdk: '>=3.1.0 <4.0.0'