Compare commits
18
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
140ca77f56
|
||
|
|
8adc68230c
|
||
|
|
ef19191093
|
||
|
|
873a3b426d
|
||
|
|
296bb0175e
|
||
|
|
9a3ae2de5c
|
||
|
|
a078f6b6b0 | ||
|
|
fd40d1be3d | ||
|
|
952d3f8539
|
||
|
|
5de3dbd5b3
|
||
|
|
874d85f29c
|
||
|
|
a82d28a6d5
|
||
|
|
80135a611d
|
||
|
|
93873e3134
|
||
|
|
553b6763af
|
||
|
|
cfcf9e75f8
|
||
|
|
0a11157cd0
|
||
|
|
d3184eb3e1 |
@@ -584,7 +584,6 @@ new_version.sh
|
||||
.latest_version
|
||||
.vscode/
|
||||
example/
|
||||
models/
|
||||
build/
|
||||
*.iml
|
||||
|
||||
|
||||
+102
@@ -3,6 +3,108 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## 2023-08-09
|
||||
|
||||
### Changes
|
||||
|
||||
---
|
||||
|
||||
Packages with breaking changes:
|
||||
|
||||
- There are no breaking changes in this release.
|
||||
|
||||
Packages with other changes:
|
||||
|
||||
- [`wyatt_authentication_bloc` - `v0.5.1`](#wyatt_authentication_bloc---v051)
|
||||
- [`wyatt_bloc_layout` - `v0.1.1`](#wyatt_bloc_layout---v011)
|
||||
- [`wyatt_ui_components` - `v0.2.2`](#wyatt_ui_components---v022)
|
||||
- [`wyatt_ui_kit` - `v3.1.0`](#wyatt_ui_kit---v310)
|
||||
- [`wyatt_ui_layout` - `v0.1.1`](#wyatt_ui_layout---v011)
|
||||
|
||||
---
|
||||
|
||||
#### `wyatt_authentication_bloc` - `v0.5.1`
|
||||
|
||||
- **FIX**(authentication): try/catch on cache retrieve.
|
||||
- **FEAT**(auth): add mocked cache data source.
|
||||
|
||||
#### `wyatt_bloc_layout` - `v0.1.1`
|
||||
|
||||
- **FEAT**(bloc_layout): add consumer layouts.
|
||||
- **FEAT**(ui_layout-bloc_layout): proxy scaffold fields.
|
||||
|
||||
#### `wyatt_ui_components` - `v0.2.2`
|
||||
|
||||
- **FIX**: upgrade to flutter 3.10.
|
||||
- **FEAT**: add items manipulation in bottom bar component.
|
||||
- **FEAT**(ui): export pricing card.
|
||||
- **FEAT**(ui): proxy some rich text parameters.
|
||||
|
||||
#### `wyatt_ui_kit` - `v3.1.0`
|
||||
|
||||
- **FIX**: upgrade to flutter 3.10.
|
||||
- **FEAT**(ui): export pricing card.
|
||||
- **FEAT**(ui): proxy some rich text parameters.
|
||||
- **FEAT**(ui): tweak some values.
|
||||
|
||||
#### `wyatt_ui_layout` - `v0.1.1`
|
||||
|
||||
- **FEAT**(ui_layout-bloc_layout): proxy scaffold fields.
|
||||
|
||||
|
||||
## 2023-05-06
|
||||
|
||||
### Changes
|
||||
|
||||
---
|
||||
|
||||
Packages with breaking changes:
|
||||
|
||||
- There are no breaking changes in this release.
|
||||
|
||||
Packages with other changes:
|
||||
|
||||
- [`wyatt_authentication_bloc` - `v0.5.0+1`](#wyatt_authentication_bloc---v0501)
|
||||
|
||||
---
|
||||
|
||||
#### `wyatt_authentication_bloc` - `v0.5.0+1`
|
||||
|
||||
- **REFACTOR**(authentication): controle cache checking.
|
||||
|
||||
|
||||
## 2023-05-04
|
||||
|
||||
### Changes
|
||||
|
||||
---
|
||||
|
||||
Packages with breaking changes:
|
||||
|
||||
- There are no breaking changes in this release.
|
||||
|
||||
Packages with other changes:
|
||||
|
||||
- [`wyatt_ui_components` - `v0.2.1`](#wyatt_ui_components---v021)
|
||||
- [`wyatt_bloc_layout` - `v0.1.0+1`](#wyatt_bloc_layout---v0101)
|
||||
- [`wyatt_ui_kit` - `v3.0.1`](#wyatt_ui_kit---v301)
|
||||
- [`wyatt_ui_layout` - `v0.1.0+1`](#wyatt_ui_layout---v0101)
|
||||
|
||||
Packages with dependency updates only:
|
||||
|
||||
> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
|
||||
|
||||
- `wyatt_bloc_layout` - `v0.1.0+1`
|
||||
- `wyatt_ui_kit` - `v3.0.1`
|
||||
- `wyatt_ui_layout` - `v0.1.0+1`
|
||||
|
||||
---
|
||||
|
||||
#### `wyatt_ui_components` - `v0.2.1`
|
||||
|
||||
- **FEAT**: add floating action button component (close #191). (d3184eb3)
|
||||
|
||||
|
||||
## 2023-05-03
|
||||
|
||||
### Changes
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
name: Wyatt-Packages
|
||||
#repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages Gitea not yet supported
|
||||
# repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages
|
||||
|
||||
sdkPath: auto
|
||||
|
||||
@@ -15,10 +15,10 @@ command:
|
||||
updateGitTagRefs: true
|
||||
linkToCommits: false # Gitea not yet supported
|
||||
workspaceChangelog: true
|
||||
includeCommitId: true
|
||||
includeCommitId: false # Generate error in Melos 3...
|
||||
branch: master
|
||||
message: |
|
||||
chore(release): publish packages 🎉
|
||||
chore(release): publish packages
|
||||
|
||||
{new_package_versions}
|
||||
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
## 0.5.1
|
||||
|
||||
- **FIX**(authentication): try/catch on cache retrieve.
|
||||
- **FEAT**(auth): add mocked cache data source.
|
||||
|
||||
## 0.5.0+1
|
||||
|
||||
- **REFACTOR**(authentication): controle cache checking.
|
||||
|
||||
## 0.5.0
|
||||
|
||||
> Note: This release has breaking changes.
|
||||
|
||||
+4
@@ -41,6 +41,7 @@ class AuthenticationFirebaseCacheDataSourceImpl<Data>
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
final jwt = await currentUser.getIdToken(true);
|
||||
final currentAccount = AccountModel.fromFirebaseUser(
|
||||
currentUser,
|
||||
@@ -48,6 +49,9 @@ class AuthenticationFirebaseCacheDataSourceImpl<Data>
|
||||
);
|
||||
|
||||
return currentAccount;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Already done by Firebase
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
// Copyright (C) 2023 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
|
||||
|
||||
/// {@template authentication_mock_cache_data_source_impl}
|
||||
/// A data source that manages the cache strategy.
|
||||
/// This implementation is mocked.
|
||||
/// {@endtemplate}
|
||||
class AuthenticationMockCacheDataSourceImpl<Data>
|
||||
extends AuthenticationCacheDataSource<Data> {
|
||||
/// {@macro authentication_mock_cache_data_source_impl}
|
||||
AuthenticationMockCacheDataSourceImpl();
|
||||
|
||||
@override
|
||||
Future<void> cacheAccount(Account account) => Future.value();
|
||||
|
||||
/// Always returns null.
|
||||
@override
|
||||
Future<Account?> getCachedAccount() async {
|
||||
await Future<void>.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> removeCachedAccount() => Future.value();
|
||||
}
|
||||
@@ -15,5 +15,6 @@
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
export 'authentication_firebase_cache_data_source_impl.dart';
|
||||
export 'authentication_mock_cache_data_source_impl.dart';
|
||||
export 'authentication_secure_storage_cache_data_source_impl.dart';
|
||||
export 'authentication_session_data_source_impl.dart';
|
||||
|
||||
+11
-1
@@ -40,6 +40,7 @@ abstract class AuthenticationCubit<Data>
|
||||
/// {@macro authentication_cubit}
|
||||
AuthenticationCubit({
|
||||
required this.authenticationRepository,
|
||||
this.checkForCachedAccountOnInitialization = true,
|
||||
}) : super(const AuthenticationState.unknown()) {
|
||||
_init();
|
||||
}
|
||||
@@ -47,6 +48,9 @@ abstract class AuthenticationCubit<Data>
|
||||
/// The authentication repository.
|
||||
final AuthenticationRepository<Data> authenticationRepository;
|
||||
|
||||
/// Automatically check for cached account on initialization.
|
||||
final bool checkForCachedAccountOnInitialization;
|
||||
|
||||
/// The latest session.
|
||||
AuthenticationSession<Data>? _latestSession;
|
||||
|
||||
@@ -56,7 +60,9 @@ abstract class AuthenticationCubit<Data>
|
||||
_listenForAuthenticationChanges();
|
||||
|
||||
/// Check if there is a cached account.
|
||||
await authenticationRepository.checkForCachedAccount();
|
||||
if (checkForCachedAccountOnInitialization) {
|
||||
await checkForCachedAccount();
|
||||
}
|
||||
}
|
||||
|
||||
void _listenForAuthenticationChanges() {
|
||||
@@ -148,6 +154,10 @@ abstract class AuthenticationCubit<Data>
|
||||
),
|
||||
).call();
|
||||
|
||||
/// Checks for cached account.
|
||||
FutureOr<void> checkForCachedAccount() async =>
|
||||
authenticationRepository.checkForCachedAccount();
|
||||
|
||||
/// Returns latest session.
|
||||
///
|
||||
/// Contains latest event and latest session data (account + extra data)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: wyatt_authentication_bloc
|
||||
description: Authentication BLoC for Flutter
|
||||
repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_authentication_bloc
|
||||
version: 0.5.0
|
||||
version: 0.5.1
|
||||
|
||||
publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
## 0.1.1
|
||||
|
||||
- **FEAT**(bloc_layout): add consumer layouts.
|
||||
- **FEAT**(ui_layout-bloc_layout): proxy scaffold fields.
|
||||
|
||||
## 0.1.0+1
|
||||
|
||||
- Update a dependency to the latest release.
|
||||
|
||||
## 0.1.0
|
||||
|
||||
> Note: This release has breaking changes.
|
||||
|
||||
@@ -39,13 +39,13 @@ dependencies:
|
||||
version: ^2.0.1
|
||||
wyatt_ui_layout:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.1.0
|
||||
version: ^0.1.1
|
||||
wyatt_crud_bloc:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.1.1
|
||||
wyatt_ui_components:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.2.0
|
||||
version: ^0.2.2
|
||||
wyatt_component_copy_with_extension:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^2.0.1
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base;
|
||||
import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart';
|
||||
|
||||
abstract class CubitConsumerBase<Cubit extends bloc_base.Cubit<State>,
|
||||
State extends Object> extends CubitConsumerScreen<Cubit, State> {
|
||||
const CubitConsumerBase({super.key});
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base;
|
||||
import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart';
|
||||
import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart';
|
||||
|
||||
abstract class CubitConsumerCrudBase<Cubit extends bloc_base.Cubit<CrudState>,
|
||||
CrudSuccessState extends CrudSuccess>
|
||||
extends CubitConsumerBase<Cubit, CrudState>
|
||||
with CrudMixin<Cubit, CrudSuccessState> {
|
||||
const CubitConsumerCrudBase({super.key});
|
||||
|
||||
@override
|
||||
Widget onBuild(BuildContext context, CrudState state) =>
|
||||
crudBuilder(context, state);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base;
|
||||
import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart';
|
||||
import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart';
|
||||
|
||||
abstract class CubitConsumerCrudItemBase<
|
||||
Cubit extends bloc_base.Cubit<CrudState>,
|
||||
T extends Object?> extends CubitConsumerCrudBase<Cubit, CrudLoaded<T>> {
|
||||
const CubitConsumerCrudItemBase({super.key});
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:flutter_bloc/flutter_bloc.dart' as bloc_base;
|
||||
import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart';
|
||||
import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart';
|
||||
|
||||
abstract class CubitConsumerCrudListBase<
|
||||
Cubit extends bloc_base.Cubit<CrudState>,
|
||||
T extends Object?> extends CubitConsumerCrudBase<Cubit, CrudListLoaded<T>> {
|
||||
const CubitConsumerCrudListBase({super.key});
|
||||
}
|
||||
+1
@@ -26,6 +26,7 @@ abstract class FrameLayoutGridCubitScreenCrudList<
|
||||
super.customAppBar,
|
||||
super.customBottomNavBar,
|
||||
super.height = 60,
|
||||
super.scaffoldFieldsWrapper,
|
||||
super.key,
|
||||
});
|
||||
}
|
||||
|
||||
+3
@@ -26,6 +26,7 @@ abstract class FrameLayoutCubitScreen<Cubit extends bloc_base.Cubit<State>,
|
||||
const FrameLayoutCubitScreen({
|
||||
this.customAppBar,
|
||||
this.customBottomNavBar,
|
||||
this.scaffoldFieldsWrapper,
|
||||
this.height = 60,
|
||||
super.key,
|
||||
});
|
||||
@@ -34,12 +35,14 @@ abstract class FrameLayoutCubitScreen<Cubit extends bloc_base.Cubit<State>,
|
||||
final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)?
|
||||
customBottomNavBar;
|
||||
final double height;
|
||||
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper;
|
||||
|
||||
@override
|
||||
Widget parent(BuildContext context, Widget child) => FrameLayout(
|
||||
customAppBar: customAppBar,
|
||||
customBottomNavBar: customBottomNavBar,
|
||||
height: height,
|
||||
scaffoldFieldsWrapper: scaffoldFieldsWrapper,
|
||||
body: child,
|
||||
);
|
||||
}
|
||||
|
||||
+1
@@ -29,6 +29,7 @@ abstract class FrameLayoutCubitScreenCrud<
|
||||
super.customBottomNavBar,
|
||||
super.height,
|
||||
super.key,
|
||||
super.scaffoldFieldsWrapper,
|
||||
});
|
||||
|
||||
@override
|
||||
|
||||
+1
@@ -25,6 +25,7 @@ abstract class FrameLayoutCubitScreenCrudItem<
|
||||
super.customAppBar,
|
||||
super.customBottomNavBar,
|
||||
super.height = 60,
|
||||
super.scaffoldFieldsWrapper,
|
||||
super.key,
|
||||
});
|
||||
}
|
||||
|
||||
+1
@@ -25,6 +25,7 @@ abstract class FrameLayoutCubitScreenCrudList<
|
||||
super.customAppBar,
|
||||
super.customBottomNavBar,
|
||||
super.height = 60,
|
||||
super.scaffoldFieldsWrapper,
|
||||
super.key,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -15,6 +15,10 @@
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
export './bottom_navigation_bar_bloc_layout/bottom_navigation_bar_bloc_layout.dart';
|
||||
export './cubit_consumer_base.dart';
|
||||
export './cubit_consumer_crud_base.dart';
|
||||
export './cubit_consumer_crud_item_base.dart';
|
||||
export './cubit_consumer_crud_list_base.dart';
|
||||
export './cubit_screen_base.dart';
|
||||
export './cubit_screen_crud_base.dart';
|
||||
export './cubit_screen_crud_item_base.dart';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: wyatt_bloc_layout
|
||||
description: Layouts based on bloc helper library
|
||||
repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_bloc_layout
|
||||
version: 0.1.0
|
||||
version: 0.1.1
|
||||
|
||||
publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
|
||||
@@ -19,7 +19,7 @@ dependencies:
|
||||
|
||||
wyatt_ui_layout:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.1.0
|
||||
version: ^0.1.1
|
||||
|
||||
wyatt_crud_bloc:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
@@ -27,7 +27,7 @@ dependencies:
|
||||
|
||||
wyatt_ui_components:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.2.0
|
||||
version: ^0.2.2
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test: { sdk: flutter }
|
||||
|
||||
@@ -16,7 +16,7 @@ dependencies:
|
||||
|
||||
wyatt_ui_components:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.2.0
|
||||
version: ^0.2.2
|
||||
|
||||
dev_dependencies:
|
||||
build_runner: ^2.3.3
|
||||
|
||||
@@ -15,7 +15,7 @@ dependencies:
|
||||
flutter_bloc: ^8.1.2
|
||||
flutter_localizations: { sdk: flutter }
|
||||
http: ^0.13.5
|
||||
intl: ^0.17.0
|
||||
intl: ^0.18.0
|
||||
path: ^1.8.0
|
||||
petitparser: ^5.1.0
|
||||
wyatt_architecture:
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
## 0.2.2
|
||||
|
||||
- **FIX**: upgrade to flutter 3.10.
|
||||
- **FEAT**: add items manipulation in bottom bar component.
|
||||
- **FEAT**(ui): export pricing card.
|
||||
- **FEAT**(ui): proxy some rich text parameters.
|
||||
|
||||
## 0.2.1
|
||||
|
||||
- **FEAT**: add floating action button component (close #191). (d3184eb3)
|
||||
|
||||
## 0.2.0
|
||||
|
||||
> Note: This release has breaking changes.
|
||||
|
||||
@@ -17,11 +17,15 @@ class $CustomBottomNavigationBarCWProxyImpl
|
||||
CustomBottomNavigationBar currentIndex(int? currentIndex) =>
|
||||
this(currentIndex: currentIndex);
|
||||
@override
|
||||
CustomBottomNavigationBar items(List<BottomNavigationBarItem>? items) =>
|
||||
this(items: items);
|
||||
@override
|
||||
CustomBottomNavigationBar key(Key? key) => this(key: key);
|
||||
@override
|
||||
CustomBottomNavigationBar call({
|
||||
void Function(BuildContext, int)? onTap,
|
||||
int? currentIndex,
|
||||
List<BottomNavigationBarItem>? items,
|
||||
Key? key,
|
||||
}) =>
|
||||
CustomBottomNavigationBar(
|
||||
|
||||
+3
@@ -27,8 +27,11 @@ abstract class BottomNavigationBarComponent extends Component
|
||||
const BottomNavigationBarComponent({
|
||||
this.onTap,
|
||||
this.currentIndex = 0,
|
||||
this.items = const <BottomNavigationBarItem>[],
|
||||
super.key,
|
||||
});
|
||||
|
||||
final int currentIndex;
|
||||
final void Function(BuildContext, int)? onTap;
|
||||
final List<BottomNavigationBarItem> items;
|
||||
}
|
||||
|
||||
+2
@@ -9,10 +9,12 @@ part of 'bottom_navigation_bar_component.dart';
|
||||
abstract class $BottomNavigationBarComponentCWProxy {
|
||||
BottomNavigationBarComponent onTap(void Function(BuildContext, int)? onTap);
|
||||
BottomNavigationBarComponent currentIndex(int? currentIndex);
|
||||
BottomNavigationBarComponent items(List<BottomNavigationBarItem>? items);
|
||||
BottomNavigationBarComponent key(Key? key);
|
||||
BottomNavigationBarComponent call({
|
||||
void Function(BuildContext, int)? onTap,
|
||||
int? currentIndex,
|
||||
List<BottomNavigationBarItem>? items,
|
||||
Key? key,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ export './buttons/buttons.dart';
|
||||
export './cards/cards.dart';
|
||||
export './component.dart';
|
||||
export './error/error.dart';
|
||||
export './floating_buttons/floating_buttons.dart';
|
||||
export './gradients/gradients.dart';
|
||||
export './loader/loader.dart';
|
||||
export './rich_text_builder/rich_text_builder.dart';
|
||||
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
// Copyright (C) 2023 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart';
|
||||
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
|
||||
|
||||
part 'floating_action_button_component.g.dart';
|
||||
|
||||
@ComponentProxyExtension()
|
||||
abstract class FloatingActionButtonComponent extends Component
|
||||
with CopyWithMixin<$FloatingActionButtonComponentCWProxy> {
|
||||
const FloatingActionButtonComponent({
|
||||
this.child,
|
||||
this.tooltip,
|
||||
this.foregroundColor,
|
||||
this.backgroundColor,
|
||||
this.focusColor,
|
||||
this.hoverColor,
|
||||
this.splashColor,
|
||||
this.heroTag,
|
||||
this.onPressed,
|
||||
this.mouseCursor,
|
||||
this.elevation,
|
||||
this.focusElevation,
|
||||
this.hoverElevation,
|
||||
this.highlightElevation,
|
||||
this.disabledElevation,
|
||||
this.mini,
|
||||
this.shape,
|
||||
this.clipBehavior,
|
||||
this.isExtended,
|
||||
this.focusNode,
|
||||
this.autofocus,
|
||||
this.materialTapTargetSize,
|
||||
this.enableFeedback,
|
||||
this.extendedIconLabelSpacing,
|
||||
this.extendedPadding,
|
||||
this.extendedTextStyle,
|
||||
super.key,
|
||||
});
|
||||
|
||||
final Widget? child;
|
||||
|
||||
final String? tooltip;
|
||||
|
||||
final Color? foregroundColor;
|
||||
|
||||
final Color? backgroundColor;
|
||||
|
||||
final Color? focusColor;
|
||||
|
||||
final Color? hoverColor;
|
||||
|
||||
final Color? splashColor;
|
||||
|
||||
final Object? heroTag;
|
||||
|
||||
final VoidCallback? onPressed;
|
||||
|
||||
final MouseCursor? mouseCursor;
|
||||
|
||||
final double? elevation;
|
||||
|
||||
final double? focusElevation;
|
||||
|
||||
final double? hoverElevation;
|
||||
|
||||
final double? highlightElevation;
|
||||
|
||||
final double? disabledElevation;
|
||||
|
||||
final bool? mini;
|
||||
|
||||
final ShapeBorder? shape;
|
||||
|
||||
final Clip? clipBehavior;
|
||||
|
||||
final bool? isExtended;
|
||||
|
||||
final FocusNode? focusNode;
|
||||
|
||||
final bool? autofocus;
|
||||
|
||||
final MaterialTapTargetSize? materialTapTargetSize;
|
||||
|
||||
final bool? enableFeedback;
|
||||
|
||||
final double? extendedIconLabelSpacing;
|
||||
|
||||
final EdgeInsetsGeometry? extendedPadding;
|
||||
|
||||
final TextStyle? extendedTextStyle;
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'floating_action_button_component.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// ComponentProxyGenerator
|
||||
// **************************************************************************
|
||||
|
||||
abstract class $FloatingActionButtonComponentCWProxy {
|
||||
FloatingActionButtonComponent child(Widget? child);
|
||||
FloatingActionButtonComponent tooltip(String? tooltip);
|
||||
FloatingActionButtonComponent foregroundColor(Color? foregroundColor);
|
||||
FloatingActionButtonComponent backgroundColor(Color? backgroundColor);
|
||||
FloatingActionButtonComponent focusColor(Color? focusColor);
|
||||
FloatingActionButtonComponent hoverColor(Color? hoverColor);
|
||||
FloatingActionButtonComponent splashColor(Color? splashColor);
|
||||
FloatingActionButtonComponent heroTag(Object? heroTag);
|
||||
FloatingActionButtonComponent onPressed(void Function()? onPressed);
|
||||
FloatingActionButtonComponent mouseCursor(MouseCursor? mouseCursor);
|
||||
FloatingActionButtonComponent elevation(double? elevation);
|
||||
FloatingActionButtonComponent focusElevation(double? focusElevation);
|
||||
FloatingActionButtonComponent hoverElevation(double? hoverElevation);
|
||||
FloatingActionButtonComponent highlightElevation(double? highlightElevation);
|
||||
FloatingActionButtonComponent disabledElevation(double? disabledElevation);
|
||||
FloatingActionButtonComponent mini(bool? mini);
|
||||
FloatingActionButtonComponent shape(ShapeBorder? shape);
|
||||
FloatingActionButtonComponent clipBehavior(Clip? clipBehavior);
|
||||
FloatingActionButtonComponent isExtended(bool? isExtended);
|
||||
FloatingActionButtonComponent focusNode(FocusNode? focusNode);
|
||||
FloatingActionButtonComponent autofocus(bool? autofocus);
|
||||
FloatingActionButtonComponent materialTapTargetSize(
|
||||
MaterialTapTargetSize? materialTapTargetSize);
|
||||
FloatingActionButtonComponent enableFeedback(bool? enableFeedback);
|
||||
FloatingActionButtonComponent extendedIconLabelSpacing(
|
||||
double? extendedIconLabelSpacing);
|
||||
FloatingActionButtonComponent extendedPadding(
|
||||
EdgeInsetsGeometry? extendedPadding);
|
||||
FloatingActionButtonComponent extendedTextStyle(TextStyle? extendedTextStyle);
|
||||
FloatingActionButtonComponent key(Key? key);
|
||||
FloatingActionButtonComponent call({
|
||||
Widget? child,
|
||||
String? tooltip,
|
||||
Color? foregroundColor,
|
||||
Color? backgroundColor,
|
||||
Color? focusColor,
|
||||
Color? hoverColor,
|
||||
Color? splashColor,
|
||||
Object? heroTag,
|
||||
void Function()? onPressed,
|
||||
MouseCursor? mouseCursor,
|
||||
double? elevation,
|
||||
double? focusElevation,
|
||||
double? hoverElevation,
|
||||
double? highlightElevation,
|
||||
double? disabledElevation,
|
||||
bool? mini,
|
||||
ShapeBorder? shape,
|
||||
Clip? clipBehavior,
|
||||
bool? isExtended,
|
||||
FocusNode? focusNode,
|
||||
bool? autofocus,
|
||||
MaterialTapTargetSize? materialTapTargetSize,
|
||||
bool? enableFeedback,
|
||||
double? extendedIconLabelSpacing,
|
||||
EdgeInsetsGeometry? extendedPadding,
|
||||
TextStyle? extendedTextStyle,
|
||||
Key? key,
|
||||
});
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// Copyright (C) 2023 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
export './floating_action_button_component.dart';
|
||||
+90
@@ -28,6 +28,17 @@ abstract class RichTextBuilderComponent extends Component
|
||||
this.parser,
|
||||
this.defaultStyle,
|
||||
this.styles,
|
||||
this.strutStyle,
|
||||
this.textAlign,
|
||||
this.textDirection,
|
||||
this.locale,
|
||||
this.softWrap,
|
||||
this.overflow,
|
||||
this.textScaleFactor,
|
||||
this.maxLines,
|
||||
this.semanticsLabel,
|
||||
this.textWidthBasis,
|
||||
this.selectionColor,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@@ -52,4 +63,83 @@ abstract class RichTextBuilderComponent extends Component
|
||||
/// ```
|
||||
/// in "This text `is red`."
|
||||
final Map<String, TextStyle>? styles;
|
||||
|
||||
final StrutStyle? strutStyle;
|
||||
|
||||
/// How the text should be aligned horizontally.
|
||||
final TextAlign? textAlign;
|
||||
|
||||
/// The directionality of the text.
|
||||
///
|
||||
/// This decides how [textAlign] values like [TextAlign.start] and
|
||||
/// [TextAlign.end] are interpreted.
|
||||
final TextDirection? textDirection;
|
||||
|
||||
/// Used to select a font when the same Unicode character can
|
||||
/// be rendered differently, depending on the locale.
|
||||
final Locale? locale;
|
||||
|
||||
/// Whether the text should break at soft line breaks.
|
||||
///
|
||||
/// If false, the glyphs in the text will be positioned as if there
|
||||
/// was unlimited horizontal space.
|
||||
final bool? softWrap;
|
||||
|
||||
/// How visual overflow should be handled.
|
||||
///
|
||||
/// If this is null [TextStyle.overflow] will be used, otherwise the value
|
||||
/// from the nearest [DefaultTextStyle] ancestor will be used.
|
||||
final TextOverflow? overflow;
|
||||
|
||||
/// The number of font pixels for each logical pixel.
|
||||
///
|
||||
/// For example, if the text scale factor is 1.5, text will be 50% larger than
|
||||
/// the specified font size.
|
||||
///
|
||||
/// The value given to the constructor as textScaleFactor. If null, will
|
||||
/// use the [MediaQueryData.textScaleFactor] obtained from the ambient
|
||||
/// [MediaQuery], or 1.0 if there is no [MediaQuery] in scope.
|
||||
final double? textScaleFactor;
|
||||
|
||||
/// An optional maximum number of lines for the text to span, wrapping if
|
||||
/// necessary.
|
||||
/// If the text exceeds the given number of lines, it will be truncated
|
||||
/// according to [overflow].
|
||||
///
|
||||
/// If this is 1, text will not wrap. Otherwise, text will be wrapped at the
|
||||
/// edge of the box.
|
||||
///
|
||||
/// If this is null, but there is an ambient [DefaultTextStyle] that specifies
|
||||
/// an explicit number for its [DefaultTextStyle.maxLines], then the
|
||||
/// [DefaultTextStyle] value will take precedence. You can use a [RichText]
|
||||
/// widget directly to entirely override the [DefaultTextStyle].
|
||||
final int? maxLines;
|
||||
|
||||
/// {@template flutter.widgets.Text.semanticsLabel}
|
||||
/// An alternative semantics label for this text.
|
||||
///
|
||||
/// If present, the semantics of this widget will contain this value instead
|
||||
/// of the actual text. This will overwrite any of the semantics labels
|
||||
/// applied directly to the [TextSpan]s.
|
||||
///
|
||||
/// This is useful for replacing abbreviations or shorthands with the full
|
||||
/// text value:
|
||||
///
|
||||
/// ```dart
|
||||
/// const Text(r'$$', semanticsLabel: 'Double dollars')
|
||||
/// ```
|
||||
/// {@endtemplate}
|
||||
final String? semanticsLabel;
|
||||
|
||||
final TextWidthBasis? textWidthBasis;
|
||||
|
||||
/// The color to use when painting the selection.
|
||||
///
|
||||
/// This is ignored if [SelectionContainer.maybeOf] returns null
|
||||
/// in the [BuildContext] of the [Text] widget.
|
||||
///
|
||||
/// If null, the ambient [DefaultSelectionStyle] is used (if any); failing
|
||||
/// that, the selection color defaults to [DefaultSelectionStyle.defaultColor]
|
||||
/// (semi-transparent grey).
|
||||
final Color? selectionColor;
|
||||
}
|
||||
|
||||
+22
@@ -11,12 +11,34 @@ abstract class $RichTextBuilderComponentCWProxy {
|
||||
RichTextBuilderComponent parser(RichTextParser? parser);
|
||||
RichTextBuilderComponent defaultStyle(TextStyle? defaultStyle);
|
||||
RichTextBuilderComponent styles(Map<String, TextStyle>? styles);
|
||||
RichTextBuilderComponent strutStyle(StrutStyle? strutStyle);
|
||||
RichTextBuilderComponent textAlign(TextAlign? textAlign);
|
||||
RichTextBuilderComponent textDirection(TextDirection? textDirection);
|
||||
RichTextBuilderComponent locale(Locale? locale);
|
||||
RichTextBuilderComponent softWrap(bool? softWrap);
|
||||
RichTextBuilderComponent overflow(TextOverflow? overflow);
|
||||
RichTextBuilderComponent textScaleFactor(double? textScaleFactor);
|
||||
RichTextBuilderComponent maxLines(int? maxLines);
|
||||
RichTextBuilderComponent semanticsLabel(String? semanticsLabel);
|
||||
RichTextBuilderComponent textWidthBasis(TextWidthBasis? textWidthBasis);
|
||||
RichTextBuilderComponent selectionColor(Color? selectionColor);
|
||||
RichTextBuilderComponent key(Key? key);
|
||||
RichTextBuilderComponent call({
|
||||
String? text,
|
||||
RichTextParser? parser,
|
||||
TextStyle? defaultStyle,
|
||||
Map<String, TextStyle>? styles,
|
||||
StrutStyle? strutStyle,
|
||||
TextAlign? textAlign,
|
||||
TextDirection? textDirection,
|
||||
Locale? locale,
|
||||
bool? softWrap,
|
||||
TextOverflow? overflow,
|
||||
double? textScaleFactor,
|
||||
int? maxLines,
|
||||
String? semanticsLabel,
|
||||
TextWidthBasis? textWidthBasis,
|
||||
Color? selectionColor,
|
||||
Key? key,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -41,6 +41,8 @@ class ComponentThemeData {
|
||||
PortfolioCardComponent? portfolioCard,
|
||||
QuoteCardComponent? quoteCard,
|
||||
SkillCardComponent? skillCard,
|
||||
PricingCardComponent? pricingCard,
|
||||
FloatingActionButtonComponent? floatingActionButton,
|
||||
}) =>
|
||||
ComponentThemeData.raw(
|
||||
topAppBar: topAppBar,
|
||||
@@ -58,6 +60,8 @@ class ComponentThemeData {
|
||||
portfolioCard: portfolioCard,
|
||||
quoteCard: quoteCard,
|
||||
skillCard: skillCard,
|
||||
pricingCard: pricingCard,
|
||||
floatingActionButton: floatingActionButton,
|
||||
);
|
||||
|
||||
/// {@macro component_theme_data}
|
||||
@@ -78,6 +82,8 @@ class ComponentThemeData {
|
||||
portfolioCard: other.portfolioCard,
|
||||
quoteCard: other.quoteCard,
|
||||
skillCard: other.skillCard,
|
||||
pricingCard: other.pricingCard,
|
||||
floatingActionButton: other.floatingActionButton,
|
||||
);
|
||||
|
||||
/// Create a [ComponentThemeData] given a set of exact values. Most values
|
||||
@@ -102,6 +108,8 @@ class ComponentThemeData {
|
||||
this.portfolioCard,
|
||||
this.quoteCard,
|
||||
this.skillCard,
|
||||
this.pricingCard,
|
||||
this.floatingActionButton,
|
||||
});
|
||||
|
||||
R _get<T extends Component, R>(T? component, R? returned) {
|
||||
@@ -149,6 +157,9 @@ class ComponentThemeData {
|
||||
final SkillCardComponent? skillCard;
|
||||
$SkillCardComponentCWProxy get skillCardComponent =>
|
||||
_get(skillCard, skillCard?.copyWith);
|
||||
final PricingCardComponent? pricingCard;
|
||||
$PricingCardComponentCWProxy get pricingCardComponent =>
|
||||
_get(pricingCard, pricingCard?.copyWith);
|
||||
|
||||
// Rich Text
|
||||
final RichTextBuilderComponent? richTextBuilder;
|
||||
@@ -173,4 +184,8 @@ class ComponentThemeData {
|
||||
final SymbolButtonComponent? symbolButton;
|
||||
$SymbolButtonComponentCWProxy get symbolButtonComponent =>
|
||||
_get(symbolButton, symbolButton?.copyWith);
|
||||
|
||||
final FloatingActionButtonComponent? floatingActionButton;
|
||||
$FloatingActionButtonComponentCWProxy get floatingActionButtonComponent =>
|
||||
_get(floatingActionButton, floatingActionButton?.copyWith);
|
||||
}
|
||||
|
||||
@@ -41,6 +41,11 @@ abstract class _$ComponentThemeDataCWProxy {
|
||||
|
||||
ComponentThemeData skillCard(SkillCardComponent? skillCard);
|
||||
|
||||
ComponentThemeData pricingCard(PricingCardComponent? pricingCard);
|
||||
|
||||
ComponentThemeData floatingActionButton(
|
||||
FloatingActionButtonComponent? floatingActionButton);
|
||||
|
||||
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ComponentThemeData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
|
||||
///
|
||||
/// Usage
|
||||
@@ -63,6 +68,8 @@ abstract class _$ComponentThemeDataCWProxy {
|
||||
PortfolioCardComponent? portfolioCard,
|
||||
QuoteCardComponent? quoteCard,
|
||||
SkillCardComponent? skillCard,
|
||||
PricingCardComponent? pricingCard,
|
||||
FloatingActionButtonComponent? floatingActionButton,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -136,6 +143,15 @@ class _$ComponentThemeDataCWProxyImpl implements _$ComponentThemeDataCWProxy {
|
||||
ComponentThemeData skillCard(SkillCardComponent? skillCard) =>
|
||||
this(skillCard: skillCard);
|
||||
|
||||
@override
|
||||
ComponentThemeData pricingCard(PricingCardComponent? pricingCard) =>
|
||||
this(pricingCard: pricingCard);
|
||||
|
||||
@override
|
||||
ComponentThemeData floatingActionButton(
|
||||
FloatingActionButtonComponent? floatingActionButton) =>
|
||||
this(floatingActionButton: floatingActionButton);
|
||||
|
||||
@override
|
||||
|
||||
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ComponentThemeData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
|
||||
@@ -160,6 +176,8 @@ class _$ComponentThemeDataCWProxyImpl implements _$ComponentThemeDataCWProxy {
|
||||
Object? portfolioCard = const $CopyWithPlaceholder(),
|
||||
Object? quoteCard = const $CopyWithPlaceholder(),
|
||||
Object? skillCard = const $CopyWithPlaceholder(),
|
||||
Object? pricingCard = const $CopyWithPlaceholder(),
|
||||
Object? floatingActionButton = const $CopyWithPlaceholder(),
|
||||
}) {
|
||||
return ComponentThemeData(
|
||||
topAppBar: topAppBar == const $CopyWithPlaceholder()
|
||||
@@ -222,6 +240,14 @@ class _$ComponentThemeDataCWProxyImpl implements _$ComponentThemeDataCWProxy {
|
||||
? _value.skillCard
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: skillCard as SkillCardComponent?,
|
||||
pricingCard: pricingCard == const $CopyWithPlaceholder()
|
||||
? _value.pricingCard
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: pricingCard as PricingCardComponent?,
|
||||
floatingActionButton: floatingActionButton == const $CopyWithPlaceholder()
|
||||
? _value.floatingActionButton
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
: floatingActionButton as FloatingActionButtonComponent?,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
name: wyatt_ui_components
|
||||
description: Components that can be implemented in any application with copy constructor.
|
||||
repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_components
|
||||
version: 0.2.0
|
||||
version: 0.2.2
|
||||
|
||||
publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
|
||||
environment:
|
||||
sdk: ">=2.17.0 <3.0.0"
|
||||
sdk: ">=2.19.0 <3.0.0"
|
||||
|
||||
dependencies:
|
||||
flutter: { sdk: flutter }
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
## 3.1.0
|
||||
|
||||
- **FIX**: upgrade to flutter 3.10.
|
||||
- **FEAT**(ui): export pricing card.
|
||||
- **FEAT**(ui): proxy some rich text parameters.
|
||||
- **FEAT**(ui): tweak some values.
|
||||
|
||||
## 3.0.1
|
||||
|
||||
- Update a dependency to the latest release.
|
||||
|
||||
## 3.0.0
|
||||
|
||||
> Note: This release has breaking changes.
|
||||
|
||||
@@ -40,10 +40,10 @@ class Buttons extends DemoPage {
|
||||
),
|
||||
),
|
||||
const Gap(20),
|
||||
Row(
|
||||
const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: const [
|
||||
children: [
|
||||
FlatButtons(),
|
||||
Gap(20),
|
||||
SymbolButtons(),
|
||||
|
||||
@@ -30,10 +30,10 @@ class QuoteCards extends StatelessWidget {
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
const Gap(20),
|
||||
Row(
|
||||
const Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: const [
|
||||
children: [
|
||||
QuoteCard(
|
||||
quote:
|
||||
TextWrapper('Cupidatat reprehenderit aliqua eiusmod Lorem. '
|
||||
|
||||
@@ -43,9 +43,9 @@ class Loaders extends DemoPage {
|
||||
radius: 57,
|
||||
),
|
||||
const Gap(20),
|
||||
Row(
|
||||
const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: const [
|
||||
children: [
|
||||
Loader(
|
||||
stroke: 5,
|
||||
),
|
||||
|
||||
@@ -43,7 +43,8 @@ class App extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final brightness = WidgetsBinding.instance.window.platformBrightness;
|
||||
final brightness =
|
||||
WidgetsBinding.instance.platformDispatcher.platformBrightness;
|
||||
return BlocProvider(
|
||||
create: (context) => AppModeCubit(
|
||||
theme: defaultTheme,
|
||||
|
||||
@@ -20,7 +20,7 @@ dependencies:
|
||||
|
||||
wyatt_ui_components:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.2.0
|
||||
version: ^0.2.2
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test: { sdk: flutter }
|
||||
|
||||
+2
-2
@@ -117,9 +117,9 @@ class PricingCardTitles extends StatelessWidget {
|
||||
WidgetSpan(
|
||||
child: Transform.translate(
|
||||
offset: const Offset(5, -15),
|
||||
child: const Text(
|
||||
child: Text(
|
||||
'* ',
|
||||
style: TextStyle(fontSize: 18),
|
||||
style: titleStyle?.copyWith(fontSize: 18),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -29,6 +29,17 @@ class RichTextBuilder extends RichTextBuilderComponent
|
||||
super.parser,
|
||||
super.defaultStyle,
|
||||
super.styles,
|
||||
super.strutStyle,
|
||||
super.textAlign,
|
||||
super.textDirection,
|
||||
super.locale,
|
||||
super.softWrap,
|
||||
super.overflow,
|
||||
super.textScaleFactor,
|
||||
super.maxLines,
|
||||
super.semanticsLabel,
|
||||
super.textWidthBasis,
|
||||
super.selectionColor,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@@ -91,6 +102,17 @@ class RichTextBuilder extends RichTextBuilderComponent
|
||||
TextSpan(children: [root.toInlineSpan(customParser)]),
|
||||
textHeightBehavior:
|
||||
const TextHeightBehavior(applyHeightToLastDescent: false),
|
||||
strutStyle: super.strutStyle,
|
||||
textAlign: super.textAlign,
|
||||
textDirection: super.textDirection,
|
||||
locale: super.locale,
|
||||
softWrap: super.softWrap,
|
||||
overflow: super.overflow,
|
||||
textScaleFactor: super.textScaleFactor,
|
||||
maxLines: super.maxLines,
|
||||
semanticsLabel: super.semanticsLabel,
|
||||
textWidthBasis: super.textWidthBasis,
|
||||
selectionColor: super.selectionColor,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,34 @@ class $RichTextBuilderCWProxyImpl implements $RichTextBuilderComponentCWProxy {
|
||||
RichTextBuilder styles(Map<String, TextStyle>? styles) =>
|
||||
this(styles: styles);
|
||||
@override
|
||||
RichTextBuilder strutStyle(StrutStyle? strutStyle) =>
|
||||
this(strutStyle: strutStyle);
|
||||
@override
|
||||
RichTextBuilder textAlign(TextAlign? textAlign) => this(textAlign: textAlign);
|
||||
@override
|
||||
RichTextBuilder textDirection(TextDirection? textDirection) =>
|
||||
this(textDirection: textDirection);
|
||||
@override
|
||||
RichTextBuilder locale(Locale? locale) => this(locale: locale);
|
||||
@override
|
||||
RichTextBuilder softWrap(bool? softWrap) => this(softWrap: softWrap);
|
||||
@override
|
||||
RichTextBuilder overflow(TextOverflow? overflow) => this(overflow: overflow);
|
||||
@override
|
||||
RichTextBuilder textScaleFactor(double? textScaleFactor) =>
|
||||
this(textScaleFactor: textScaleFactor);
|
||||
@override
|
||||
RichTextBuilder maxLines(int? maxLines) => this(maxLines: maxLines);
|
||||
@override
|
||||
RichTextBuilder semanticsLabel(String? semanticsLabel) =>
|
||||
this(semanticsLabel: semanticsLabel);
|
||||
@override
|
||||
RichTextBuilder textWidthBasis(TextWidthBasis? textWidthBasis) =>
|
||||
this(textWidthBasis: textWidthBasis);
|
||||
@override
|
||||
RichTextBuilder selectionColor(Color? selectionColor) =>
|
||||
this(selectionColor: selectionColor);
|
||||
@override
|
||||
RichTextBuilder key(Key? key) => this(key: key);
|
||||
@override
|
||||
RichTextBuilder call({
|
||||
@@ -27,6 +55,17 @@ class $RichTextBuilderCWProxyImpl implements $RichTextBuilderComponentCWProxy {
|
||||
RichTextParser? parser,
|
||||
TextStyle? defaultStyle,
|
||||
Map<String, TextStyle>? styles,
|
||||
StrutStyle? strutStyle,
|
||||
TextAlign? textAlign,
|
||||
TextDirection? textDirection,
|
||||
Locale? locale,
|
||||
bool? softWrap,
|
||||
TextOverflow? overflow,
|
||||
double? textScaleFactor,
|
||||
int? maxLines,
|
||||
String? semanticsLabel,
|
||||
TextWidthBasis? textWidthBasis,
|
||||
Color? selectionColor,
|
||||
Key? key,
|
||||
}) =>
|
||||
RichTextBuilder(
|
||||
@@ -34,6 +73,17 @@ class $RichTextBuilderCWProxyImpl implements $RichTextBuilderComponentCWProxy {
|
||||
parser: parser ?? _value.parser,
|
||||
defaultStyle: defaultStyle ?? _value.defaultStyle,
|
||||
styles: styles ?? _value.styles,
|
||||
strutStyle: strutStyle ?? _value.strutStyle,
|
||||
textAlign: textAlign ?? _value.textAlign,
|
||||
textDirection: textDirection ?? _value.textDirection,
|
||||
locale: locale ?? _value.locale,
|
||||
softWrap: softWrap ?? _value.softWrap,
|
||||
overflow: overflow ?? _value.overflow,
|
||||
textScaleFactor: textScaleFactor ?? _value.textScaleFactor,
|
||||
maxLines: maxLines ?? _value.maxLines,
|
||||
semanticsLabel: semanticsLabel ?? _value.semanticsLabel,
|
||||
textWidthBasis: textWidthBasis ?? _value.textWidthBasis,
|
||||
selectionColor: selectionColor ?? _value.selectionColor,
|
||||
key: key ?? _value.key,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ class CardThemeExtensionImpl extends CardThemeExtension {
|
||||
radius: const BorderRadius.all(Radius.circular(12)),
|
||||
padding: const EdgeInsets.all(25),
|
||||
stroke: 1,
|
||||
backgroundColors: WyattColors.grayBgOpacityGradient,
|
||||
backgroundColors: MultiColor.single(WyattColors.light.withOpacity(0.04)),
|
||||
borderColors: WyattColors.grayGradient,
|
||||
titleStyle: theme.textTheme.titleLarge?.copyWith(
|
||||
fontSize: 26,
|
||||
|
||||
+97
-19
@@ -17,6 +17,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
|
||||
import 'package:wyatt_ui_kit/src/components/gradients/gradient_text_style.dart';
|
||||
import 'package:wyatt_ui_kit/src/core/design_system/colors.dart';
|
||||
|
||||
class RichTextBuilderThemeExtensionImpl extends RichTextBuilderThemeExtension {
|
||||
const RichTextBuilderThemeExtensionImpl({
|
||||
@@ -52,54 +53,131 @@ class RichTextBuilderThemeExtensionImpl extends RichTextBuilderThemeExtension {
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.8,
|
||||
),
|
||||
const MultiColor([
|
||||
Color(0xFF3C97FB),
|
||||
Color(0xFF436EF4),
|
||||
]),
|
||||
WyattColors.blueGradient,
|
||||
),
|
||||
'gradient-dark-blue': GradientTextStyle.from(
|
||||
theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.8,
|
||||
),
|
||||
WyattColors.darkBlueGradient,
|
||||
),
|
||||
'gradient-gray': GradientTextStyle.from(
|
||||
theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.8,
|
||||
),
|
||||
WyattColors.grayGradient,
|
||||
),
|
||||
'gradient-light-gray': GradientTextStyle.from(
|
||||
theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.8,
|
||||
),
|
||||
WyattColors.lightGrayGradient,
|
||||
),
|
||||
'gradient-light': GradientTextStyle.from(
|
||||
theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.8,
|
||||
),
|
||||
WyattColors.lightGradient,
|
||||
),
|
||||
'gradient-purple': GradientTextStyle.from(
|
||||
theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.8,
|
||||
),
|
||||
WyattColors.purpleGradient,
|
||||
),
|
||||
'gradient-red': GradientTextStyle.from(
|
||||
theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.8,
|
||||
),
|
||||
const MultiColor([
|
||||
Color(0xFFF44464),
|
||||
Color(0xFFF44464),
|
||||
]),
|
||||
WyattColors.redGradient,
|
||||
),
|
||||
'gradient-yellow': GradientTextStyle.from(
|
||||
theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.8,
|
||||
),
|
||||
WyattColors.yellowGradient,
|
||||
),
|
||||
'gradient-green': GradientTextStyle.from(
|
||||
theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
height: 1.8,
|
||||
),
|
||||
const MultiColor([
|
||||
Color(0xFF00D16C),
|
||||
Color(0xFF00D16C),
|
||||
]),
|
||||
WyattColors.greenGradient,
|
||||
),
|
||||
'blue': theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: const Color(0xFF3C97FB),
|
||||
color: WyattColors.blue1,
|
||||
height: 1.8,
|
||||
) ??
|
||||
const TextStyle(
|
||||
color: Color(0xFF3C97FB),
|
||||
color: WyattColors.blue1,
|
||||
),
|
||||
'red': theme.textTheme.bodyMedium?.copyWith(
|
||||
'dark-blue': theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: const Color(0xFFF44464),
|
||||
color: WyattColors.darkBlue1,
|
||||
height: 1.8,
|
||||
) ??
|
||||
const TextStyle(
|
||||
color: Color(0xFFF44464),
|
||||
color: WyattColors.darkBlue1,
|
||||
),
|
||||
'gray': theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: WyattColors.gray1,
|
||||
height: 1.8,
|
||||
) ??
|
||||
const TextStyle(
|
||||
color: WyattColors.gray1,
|
||||
),
|
||||
'green': theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: const Color(0xFF00D16C),
|
||||
color: WyattColors.green1,
|
||||
height: 1.8,
|
||||
) ??
|
||||
const TextStyle(
|
||||
color: Color(0xFF00D16C),
|
||||
color: WyattColors.green1,
|
||||
),
|
||||
'light': theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: WyattColors.light,
|
||||
height: 1.8,
|
||||
) ??
|
||||
const TextStyle(
|
||||
color: WyattColors.light,
|
||||
),
|
||||
'light-gray': theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: WyattColors.lightGray1,
|
||||
height: 1.8,
|
||||
) ??
|
||||
const TextStyle(
|
||||
color: WyattColors.lightGray1,
|
||||
),
|
||||
'purple': theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: WyattColors.purple1,
|
||||
height: 1.8,
|
||||
) ??
|
||||
const TextStyle(
|
||||
color: WyattColors.purple1,
|
||||
),
|
||||
'red': theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: WyattColors.red1,
|
||||
height: 1.8,
|
||||
) ??
|
||||
const TextStyle(color: WyattColors.red1),
|
||||
'yellow': theme.textTheme.bodyMedium?.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: WyattColors.yellow1,
|
||||
height: 1.8,
|
||||
) ??
|
||||
const TextStyle(color: WyattColors.yellow1),
|
||||
};
|
||||
}
|
||||
|
||||
+8
-8
@@ -35,7 +35,7 @@ class TextInputThemeExtensionImpl extends TextInputThemeExtension {
|
||||
normalStyle: TextInputStyle(
|
||||
radius: BorderRadius.circular(12),
|
||||
borderColors: const Color.fromRGBO(221, 224, 227, 1),
|
||||
labelStyle: theme.textTheme.labelLarge?.copyWith(
|
||||
labelStyle: theme.textTheme.labelMedium?.copyWith(
|
||||
color: const Color.fromRGBO(55, 65, 81, 1),
|
||||
),
|
||||
inputStyle: theme.textTheme.bodyMedium?.copyWith(
|
||||
@@ -45,7 +45,7 @@ class TextInputThemeExtensionImpl extends TextInputThemeExtension {
|
||||
focusedStyle: TextInputStyle(
|
||||
radius: BorderRadius.circular(12),
|
||||
borderColors: const Color.fromRGBO(60, 125, 251, 1),
|
||||
labelStyle: theme.textTheme.labelLarge?.copyWith(
|
||||
labelStyle: theme.textTheme.labelMedium?.copyWith(
|
||||
color: const Color.fromRGBO(55, 65, 81, 1),
|
||||
),
|
||||
inputStyle: theme.textTheme.bodyMedium?.copyWith(
|
||||
@@ -55,7 +55,7 @@ class TextInputThemeExtensionImpl extends TextInputThemeExtension {
|
||||
invalidStyle: TextInputStyle(
|
||||
radius: BorderRadius.circular(12),
|
||||
borderColors: const Color.fromRGBO(244, 68, 100, 1),
|
||||
labelStyle: theme.textTheme.labelLarge?.copyWith(
|
||||
labelStyle: theme.textTheme.labelMedium?.copyWith(
|
||||
color: const Color.fromRGBO(244, 68, 100, 1),
|
||||
),
|
||||
inputStyle: theme.textTheme.bodyMedium?.copyWith(
|
||||
@@ -65,7 +65,7 @@ class TextInputThemeExtensionImpl extends TextInputThemeExtension {
|
||||
disabledStyle: TextInputStyle(
|
||||
radius: BorderRadius.circular(12),
|
||||
borderColors: const Color.fromRGBO(229, 231, 235, 1),
|
||||
labelStyle: theme.textTheme.labelLarge?.copyWith(
|
||||
labelStyle: theme.textTheme.labelMedium?.copyWith(
|
||||
color: const Color.fromRGBO(156, 163, 175, 1),
|
||||
),
|
||||
inputStyle: theme.textTheme.bodyMedium?.copyWith(
|
||||
@@ -81,7 +81,7 @@ class TextInputThemeExtensionImpl extends TextInputThemeExtension {
|
||||
normalStyle: TextInputStyle(
|
||||
radius: BorderRadius.circular(12),
|
||||
borderColors: const Color.fromRGBO(96, 101, 106, 1),
|
||||
labelStyle: theme.textTheme.labelLarge?.copyWith(
|
||||
labelStyle: theme.textTheme.labelMedium?.copyWith(
|
||||
color: const Color.fromRGBO(204, 204, 204, 1),
|
||||
),
|
||||
inputStyle: theme.textTheme.bodyMedium?.copyWith(
|
||||
@@ -91,7 +91,7 @@ class TextInputThemeExtensionImpl extends TextInputThemeExtension {
|
||||
focusedStyle: TextInputStyle(
|
||||
radius: BorderRadius.circular(12),
|
||||
borderColors: const Color.fromRGBO(60, 125, 251, 1),
|
||||
labelStyle: theme.textTheme.labelLarge?.copyWith(
|
||||
labelStyle: theme.textTheme.labelMedium?.copyWith(
|
||||
color: const Color.fromRGBO(204, 204, 204, 1),
|
||||
),
|
||||
inputStyle: theme.textTheme.bodyMedium?.copyWith(
|
||||
@@ -101,7 +101,7 @@ class TextInputThemeExtensionImpl extends TextInputThemeExtension {
|
||||
invalidStyle: TextInputStyle(
|
||||
radius: BorderRadius.circular(12),
|
||||
borderColors: const Color.fromRGBO(244, 68, 100, 1),
|
||||
labelStyle: theme.textTheme.labelLarge?.copyWith(
|
||||
labelStyle: theme.textTheme.labelMedium?.copyWith(
|
||||
color: const Color.fromRGBO(244, 68, 100, 1),
|
||||
),
|
||||
inputStyle: theme.textTheme.bodyMedium?.copyWith(
|
||||
@@ -111,7 +111,7 @@ class TextInputThemeExtensionImpl extends TextInputThemeExtension {
|
||||
disabledStyle: TextInputStyle(
|
||||
radius: BorderRadius.circular(12),
|
||||
borderColors: const Color.fromRGBO(96, 101, 106, 1),
|
||||
labelStyle: theme.textTheme.labelLarge?.copyWith(
|
||||
labelStyle: theme.textTheme.labelMedium?.copyWith(
|
||||
color: const Color.fromRGBO(96, 101, 106, 1),
|
||||
),
|
||||
inputStyle: theme.textTheme.bodyMedium?.copyWith(
|
||||
|
||||
@@ -39,5 +39,6 @@ abstract class WyattComponentThemeData {
|
||||
portfolioCard: PortfolioCard(),
|
||||
quoteCard: QuoteCard(),
|
||||
skillCard: SkillCard(),
|
||||
pricingCard: PricingCard(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: wyatt_ui_kit
|
||||
description: UIKit and Design System used in Wyatt Studio.
|
||||
repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_kit
|
||||
version: 3.0.0
|
||||
version: 3.1.0
|
||||
|
||||
publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
|
||||
@@ -25,7 +25,7 @@ dependencies:
|
||||
version: ^2.0.1
|
||||
wyatt_ui_components:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.2.0
|
||||
version: ^0.2.2
|
||||
|
||||
dev_dependencies:
|
||||
build_runner: ^2.3.3
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
## 0.1.1
|
||||
|
||||
- **FEAT**(ui_layout-bloc_layout): proxy scaffold fields.
|
||||
|
||||
## 0.1.0+1
|
||||
|
||||
- Update a dependency to the latest release.
|
||||
|
||||
## 0.1.0
|
||||
|
||||
> Note: This release has breaking changes.
|
||||
|
||||
@@ -36,7 +36,7 @@ dependencies:
|
||||
|
||||
wyatt_ui_components:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.2.0
|
||||
version: ^0.2.2
|
||||
wyatt_component_copy_with_extension:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^2.0.1
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// Copyright (C) 2023 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
export './scaffold_fields_wrapper.dart';
|
||||
@@ -0,0 +1,244 @@
|
||||
// Copyright (C) 2023 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ScaffoldFieldsWrapper {
|
||||
ScaffoldFieldsWrapper({
|
||||
this.extendBody,
|
||||
this.extendBodyBehindAppBar,
|
||||
this.floatingActionButtonLocation,
|
||||
this.floatingActionButtonAnimator,
|
||||
this.persistentFooterButtons,
|
||||
this.persistentFooterAlignment,
|
||||
this.drawer,
|
||||
this.onDrawerChanged,
|
||||
this.endDrawer,
|
||||
this.onEndDrawerChanged,
|
||||
this.drawerScrimColor,
|
||||
this.backgroundColor,
|
||||
this.bottomSheet,
|
||||
this.resizeToAvoidBottomInset,
|
||||
this.primary,
|
||||
this.drawerDragStartBehavior,
|
||||
this.drawerEdgeDragWidth,
|
||||
this.drawerEnableOpenDragGesture,
|
||||
this.endDrawerEnableOpenDragGesture,
|
||||
this.restorationId,
|
||||
});
|
||||
|
||||
final bool? extendBody;
|
||||
|
||||
/// If true, and an appBar is specified, then the height of the body is
|
||||
/// extended to include the height of the app bar and the top of the body
|
||||
/// is aligned with the top of the app bar.
|
||||
///
|
||||
/// This is useful if the app bar's [AppBar.backgroundColor] is not
|
||||
/// completely opaque.
|
||||
///
|
||||
/// This property is false by default. It must not be null.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [extendBody], which extends the height of the body to the bottom
|
||||
/// of the scaffold.
|
||||
final bool? extendBodyBehindAppBar;
|
||||
|
||||
/// Responsible for determining where the floatingActionButton should go.
|
||||
///
|
||||
/// If null, the [ScaffoldState] will use
|
||||
/// the default location, [FloatingActionButtonLocation.endFloat].
|
||||
final FloatingActionButtonLocation? floatingActionButtonLocation;
|
||||
|
||||
/// Animator to move the floatingActionButton to a
|
||||
/// new [floatingActionButtonLocation].
|
||||
///
|
||||
/// If null, the [ScaffoldState] will use the default animator,
|
||||
/// [FloatingActionButtonAnimator.scaling].
|
||||
final FloatingActionButtonAnimator? floatingActionButtonAnimator;
|
||||
|
||||
/// A set of buttons that are displayed at the bottom of the scaffold.
|
||||
///
|
||||
/// Typically this is a list of [TextButton] widgets. These buttons are
|
||||
/// persistently visible, even if the body of the scaffold scrolls.
|
||||
///
|
||||
/// These widgets will be wrapped in an [OverflowBar].
|
||||
///
|
||||
/// The [persistentFooterButtons] are rendered above the
|
||||
/// bottomNavigationBar but below the body.
|
||||
final List<Widget>? persistentFooterButtons;
|
||||
|
||||
/// The alignment of the [persistentFooterButtons] inside the [OverflowBar].
|
||||
///
|
||||
/// Defaults to [AlignmentDirectional.centerEnd].
|
||||
final AlignmentDirectional? persistentFooterAlignment;
|
||||
|
||||
/// A panel displayed to the side of the body, often hidden on mobile
|
||||
/// devices. Swipes in from either left-to-right ([TextDirection.ltr]) or
|
||||
/// right-to-left ([TextDirection.rtl])
|
||||
///
|
||||
/// Typically a [Drawer].
|
||||
///
|
||||
/// To open the drawer, use the [ScaffoldState.openDrawer] function.
|
||||
///
|
||||
/// To close the drawer, use either [ScaffoldState.closeDrawer],
|
||||
/// [Navigator.pop] or press the escape key on the keyboard.
|
||||
///
|
||||
/// {@tool dartpad}
|
||||
/// To disable the drawer edge swipe on mobile, set the
|
||||
/// [Scaffold.drawerEnableOpenDragGesture] to false. Then, use
|
||||
/// [ScaffoldState.openDrawer] to open the drawer and [Navigator.pop] to close
|
||||
/// it.
|
||||
///
|
||||
/// ** See code in examples/api/lib/material/scaffold/scaffold.drawer.0.dart **
|
||||
/// {@end-tool}
|
||||
final Widget? drawer;
|
||||
|
||||
/// Optional callback that is called when the [Scaffold.drawer]
|
||||
/// is opened or closed.
|
||||
final DrawerCallback? onDrawerChanged;
|
||||
|
||||
/// A panel displayed to the side of the body, often hidden on mobile
|
||||
/// devices. Swipes in from right-to-left ([TextDirection.ltr]) or
|
||||
/// left-to-right ([TextDirection.rtl])
|
||||
///
|
||||
/// Typically a [Drawer].
|
||||
///
|
||||
/// To open the drawer, use the [ScaffoldState.openEndDrawer] function.
|
||||
///
|
||||
/// To close the drawer, use either [ScaffoldState.closeEndDrawer],
|
||||
/// [Navigator.pop]
|
||||
/// or press the escape key on the keyboard.
|
||||
///
|
||||
/// {@tool dartpad}
|
||||
/// To disable the drawer edge swipe, set the
|
||||
/// [Scaffold.endDrawerEnableOpenDragGesture] to false. Then, use
|
||||
/// [ScaffoldState.openEndDrawer] to open the drawer and [Navigator.pop] to
|
||||
/// close it.
|
||||
///
|
||||
/// ** See code in examples/api/lib/material/scaffold/scaffold.end_drawer.0.dart **
|
||||
/// {@end-tool}
|
||||
final Widget? endDrawer;
|
||||
|
||||
/// Optional callback that is called when the [Scaffold.endDrawer]
|
||||
/// is opened or closed.
|
||||
final DrawerCallback? onEndDrawerChanged;
|
||||
|
||||
/// The color to use for the scrim that obscures primary content while
|
||||
/// a drawer is open.
|
||||
///
|
||||
/// If this is null, then [DrawerThemeData.scrimColor] is used. If that
|
||||
/// is also null, then it defaults to [Colors.black54].
|
||||
final Color? drawerScrimColor;
|
||||
|
||||
/// The color of the [Material] widget that underlies the entire Scaffold.
|
||||
///
|
||||
/// The theme's [ThemeData.scaffoldBackgroundColor] by default.
|
||||
final Color? backgroundColor;
|
||||
|
||||
/// The persistent bottom sheet to display.
|
||||
///
|
||||
/// A persistent bottom sheet shows information that supplements the primary
|
||||
/// content of the app. A persistent bottom sheet remains visible even when
|
||||
/// the user interacts with other parts of the app.
|
||||
///
|
||||
/// A closely related widget is a modal bottom sheet, which is an alternative
|
||||
/// to a menu or a dialog and prevents the user from interacting with the rest
|
||||
/// of the app. Modal bottom sheets can be created and displayed with the
|
||||
/// [showModalBottomSheet] function.
|
||||
///
|
||||
/// Unlike the persistent bottom sheet displayed by [showBottomSheet]
|
||||
/// this bottom sheet is not a [LocalHistoryEntry] and cannot be dismissed
|
||||
/// with the scaffold appbar's back button.
|
||||
///
|
||||
/// If a persistent bottom sheet created with [showBottomSheet] is already
|
||||
/// visible, it must be closed before building the Scaffold with a new
|
||||
/// [bottomSheet].
|
||||
///
|
||||
/// The value of [bottomSheet] can be any widget at all. It's unlikely to
|
||||
/// actually be a [BottomSheet], which is used by the implementations of
|
||||
/// [showBottomSheet] and [showModalBottomSheet]. Typically it's a widget
|
||||
/// that includes [Material].
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [showBottomSheet], which displays a bottom sheet as a route that can
|
||||
/// be dismissed with the scaffold's back button.
|
||||
/// * [showModalBottomSheet], which displays a modal bottom sheet.
|
||||
/// * [BottomSheetThemeData], which can be used to customize the default
|
||||
/// bottom sheet property values when using a [BottomSheet].
|
||||
final Widget? bottomSheet;
|
||||
|
||||
/// If true the body and the scaffold's floating widgets should size
|
||||
/// themselves to avoid the onscreen keyboard whose height is defined by the
|
||||
/// ambient [MediaQuery]'s [MediaQueryData.viewInsets] `bottom` property.
|
||||
///
|
||||
/// For example, if there is an onscreen keyboard displayed above the
|
||||
/// scaffold, the body can be resized to avoid overlapping the keyboard, which
|
||||
/// prevents widgets inside the body from being obscured by the keyboard.
|
||||
///
|
||||
/// Defaults to true.
|
||||
final bool? resizeToAvoidBottomInset;
|
||||
|
||||
/// Whether this scaffold is being displayed at the top of the screen.
|
||||
///
|
||||
/// If true then the height of the appBar will be extended by the height
|
||||
/// of the screen's status bar, i.e. the top padding for [MediaQuery].
|
||||
///
|
||||
/// The default value of this property, like the default value of
|
||||
/// [AppBar.primary], is true.
|
||||
final bool? primary;
|
||||
|
||||
/// {@macro flutter.material.DrawerController.dragStartBehavior}
|
||||
final DragStartBehavior? drawerDragStartBehavior;
|
||||
|
||||
/// The width of the area within which a horizontal swipe will open the
|
||||
/// drawer.
|
||||
///
|
||||
/// By default, the value used is 20.0 added to the padding edge of
|
||||
/// `MediaQuery.of(context).padding` that corresponds to the surrounding
|
||||
/// [TextDirection]. This ensures that the drag area for notched devices is
|
||||
/// not obscured. For example, if `TextDirection.of(context)` is set to
|
||||
/// [TextDirection.ltr], 20.0 will be added to
|
||||
/// `MediaQuery.of(context).padding.left`.
|
||||
final double? drawerEdgeDragWidth;
|
||||
|
||||
/// Determines if the [Scaffold.drawer] can be opened with a drag
|
||||
/// gesture on mobile.
|
||||
///
|
||||
/// On desktop platforms, the drawer is not draggable.
|
||||
///
|
||||
/// By default, the drag gesture is enabled on mobile.
|
||||
final bool? drawerEnableOpenDragGesture;
|
||||
|
||||
/// Determines if the [Scaffold.endDrawer] can be opened with a
|
||||
/// gesture on mobile.
|
||||
///
|
||||
/// On desktop platforms, the drawer is not draggable.
|
||||
///
|
||||
/// By default, the drag gesture is enabled on mobile.
|
||||
final bool? endDrawerEnableOpenDragGesture;
|
||||
|
||||
/// Restoration ID to save and restore the state of the [Scaffold].
|
||||
///
|
||||
/// If it is non-null, the scaffold will persist and restore whether the
|
||||
/// [drawer] and [endDrawer] was open or closed.
|
||||
///
|
||||
/// The state of this widget is persisted in a [RestorationBucket] claimed
|
||||
/// from the surrounding [RestorationScope] using the provided restoration ID.
|
||||
final String? restorationId;
|
||||
}
|
||||
+35
@@ -14,8 +14,10 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
|
||||
import 'package:wyatt_ui_layout/src/core/scaffold_fields_wrapper.dart';
|
||||
import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart';
|
||||
|
||||
/// {@template bottom_navigation_bar_layout}
|
||||
@@ -27,6 +29,7 @@ class BottomNavigationBarLayout extends StructuralLayout {
|
||||
const BottomNavigationBarLayout({
|
||||
required this.body,
|
||||
this.custom,
|
||||
this.scaffoldFieldsWrapper,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@@ -38,6 +41,8 @@ class BottomNavigationBarLayout extends StructuralLayout {
|
||||
final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)?
|
||||
custom;
|
||||
|
||||
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Scaffold(
|
||||
body: body,
|
||||
@@ -45,5 +50,35 @@ class BottomNavigationBarLayout extends StructuralLayout {
|
||||
context.components.bottomNavigationBar,
|
||||
) ??
|
||||
context.components.bottomNavigationBar,
|
||||
floatingActionButtonLocation:
|
||||
scaffoldFieldsWrapper?.floatingActionButtonLocation,
|
||||
floatingActionButtonAnimator:
|
||||
scaffoldFieldsWrapper?.floatingActionButtonAnimator,
|
||||
persistentFooterButtons: scaffoldFieldsWrapper?.persistentFooterButtons,
|
||||
persistentFooterAlignment:
|
||||
scaffoldFieldsWrapper?.persistentFooterAlignment ??
|
||||
AlignmentDirectional.centerEnd,
|
||||
drawer: scaffoldFieldsWrapper?.drawer,
|
||||
onDrawerChanged: scaffoldFieldsWrapper?.onDrawerChanged,
|
||||
endDrawer: scaffoldFieldsWrapper?.endDrawer,
|
||||
onEndDrawerChanged: scaffoldFieldsWrapper?.onEndDrawerChanged,
|
||||
bottomSheet: scaffoldFieldsWrapper?.bottomSheet,
|
||||
backgroundColor: scaffoldFieldsWrapper?.backgroundColor,
|
||||
resizeToAvoidBottomInset:
|
||||
scaffoldFieldsWrapper?.resizeToAvoidBottomInset,
|
||||
primary: scaffoldFieldsWrapper?.primary ?? true,
|
||||
drawerDragStartBehavior:
|
||||
scaffoldFieldsWrapper?.drawerDragStartBehavior ??
|
||||
DragStartBehavior.start,
|
||||
extendBody: scaffoldFieldsWrapper?.extendBody ?? false,
|
||||
extendBodyBehindAppBar:
|
||||
scaffoldFieldsWrapper?.extendBodyBehindAppBar ?? false,
|
||||
drawerScrimColor: scaffoldFieldsWrapper?.drawerScrimColor,
|
||||
drawerEdgeDragWidth: scaffoldFieldsWrapper?.drawerEdgeDragWidth,
|
||||
drawerEnableOpenDragGesture:
|
||||
scaffoldFieldsWrapper?.drawerEnableOpenDragGesture ?? true,
|
||||
endDrawerEnableOpenDragGesture:
|
||||
scaffoldFieldsWrapper?.endDrawerEnableOpenDragGesture ?? true,
|
||||
restorationId: scaffoldFieldsWrapper?.restorationId,
|
||||
);
|
||||
}
|
||||
|
||||
+45
-1
@@ -14,8 +14,10 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
|
||||
import 'package:wyatt_ui_layout/src/core/scaffold_fields_wrapper.dart';
|
||||
import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart';
|
||||
|
||||
/// {@template frame_layout}
|
||||
@@ -33,7 +35,9 @@ class FrameLayout extends StructuralLayout {
|
||||
required this.body,
|
||||
this.customAppBar,
|
||||
this.customBottomNavBar,
|
||||
this.customFloatingActionButton,
|
||||
this.height = 60,
|
||||
this.scaffoldFieldsWrapper,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@@ -44,12 +48,19 @@ class FrameLayout extends StructuralLayout {
|
||||
final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)?
|
||||
customBottomNavBar;
|
||||
|
||||
/// An optional function that can be used to customize the
|
||||
/// floating action button
|
||||
final FloatingActionButtonComponent? Function(FloatingActionButtonComponent?)?
|
||||
customFloatingActionButton;
|
||||
|
||||
/// The main content of the layout.
|
||||
final Widget body;
|
||||
|
||||
/// The height of the top app bar.
|
||||
final double height;
|
||||
|
||||
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Scaffold(
|
||||
appBar: (customAppBar?.call(context.components.topAppBar) != null ||
|
||||
@@ -60,9 +71,42 @@ class FrameLayout extends StructuralLayout {
|
||||
context.components.topAppBar!,
|
||||
)
|
||||
: null,
|
||||
body: body,
|
||||
floatingActionButton: customFloatingActionButton
|
||||
?.call(context.components.floatingActionButton) ??
|
||||
context.components.floatingActionButton,
|
||||
bottomNavigationBar:
|
||||
customBottomNavBar?.call(context.components.bottomNavigationBar) ??
|
||||
context.components.bottomNavigationBar,
|
||||
body: body,
|
||||
floatingActionButtonLocation:
|
||||
scaffoldFieldsWrapper?.floatingActionButtonLocation,
|
||||
floatingActionButtonAnimator:
|
||||
scaffoldFieldsWrapper?.floatingActionButtonAnimator,
|
||||
persistentFooterButtons: scaffoldFieldsWrapper?.persistentFooterButtons,
|
||||
persistentFooterAlignment:
|
||||
scaffoldFieldsWrapper?.persistentFooterAlignment ??
|
||||
AlignmentDirectional.centerEnd,
|
||||
drawer: scaffoldFieldsWrapper?.drawer,
|
||||
onDrawerChanged: scaffoldFieldsWrapper?.onDrawerChanged,
|
||||
endDrawer: scaffoldFieldsWrapper?.endDrawer,
|
||||
onEndDrawerChanged: scaffoldFieldsWrapper?.onEndDrawerChanged,
|
||||
bottomSheet: scaffoldFieldsWrapper?.bottomSheet,
|
||||
backgroundColor: scaffoldFieldsWrapper?.backgroundColor,
|
||||
resizeToAvoidBottomInset:
|
||||
scaffoldFieldsWrapper?.resizeToAvoidBottomInset,
|
||||
primary: scaffoldFieldsWrapper?.primary ?? true,
|
||||
drawerDragStartBehavior:
|
||||
scaffoldFieldsWrapper?.drawerDragStartBehavior ??
|
||||
DragStartBehavior.start,
|
||||
extendBody: scaffoldFieldsWrapper?.extendBody ?? false,
|
||||
extendBodyBehindAppBar:
|
||||
scaffoldFieldsWrapper?.extendBodyBehindAppBar ?? false,
|
||||
drawerScrimColor: scaffoldFieldsWrapper?.drawerScrimColor,
|
||||
drawerEdgeDragWidth: scaffoldFieldsWrapper?.drawerEdgeDragWidth,
|
||||
drawerEnableOpenDragGesture:
|
||||
scaffoldFieldsWrapper?.drawerEnableOpenDragGesture ?? true,
|
||||
endDrawerEnableOpenDragGesture:
|
||||
scaffoldFieldsWrapper?.endDrawerEnableOpenDragGesture ?? true,
|
||||
restorationId: scaffoldFieldsWrapper?.restorationId,
|
||||
);
|
||||
}
|
||||
|
||||
+35
@@ -14,8 +14,10 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
|
||||
import 'package:wyatt_ui_layout/src/core/scaffold_fields_wrapper.dart';
|
||||
import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart';
|
||||
|
||||
/// {@template top_bar_layout}
|
||||
@@ -37,6 +39,7 @@ abstract class TopBarLayout<T extends TopBarComponent>
|
||||
required this.body,
|
||||
this.custom,
|
||||
this.height = 60,
|
||||
this.scaffoldFieldsWrapper,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@@ -54,6 +57,8 @@ abstract class TopBarLayout<T extends TopBarComponent>
|
||||
/// Returns the top bar component for the given [BuildContext].
|
||||
T? child(BuildContext context);
|
||||
|
||||
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Scaffold(
|
||||
appBar: (custom?.call(child(context)) != null || child(context) != null)
|
||||
@@ -63,6 +68,36 @@ abstract class TopBarLayout<T extends TopBarComponent>
|
||||
)
|
||||
: null,
|
||||
body: body,
|
||||
floatingActionButtonLocation:
|
||||
scaffoldFieldsWrapper?.floatingActionButtonLocation,
|
||||
floatingActionButtonAnimator:
|
||||
scaffoldFieldsWrapper?.floatingActionButtonAnimator,
|
||||
persistentFooterButtons: scaffoldFieldsWrapper?.persistentFooterButtons,
|
||||
persistentFooterAlignment:
|
||||
scaffoldFieldsWrapper?.persistentFooterAlignment ??
|
||||
AlignmentDirectional.centerEnd,
|
||||
drawer: scaffoldFieldsWrapper?.drawer,
|
||||
onDrawerChanged: scaffoldFieldsWrapper?.onDrawerChanged,
|
||||
endDrawer: scaffoldFieldsWrapper?.endDrawer,
|
||||
onEndDrawerChanged: scaffoldFieldsWrapper?.onEndDrawerChanged,
|
||||
bottomSheet: scaffoldFieldsWrapper?.bottomSheet,
|
||||
backgroundColor: scaffoldFieldsWrapper?.backgroundColor,
|
||||
resizeToAvoidBottomInset:
|
||||
scaffoldFieldsWrapper?.resizeToAvoidBottomInset,
|
||||
primary: scaffoldFieldsWrapper?.primary ?? true,
|
||||
drawerDragStartBehavior:
|
||||
scaffoldFieldsWrapper?.drawerDragStartBehavior ??
|
||||
DragStartBehavior.start,
|
||||
extendBody: scaffoldFieldsWrapper?.extendBody ?? false,
|
||||
extendBodyBehindAppBar:
|
||||
scaffoldFieldsWrapper?.extendBodyBehindAppBar ?? false,
|
||||
drawerScrimColor: scaffoldFieldsWrapper?.drawerScrimColor,
|
||||
drawerEdgeDragWidth: scaffoldFieldsWrapper?.drawerEdgeDragWidth,
|
||||
drawerEnableOpenDragGesture:
|
||||
scaffoldFieldsWrapper?.drawerEnableOpenDragGesture ?? true,
|
||||
endDrawerEnableOpenDragGesture:
|
||||
scaffoldFieldsWrapper?.endDrawerEnableOpenDragGesture ?? true,
|
||||
restorationId: scaffoldFieldsWrapper?.restorationId,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,4 +14,5 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
export 'presentation/presentation.dart';
|
||||
export './core/core.dart';
|
||||
export './presentation/presentation.dart';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: wyatt_ui_layout
|
||||
description: Main layouts to help you build your application views.
|
||||
repository: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_ui_layout
|
||||
version: 0.1.0
|
||||
version: 0.1.1
|
||||
|
||||
publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
|
||||
@@ -14,7 +14,7 @@ dependencies:
|
||||
|
||||
wyatt_ui_components:
|
||||
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
|
||||
version: ^0.2.0
|
||||
version: ^0.2.2
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test: { sdk: flutter }
|
||||
|
||||
Reference in New Issue
Block a user