From f766c599efca70e78059f667a4b7983a0db3f29d Mon Sep 17 00:00:00 2001 From: Jorian van der Kolk Date: Tue, 14 Mar 2023 11:16:13 +0100 Subject: [PATCH] less default padding more decoration options --- .flutter-plugins | 2 - .flutter-plugins-dependencies | 1 - .gitignore | 3 + CHANGELOG.md | 3 + README.md | 11 ++- example/.gitignore | 2 +- example/README.md | 16 ---- example/ios/Flutter/Debug.xcconfig | 1 + example/ios/Flutter/Release.xcconfig | 1 + example/ios/Podfile | 41 +++++++++ example/lib/main.dart | 9 +- .../flutter/generated_plugin_registrant.cc | 4 + example/linux/flutter/generated_plugins.cmake | 1 + example/macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 2 + example/macos/Podfile | 40 +++++++++ example/pubspec.lock | 2 +- .../flutter/generated_plugin_registrant.cc | 3 + .../windows/flutter/generated_plugins.cmake | 1 + lib/src/config/login_options.dart | 28 +++--- lib/src/widgets/email_password_login.dart | 13 +-- lib/src/widgets/forgot_password_form.dart | 85 +++++++------------ pubspec.yaml | 2 +- 24 files changed, 165 insertions(+), 108 deletions(-) delete mode 100644 .flutter-plugins delete mode 100644 .flutter-plugins-dependencies delete mode 100644 example/README.md create mode 100644 example/ios/Podfile create mode 100644 example/macos/Podfile diff --git a/.flutter-plugins b/.flutter-plugins deleted file mode 100644 index 4c76c7f..0000000 --- a/.flutter-plugins +++ /dev/null @@ -1,2 +0,0 @@ -# This is a generated file; do not edit or check into version control. -smart_auth=C:\\Users\\miked\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\smart_auth-1.0.8\\ diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies deleted file mode 100644 index f286554..0000000 --- a/.flutter-plugins-dependencies +++ /dev/null @@ -1 +0,0 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"smart_auth","path":"C:\\\\Users\\\\miked\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\smart_auth-1.0.8\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"smart_auth","path":"C:\\\\Users\\\\miked\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\smart_auth-1.0.8\\\\","native_build":true,"dependencies":[]}],"macos":[{"name":"smart_auth","path":"C:\\\\Users\\\\miked\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\smart_auth-1.0.8\\\\","native_build":true,"dependencies":[]}],"linux":[{"name":"smart_auth","path":"C:\\\\Users\\\\miked\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\smart_auth-1.0.8\\\\","native_build":true,"dependencies":[]}],"windows":[{"name":"smart_auth","path":"C:\\\\Users\\\\miked\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\smart_auth-1.0.8\\\\","native_build":true,"dependencies":[]}],"web":[{"name":"smart_auth","path":"C:\\\\Users\\\\miked\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\smart_auth-1.0.8\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"smart_auth","dependencies":[]}],"date_created":"2023-03-07 10:10:48.544860","version":"3.7.3"} \ No newline at end of file diff --git a/.gitignore b/.gitignore index d920ae6..f0c078a 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,6 @@ migrate_working_dir/ .dart_tool/ .packages build/ + +.flutter-plugins-dependencies +.flutter-plugins diff --git a/CHANGELOG.md b/CHANGELOG.md index 69418e1..a256ec7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 4.0.0 +* More decoration options less default padding + ## 3.1.2 * Added textStyle option for email and password fields diff --git a/README.md b/README.md index 0bf7d56..db33954 100644 --- a/README.md +++ b/README.md @@ -7,17 +7,20 @@ A package facilitating the basic ingredients for creating functional yet customi ## Setup -To use this package, add `flutter_login_widget` as a dependency in your pubspec.yaml file. +To use this package, add `flutter_login` as a dependency in your pubspec.yaml file. ## How to use ```dart final loginOptions = LoginOptions( - decoration: const InputDecoration( + emailDecoration: const InputDecoration( + prefixIcon: Icon(Icons.email), + border: OutlineInputBorder(), + ), + passwordDecoration: const InputDecoration( + prefixIcon: Icon(Icons.password), border: OutlineInputBorder(), ), - emailInputPrefix: const Icon(Icons.email), - passwordInputPrefix: const Icon(Icons.password), title: const Text('Login'), image: const FlutterLogo(), requestForgotPasswordButtonBuilder: (context, onPressed, isDisabled) { diff --git a/example/.gitignore b/example/.gitignore index 24476c5..4314849 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -41,4 +41,4 @@ app.*.map.json # Android Studio will place build artifacts here /android/app/debug /android/app/profile -/android/app/release +/android/app/release \ No newline at end of file diff --git a/example/README.md b/example/README.md deleted file mode 100644 index 2b3fce4..0000000 --- a/example/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# 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. diff --git a/example/ios/Flutter/Debug.xcconfig b/example/ios/Flutter/Debug.xcconfig index 592ceee..ec97fc6 100644 --- a/example/ios/Flutter/Debug.xcconfig +++ b/example/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/example/ios/Flutter/Release.xcconfig b/example/ios/Flutter/Release.xcconfig index 592ceee..c4855bf 100644 --- a/example/ios/Flutter/Release.xcconfig +++ b/example/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/example/ios/Podfile b/example/ios/Podfile new file mode 100644 index 0000000..88359b2 --- /dev/null +++ b/example/ios/Podfile @@ -0,0 +1,41 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/example/lib/main.dart b/example/lib/main.dart index 84cfa9f..028761c 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -4,11 +4,14 @@ import 'package:flutter/material.dart'; import 'package:flutter_login/flutter_login.dart'; final loginOptions = LoginOptions( - decoration: const InputDecoration( + emailDecoration: const InputDecoration( + prefixIcon: Icon(Icons.email), + border: OutlineInputBorder(), + ), + passwordDecoration: const InputDecoration( + prefixIcon: Icon(Icons.password), border: OutlineInputBorder(), ), - emailInputPrefix: const Icon(Icons.email), - passwordInputPrefix: const Icon(Icons.password), title: const Text('Login Demo'), image: const FlutterLogo( size: 200, diff --git a/example/linux/flutter/generated_plugin_registrant.cc b/example/linux/flutter/generated_plugin_registrant.cc index e71a16d..13ceb2a 100644 --- a/example/linux/flutter/generated_plugin_registrant.cc +++ b/example/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) smart_auth_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "SmartAuthPlugin"); + smart_auth_plugin_register_with_registrar(smart_auth_registrar); } diff --git a/example/linux/flutter/generated_plugins.cmake b/example/linux/flutter/generated_plugins.cmake index 2e1de87..9cadb0a 100644 --- a/example/linux/flutter/generated_plugins.cmake +++ b/example/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + smart_auth ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/example/macos/Flutter/Flutter-Debug.xcconfig b/example/macos/Flutter/Flutter-Debug.xcconfig index c2efd0b..4b81f9b 100644 --- a/example/macos/Flutter/Flutter-Debug.xcconfig +++ b/example/macos/Flutter/Flutter-Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/macos/Flutter/Flutter-Release.xcconfig b/example/macos/Flutter/Flutter-Release.xcconfig index c2efd0b..5caa9d1 100644 --- a/example/macos/Flutter/Flutter-Release.xcconfig +++ b/example/macos/Flutter/Flutter-Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/example/macos/Flutter/GeneratedPluginRegistrant.swift b/example/macos/Flutter/GeneratedPluginRegistrant.swift index cccf817..7360865 100644 --- a/example/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,8 @@ import FlutterMacOS import Foundation +import smart_auth func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + SmartAuthPlugin.register(with: registry.registrar(forPlugin: "SmartAuthPlugin")) } diff --git a/example/macos/Podfile b/example/macos/Podfile new file mode 100644 index 0000000..049abe2 --- /dev/null +++ b/example/macos/Podfile @@ -0,0 +1,40 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/example/pubspec.lock b/example/pubspec.lock index 178f5ce..295d83d 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -68,7 +68,7 @@ packages: path: ".." relative: true source: path - version: "3.1.2" + version: "4.0.0" flutter_test: dependency: "direct dev" description: flutter diff --git a/example/windows/flutter/generated_plugin_registrant.cc b/example/windows/flutter/generated_plugin_registrant.cc index 8b6d468..1e90c87 100644 --- a/example/windows/flutter/generated_plugin_registrant.cc +++ b/example/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + SmartAuthPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("SmartAuthPlugin")); } diff --git a/example/windows/flutter/generated_plugins.cmake b/example/windows/flutter/generated_plugins.cmake index b93c4c3..ffb020c 100644 --- a/example/windows/flutter/generated_plugins.cmake +++ b/example/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + smart_auth ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/lib/src/config/login_options.dart b/lib/src/config/login_options.dart index 142d991..3586c1d 100644 --- a/lib/src/config/login_options.dart +++ b/lib/src/config/login_options.dart @@ -9,13 +9,10 @@ class LoginOptions { this.image, this.title, this.subtitle, - this.emailLabel, - this.passwordLabel, - this.emailInputPrefix, - this.passwordInputPrefix, this.emailTextStyle, this.passwordTextStyle, - this.decoration = const InputDecoration(), + this.emailDecoration = const InputDecoration(), + this.passwordDecoration = const InputDecoration(), this.initialEmail = '', this.initialPassword = '', this.translations = const LoginTranslations(), @@ -27,8 +24,6 @@ class LoginOptions { this.registrationButtonBuilder = _createRegisterButton, this.emailInputContainerBuilder = _createEmailInputContainer, this.passwordInputContainerBuilder = _createPasswordInputContainer, - this.emailHintText, - this.passwordHintText, }); final ButtonBuilder loginButtonBuilder; @@ -41,15 +36,10 @@ class LoginOptions { final Widget? image; final Widget? title; final Widget? subtitle; - final Widget? emailLabel; - final Widget? passwordLabel; - final Widget? emailInputPrefix; - final Widget? passwordInputPrefix; - final InputDecoration decoration; + final InputDecoration emailDecoration; + final InputDecoration passwordDecoration; final String initialEmail; final String initialPassword; - final String? emailHintText; - final String? passwordHintText; final TextStyle? emailTextStyle; final TextStyle? passwordTextStyle; final LoginTranslations translations; @@ -79,9 +69,15 @@ class LoginTranslations { final String registrationButton; } -Widget _createEmailInputContainer(Widget child) => child; +Widget _createEmailInputContainer(Widget child) => Padding( + padding: const EdgeInsets.only(bottom: 15), + child: child, + ); -Widget _createPasswordInputContainer(Widget child) => child; +Widget _createPasswordInputContainer(Widget child) => Padding( + padding: const EdgeInsets.only(bottom: 15), + child: child, + ); Widget _createLoginButton( BuildContext context, diff --git a/lib/src/widgets/email_password_login.dart b/lib/src/widgets/email_password_login.dart index 2e2e538..d6ce3a2 100644 --- a/lib/src/widgets/email_password_login.dart +++ b/lib/src/widgets/email_password_login.dart @@ -133,14 +133,9 @@ class _EmailPasswordLoginFormState extends State { keyboardType: TextInputType.emailAddress, textInputAction: TextInputAction.next, style: options.emailTextStyle, - decoration: options.decoration.copyWith( - hintText: options.emailHintText, - prefixIcon: options.emailInputPrefix, - label: options.emailLabel, - ), + decoration: options.emailDecoration, ), ), - const SizedBox(height: 24), options.passwordInputContainerBuilder( TextFormField( obscureText: _obscurePassword, @@ -152,10 +147,7 @@ class _EmailPasswordLoginFormState extends State { textInputAction: TextInputAction.done, style: options.passwordTextStyle, onFieldSubmitted: (_) => _handleLogin(), - decoration: options.decoration.copyWith( - hintText: options.passwordHintText, - label: options.passwordLabel, - prefixIcon: options.passwordInputPrefix, + decoration: options.passwordDecoration.copyWith( suffixIcon: IconButton( onPressed: () { setState(() { @@ -171,7 +163,6 @@ class _EmailPasswordLoginFormState extends State { ), ), ), - const SizedBox(height: 24), if (widget.onForgotPassword != null) ...[ Align( alignment: Alignment.topRight, diff --git a/lib/src/widgets/forgot_password_form.dart b/lib/src/widgets/forgot_password_form.dart index 7bf6a5f..4426365 100644 --- a/lib/src/widgets/forgot_password_form.dart +++ b/lib/src/widgets/forgot_password_form.dart @@ -65,60 +65,41 @@ class _ForgotPasswordFormState extends State { var theme = Theme.of(context); return Form( key: _formKey, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 32, - vertical: 16, - ), - child: _wrapWithDefaultStyle( - widget.title, - theme.textTheme.displaySmall, - ), - ), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 32, - vertical: 16, - ), - child: _wrapWithDefaultStyle( - widget.description, - theme.textTheme.bodyMedium, - ), - ), - Expanded( - flex: 3, - child: Align( - child: options.emailInputContainerBuilder( - Padding( - padding: const EdgeInsets.all(16), - child: ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 300, - ), - child: TextFormField( - focusNode: _focusNode, - onChanged: _updateCurrentEmail, - validator: widget.options.validations.validateEmail, - initialValue: options.initialEmail, - keyboardType: TextInputType.emailAddress, - textInputAction: TextInputAction.next, - style: options.emailTextStyle, - decoration: options.decoration.copyWith( - prefixIcon: options.emailInputPrefix, - label: options.emailLabel, - ), - ), + child: ConstrainedBox( + constraints: const BoxConstraints( + maxWidth: 300, + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _wrapWithDefaultStyle( + widget.title, + theme.textTheme.displaySmall, + ) ?? + const SizedBox.shrink(), + _wrapWithDefaultStyle( + widget.description, + theme.textTheme.bodyMedium, + ) ?? + const SizedBox.shrink(), + Expanded( + child: Align( + child: options.emailInputContainerBuilder( + TextFormField( + focusNode: _focusNode, + onChanged: _updateCurrentEmail, + validator: widget.options.validations.validateEmail, + initialValue: options.initialEmail, + keyboardType: TextInputType.emailAddress, + textInputAction: TextInputAction.next, + style: options.emailTextStyle, + decoration: options.emailDecoration, ), ), ), ), - ), - Expanded( - child: AnimatedBuilder( + AnimatedBuilder( animation: _formValid, builder: (context, snapshot) { return Align( @@ -139,8 +120,8 @@ class _ForgotPasswordFormState extends State { ); }, ), - ), - ], + ], + ), ), ); } diff --git a/pubspec.yaml b/pubspec.yaml index 64a405f..24c7147 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_login description: Flutter Login Component -version: 3.1.2 +version: 4.0.0 environment: sdk: ">=2.18.1 <3.0.0"