From f5f4ade9d59b965fff943122561071237d1df1c3 Mon Sep 17 00:00:00 2001 From: Bossanyi Tibor Date: Wed, 2 Dec 2020 16:32:54 +0100 Subject: [PATCH] WT 1.1.0+35 design1 --- lib/helper/database.dart | 6 +- lib/repository/workout_tree_repository.dart | 4 +- lib/widgets/menu_page_widget.dart | 74 +++++++++++++-------- pubspec.lock | 16 ++--- pubspec.yaml | 2 +- test/widget_test.db.dart | 42 ++++++++++++ test/widget_test.login.dart | 2 +- 7 files changed, 104 insertions(+), 42 deletions(-) create mode 100644 test/widget_test.db.dart diff --git a/lib/helper/database.dart b/lib/helper/database.dart index 0d29c8a..4e807dd 100644 --- a/lib/helper/database.dart +++ b/lib/helper/database.dart @@ -29,7 +29,11 @@ class DB { }); } - Future closeDb() async => this._db.close(); + Future closeDb() async { + if ( _db != null ) { + this._db.close(); + } + } Database getDB() => this._db; } diff --git a/lib/repository/workout_tree_repository.dart b/lib/repository/workout_tree_repository.dart index 4b67040..009bf9d 100644 --- a/lib/repository/workout_tree_repository.dart +++ b/lib/repository/workout_tree_repository.dart @@ -66,7 +66,7 @@ class WorkoutTreeRepository { treeName, assetImage, Colors.white, - 20, + 30, false, 0, null, @@ -87,7 +87,7 @@ class WorkoutTreeRepository { bool is1RM = this.isParent1RM(exerciseType.treeId); exerciseType.is1RM = is1RM; this.tree[exerciseType.name] = WorkoutMenuTree(exerciseType.exerciseTypeId, exerciseType.treeId, exerciseTypeName, assetImage, - Colors.white, 16, true, exerciseType.exerciseTypeId, exerciseType, exerciseType.base, is1RM, exerciseType.name); + Colors.white, 24, true, exerciseType.exerciseTypeId, exerciseType, exerciseType.base, is1RM, exerciseType.name); }); Cache().setWorkoutMenuTree(tree); diff --git a/lib/widgets/menu_page_widget.dart b/lib/widgets/menu_page_widget.dart index 28da4eb..6e7d74d 100644 --- a/lib/widgets/menu_page_widget.dart +++ b/lib/widgets/menu_page_widget.dart @@ -24,11 +24,14 @@ class MenuPageWidget extends StatelessWidget with Trans { Widget build(BuildContext context) { MenuBloc menuBloc = BlocProvider.of(context); setContext(context); + double cWidth = MediaQuery.of(context).size.width; + double cHeight = MediaQuery.of(context).size.height; - return CustomScrollView(scrollDirection: Axis.vertical, slivers: [buildMenuColumn(parent, context, menuBloc)]); + return CustomScrollView( + scrollDirection: Axis.vertical, slivers: [buildMenuColumn(parent, context, menuBloc, cWidth, cHeight)]); } - SliverList buildMenuColumn(int parent, BuildContext context, MenuBloc menuBloc) { + SliverGrid buildMenuColumn(int parent, BuildContext context, MenuBloc menuBloc, double cWidth, double cHeight) { final List _columnChildren = List(); if (context != null) { @@ -54,27 +57,28 @@ class MenuPageWidget extends StatelessWidget with Trans { menuBloc.menuTreeRepository.getBranch(menuBloc.parent).forEach((treeName, value) { WorkoutMenuTree workoutTree = value as WorkoutMenuTree; _columnChildren.add(Container( - padding: EdgeInsets.only(top: 16.0), + padding: EdgeInsets.only(top: 15.0), child: Center( child: Stack(alignment: Alignment.bottomLeft, //clipBehavior: Clip.antiAliasWithSaveLayer, children: [ FlatButton( - child: badgedIcon(workoutTree), + child: badgedIcon(workoutTree, cWidth, cHeight), padding: EdgeInsets.only(left: 0.0, bottom: 0), shape: getShape(workoutTree), onPressed: () => menuClick(workoutTree, menuBloc, context), ), Positioned( - top: workoutTree.name.length > 20 ? 130 : 145, - left: 5, + top: workoutTree.name.length > 15 ? + workoutTree.fontSize > 25 ? 130 : 140 : + workoutTree.fontSize > 25 ? 165 : 175, + left: 8, child: Container( - height: 300, + height: cWidth * .95, width: 280, child: InkWell( onTap: () => menuClick(workoutTree, menuBloc, context), - child: Text( - " " + workoutTree.name, + child: Text(workoutTree.name, maxLines: 2, style: GoogleFonts.archivoBlack( color: workoutTree.color, @@ -89,7 +93,14 @@ class MenuPageWidget extends StatelessWidget with Trans { ])))); }); - SliverList sliverList = SliverList(delegate: SliverChildListDelegate(_columnChildren)); + SliverGrid sliverList = SliverGrid( + delegate: SliverChildListDelegate(_columnChildren), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 1, + mainAxisSpacing: 8.0, + crossAxisSpacing: 10.0, + childAspectRatio: cWidth > 375 ? 1.8 : 2.0, + )); return sliverList; } @@ -103,7 +114,8 @@ class MenuPageWidget extends StatelessWidget with Trans { if (Cache().userLoggedIn == null) { Scaffold.of(context).showSnackBar(SnackBar( backgroundColor: Colors.orange, - content: Text(AppLocalizations.of(context).translate('Please log in'), style: TextStyle(color: Colors.white)))); + content: + Text(AppLocalizations.of(context).translate('Please log in'), style: TextStyle(color: Colors.white)))); } else { if (workoutTree.exerciseType.name == "Custom" && Cache().userLoggedIn.admin == 1) { Navigator.of(context).pushNamed('exerciseCustomPage', arguments: workoutTree.exerciseType); @@ -119,27 +131,31 @@ class MenuPageWidget extends StatelessWidget with Trans { dynamic returnCode = (base == true) ? RoundedRectangleBorder( side: BorderSide(width: 4, color: Colors.orangeAccent), - ) - : null; + borderRadius: BorderRadius.all(Radius.circular(12.0))) + : RoundedRectangleBorder( + side: BorderSide(width: 1, color: Colors.transparent), + borderRadius: BorderRadius.all(Radius.circular(8.0))); return returnCode; } - dynamic _getButtonImage(WorkoutMenuTree workoutTree) { + dynamic _getButtonImage(WorkoutMenuTree workoutTree, double cWidth, double cHeight) { dynamic image; try { - image = Image.asset( - workoutTree.imageName, - height: 180, - errorBuilder: (context, error, stackTrace) { - String url = Cache.mediaUrl + 'images/' + workoutTree.imageName.substring(11); - Widget image = FadeInImage.assetNetwork( - placeholder: 'asset/image/dots.gif', - image: url, - height: 180, - ); - return image; - }, - ); + image = ClipRRect( + borderRadius: BorderRadius.circular(12.0), + child: Image.asset( + workoutTree.imageName, + height: cHeight * 0.85, + errorBuilder: (context, error, stackTrace) { + String url = Cache.mediaUrl + 'images/' + workoutTree.imageName.substring(11); + Widget image = FadeInImage.assetNetwork( + placeholder: 'asset/image/dots.gif', + image: url, + height: 180, + ); + return image; + }, + )); } on Exception catch (_) { String url = Cache.mediaUrl + '/images/' + workoutTree.imageName; image = FadeInImage.assetNetwork( @@ -152,7 +168,7 @@ class MenuPageWidget extends StatelessWidget with Trans { return image; } - Widget badgedIcon(WorkoutMenuTree workoutMenuTree) { + Widget badgedIcon(WorkoutMenuTree workoutMenuTree, double cWidth, double cHeight) { String badgeKey = workoutMenuTree.nameEnglish; bool show = Cache().getBadges()[badgeKey] != null; int counter = Cache().getBadges()[badgeKey] != null ? Cache().getBadges()[badgeKey] : 0; @@ -168,7 +184,7 @@ class MenuPageWidget extends StatelessWidget with Trans { color: Colors.white, fontSize: 16, )), - child: _getButtonImage(workoutMenuTree), + child: _getButtonImage(workoutMenuTree, cWidth, cHeight), ); } } diff --git a/pubspec.lock b/pubspec.lock index dd9d3ca..59d60a8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -259,7 +259,7 @@ packages: name: firebase_auth url: "https://pub.dartlang.org" source: hosted - version: "0.18.3" + version: "0.18.3+1" firebase_auth_platform_interface: dependency: transitive description: @@ -273,28 +273,28 @@ packages: name: firebase_auth_web url: "https://pub.dartlang.org" source: hosted - version: "0.3.2" + version: "0.3.2+1" firebase_core: dependency: "direct main" description: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "0.5.2" + version: "0.5.2+1" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "0.2.1" + version: "0.2.1+1" firebase_messaging: dependency: "direct main" description: @@ -389,7 +389,7 @@ packages: name: freezed url: "https://pub.dartlang.org" source: hosted - version: "0.12.2" + version: "0.12.3" freezed_annotation: dependency: transitive description: @@ -436,7 +436,7 @@ packages: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.12.1" + version: "0.12.2" http_multi_server: dependency: transitive description: @@ -555,7 +555,7 @@ packages: name: node_interop url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" node_io: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 0714bc9..8bf9eca 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.1.2+34 +version: 1.1.2+35 environment: sdk: ">=2.10.0 <3.0.0" diff --git a/test/widget_test.db.dart b/test/widget_test.db.dart new file mode 100644 index 0000000..49fabf5 --- /dev/null +++ b/test/widget_test.db.dart @@ -0,0 +1,42 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:aitrainer_app/bloc/login_form_bloc.dart'; +import 'package:aitrainer_app/helper/database.dart'; +import 'package:aitrainer_app/library_keys.dart'; +import 'package:aitrainer_app/localization/app_localization.dart'; +import 'package:aitrainer_app/model/user.dart'; +import 'package:aitrainer_app/repository/user_repository.dart'; +import 'package:aitrainer_app/util/common.dart'; +import 'package:aitrainer_app/view/login.dart'; +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_form_bloc/flutter_form_bloc.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; + +void main() { + group('SQFLite', () { + setUp(() async { + await DB().initDb(); + }); + + tearDown(() async{ + await DB().closeDb(); + }); + + testWidgets('Test database table', (WidgetTester tester) async { + var result = await DB().getDB().rawQuery('SELECT * FROM Customer'); + expect(result, [ + {'col1': 2, 'col2': 2} + ]); + }); + + + }); +} diff --git a/test/widget_test.login.dart b/test/widget_test.login.dart index ac7cbd9..c658ba3 100644 --- a/test/widget_test.login.dart +++ b/test/widget_test.login.dart @@ -69,7 +69,7 @@ void main() { }); tearDown(() { - loginBloc.close(); + //loginBloc.close(); }); testWidgets('Display login page', (WidgetTester tester) async {