From dcf08233766bfa65b02b6a8ce953cda6ed29bd42 Mon Sep 17 00:00:00 2001 From: Marcin Stepnowski Date: Fri, 19 Jul 2024 09:33:14 +0200 Subject: [PATCH 01/40] Update gradle plugins --- android/app/build.gradle | 23 ++++++++--------------- android/build.gradle | 19 ++----------------- android/settings.gradle | 32 ++++++++++++++++++++++++-------- 3 files changed, 34 insertions(+), 40 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 1bb8760..43c1aab 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,3 +1,11 @@ +plugins { + id "com.android.application" + id "dev.flutter.flutter-gradle-plugin" + id "org.jetbrains.kotlin.android" + id "com.google.gms.google-services" + id "com.google.firebase.crashlytics" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -12,11 +20,6 @@ if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -27,11 +30,6 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'com.google.gms.google-services' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { compileSdkVersion 34 @@ -73,8 +71,3 @@ android { flutter { source '../..' } - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} -apply plugin: 'com.google.firebase.crashlytics' \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 342ce6b..b42eb3a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,22 +1,7 @@ -buildscript { - ext.kotlin_version = '1.7.20' - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:4.2.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.google.gms:google-services:4.3.5' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.1' - } -} - allprojects { repositories { google() - jcenter() + mavenCentral() } } @@ -26,6 +11,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/android/settings.gradle b/android/settings.gradle index 44e62bc..57a346d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,11 +1,27 @@ -include ':app' +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.4.2" apply false + id "org.jetbrains.kotlin.android" version "1.7.20" apply false + id "com.google.gms.google-services" version "4.4.0" apply false + id "com.google.firebase.crashlytics" version "2.9.9" apply false +} + +include ":app" From 7f7a3711cfe5a4ef5ea2225cabff2eee3d53750b Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Thu, 25 Jul 2024 13:29:24 +0200 Subject: [PATCH 02/40] feature85/company-page --- assets/info.svg | 3 + assets/radio_button_unchecked.svg | 3 + assets/task_alt.svg | 3 + lib/pages/detail/detail.dart | 490 ++++++++++++++++++++++++------ pubspec.lock | 404 ++++++++++++++---------- pubspec.yaml | 2 + 6 files changed, 664 insertions(+), 241 deletions(-) create mode 100644 assets/info.svg create mode 100644 assets/radio_button_unchecked.svg create mode 100644 assets/task_alt.svg diff --git a/assets/info.svg b/assets/info.svg new file mode 100644 index 0000000..bd97063 --- /dev/null +++ b/assets/info.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/radio_button_unchecked.svg b/assets/radio_button_unchecked.svg new file mode 100644 index 0000000..45af45a --- /dev/null +++ b/assets/radio_button_unchecked.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/task_alt.svg b/assets/task_alt.svg new file mode 100644 index 0000000..75cbab4 --- /dev/null +++ b/assets/task_alt.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index c113ea9..905804c 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -1,8 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:http/retry.dart'; +import 'package:pola_flutter/models/company.dart'; +import 'package:syncfusion_flutter_gauges/gauges.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; import 'package:pola_flutter/models/brand.dart'; import 'package:pola_flutter/models/search_result.dart'; -import 'package:pola_flutter/ui/progress_indicator_text.dart'; import 'package:url_launcher/url_launcher.dart'; import 'detail_lidl.dart'; @@ -11,6 +15,19 @@ class DetailPage extends StatelessWidget { DetailPage({Key? key, required this.searchResult}) : super(key: key); final SearchResult searchResult; + final PolaAnalytics _analytics = PolaAnalytics.instance(); + + void _handleReadMoreClick(BuildContext context, String? url) { + if (url == null) return; + final Uri? uri = Uri.tryParse(url); + if (uri == null) return; + + _analytics.readMore(searchResult, url); + launchUrl( + uri, + mode: LaunchMode.externalApplication, + ); + } @override Widget build(BuildContext context) { @@ -19,31 +36,76 @@ class DetailPage extends StatelessWidget { } final company = searchResult.companies?.first; + final score = company?.plScore ?? 0; + return Scaffold( backgroundColor: Colors.white, appBar: AppBar( title: Text(searchResult.name ?? ""), - leading: new IconButton( - icon: new Icon(Icons.arrow_back), + leading: IconButton( + icon: Icon(Icons.arrow_back), onPressed: () => Navigator.of(context).pop(), ), ), body: SafeArea( - child: SingleChildScrollView( + child: SingleChildScrollView( child: Column( children: [ + SizedBox(height: 16.0), + Padding( + padding: const EdgeInsets.only(left: 18.5, right: 8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SvgPicture.asset( + 'assets/info.svg', + height: 24.0, + width: 24.0, + ), + SizedBox(width: 8.0), + Text( + "Nasza ocena:", + style: TextStyle( + fontSize: 18.0, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(width: 8.0), + Text( + "$score pkt", + style: TextStyle( + fontSize: 18.0, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), Padding( - padding: EdgeInsets.all(12.0), - child: Align( - child: Text(searchResult.name ?? "", - style: TextStyle( - fontSize: 18.0, - )), - alignment: Alignment.centerLeft, - )), - LinearProgressIndicatorWithText((company?.plScore ?? 0).toDouble(), - (((company?.plScore ?? "0").toString()) + " pkt")), - _DetailContent(searchResult) + padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 17.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(10.0), + child: LinearProgressIndicator( + value: score / 100.0, + backgroundColor: Color(0xFFF5DEDD), + valueColor: AlwaysStoppedAnimation(Color(0xFFE1203E)), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(left: 17.0, top: 8.0), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + "Kryteria oceniania", + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + ), + ), + ), + ), + _DetailContent(searchResult, _handleReadMoreClick), ], ), ), @@ -53,48 +115,56 @@ class DetailPage extends StatelessWidget { } class _DetailContent extends StatelessWidget { - _DetailContent(this.searchResult); + _DetailContent(this.searchResult, this.onReadMoreClick); final SearchResult searchResult; + final void Function(BuildContext, String?) onReadMoreClick; @override Widget build(BuildContext context) { if (searchResult.companies == null) { return Padding( - padding: EdgeInsets.all(8.0), - child: Text(searchResult.altText ?? "")); + padding: EdgeInsets.all(8.0), + child: Text(searchResult.altText ?? ""), + ); } + final company = searchResult.companies!.first; - return Column( - children: [ - Padding( - padding: EdgeInsets.all(8.0), - child: Column( + final double plCapital = (company.plCapital ?? 0).toDouble(); + + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 17.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Padding( - padding: EdgeInsets.all(4.0), - child: Align( - child: Text("udział polskiego kapitału"), - alignment: Alignment.centerLeft, - )), - LinearProgressIndicatorWithText( - (company.plCapital ?? 0).toDouble(), - (company.plCapital ?? 0).toString() + "%"), + CustomRadialGauge(percentage: plCapital), + SizedBox(width: 16.0), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _DetailItem("produkuje w Polsce", (company.plWorkers ?? 0) != 0), + _DetailItem("prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), + _DetailItem("zarejestrowana w Polsce", (company.plRegistered ?? 0) != 0), + _DetailItem("nie jest częścią zagranicznego koncernu", + (company.plNotGlobEnt ?? 0) != 0), + ], + ), + ), ], ), - ), - _DetailItem("produkuje w Polsce", (company.plWorkers ?? 0) != 0), - _DetailItem("prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), - _DetailItem("zarejestrowana w Polsce", (company.plRegistered ?? 0) != 0), - _DetailItem("nie jest częścią zagranicznego koncernu", - (company.plNotGlobEnt ?? 0) != 0), - Padding( + Padding( padding: EdgeInsets.all(8.0), - child: Text(company.description ?? "")), - _DetailCompanyLogotype(company.logotypeUrl), - _BrandLogotypes(searchResult.allCompanyBrands), - _ReadMoreButton(searchResult) - ], + child: ExpandableText(company.description ?? ""), + ), + _DetailCompanyLogotype(company.logotypeUrl), + _BrandLogotypes(searchResult.allCompanyBrands, onReadMoreClick, searchResult), + _Logotypes(logotypes: searchResult.logotypes(), searchResult: searchResult,) + ], + ), ); } } @@ -116,88 +186,184 @@ class _DetailItem extends StatelessWidget { child: SizedBox( height: 32.0, width: 32.0, - child: Container( - child: Checkbox( - checkColor: Colors.white, - value: state, - onChanged: (bool? value) {}, - ), + child: SvgPicture.asset( + state ? 'assets/task_alt.svg' : 'assets/radio_button_unchecked.svg', + height: 32.0, + width: 32.0, ), ), ), - Text(text) + Expanded( + child: Text( + text, + softWrap: true, + overflow: TextOverflow.visible, + ), + ), ], ); } } -class _ReadMoreButton extends StatelessWidget { - _ReadMoreButton(this.searchResult); +class _DetailCompanyLogotype extends StatelessWidget { + _DetailCompanyLogotype(this.url); - final SearchResult searchResult; - final PolaAnalytics _analytics = PolaAnalytics.instance(); + final String? url; @override Widget build(BuildContext context) { - final stringUrl = searchResult.companies?.first.officialUrl; - if (stringUrl == null) { - return Container(); - } - Uri? url = Uri.tryParse(stringUrl); + final url = this.url; if (url == null) { return Container(); } - return ElevatedButton( - onPressed: () { - _analytics.readMore(searchResult, stringUrl); - launchUrl( - url, - mode: LaunchMode.externalApplication, - ); - }, - child: Text("Czytaj więcej!"), - ); + return _LogoView(url); } } -class _DetailCompanyLogotype extends StatelessWidget { - _DetailCompanyLogotype(this.url); +class Logotype { + final String imageUrl; + final String? websiteUrl; + + Logotype(this.imageUrl, this.websiteUrl); +} + +extension on SearchResult { + List logotypes() { + var brandLogotypes = allCompanyBrands?.map((brand){ + final brandLogotype = brand.logotypeUrl; + if (brandLogotype != null){ + return Logotype(brandLogotype, null); + }else { + return null; + } + }) + .toList() ?? []; + + final logotypeCompany = companies?.first.logotype(); + + brandLogotypes.insert(0, logotypeCompany); + + return brandLogotypes.nonNulls.toList(); + } +} + +extension on Company { + Logotype? logotype() { + final logotypeUrl = this.logotypeUrl; + if (logotypeUrl != null) { + return Logotype(logotypeUrl, officialUrl); + } else { + return null; + } + } +} + +class _Logotypes extends StatelessWidget { + + final List logotypes; + final SearchResult searchResult; + final PolaAnalytics analytics = PolaAnalytics.instance(); + + _Logotypes({super.key, required this.logotypes, required this.searchResult}); - final String? url; @override Widget build(BuildContext context) { - final url = this.url; - if (url == null) { - return Container(); - } - return _LogoView(url); + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + children: logotypes.map((logotype) { + return GestureDetector( + onTap: () { + final url = logotype.websiteUrl; + if (url == null) return; + final Uri? uri = Uri.tryParse(url); + if (uri == null) return; + + analytics.readMore(searchResult, url); + launchUrl( + uri, + mode: LaunchMode.externalApplication, + ); + }, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Color(0xFFF8F8F8), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.3), + spreadRadius: 1, + blurRadius: 5, + offset: Offset(0, 3), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: _LogoView(logotype.imageUrl), + ), + ), + ), + ); + }).toList(), + ), + ); } } class _BrandLogotypes extends StatelessWidget { - _BrandLogotypes(this.brands); + _BrandLogotypes(this.brands, this.onReadMoreClick, this.searchResult); final List? brands; + final void Function(BuildContext, String?) onReadMoreClick; + final SearchResult searchResult; @override Widget build(BuildContext context) { final logotypes = brands?.map((brand) => brand.logotypeUrl).where((url) => url != null).toList().cast(); - if (logotypes == null) { + if (logotypes == null || logotypes.isEmpty) { return Container(); } return SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: logotypes - .map((logotypeUrl) => Padding( - padding: EdgeInsets.all(8.0), - child: _LogoView(logotypeUrl))) - .toList(), + children: logotypes.map((logotypeUrl) { + final bool isJagiellonianClub = logotypeUrl.contains('https://klubjagiellonski.pl'); + return GestureDetector( + onTap: () { + if (isJagiellonianClub) { + onReadMoreClick(context, searchResult.companies?.first.officialUrl); + } + }, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Color(0xFFF8F8F8), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.3), + spreadRadius: 1, + blurRadius: 5, + offset: Offset(0, 3), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: _LogoView(logotypeUrl), + ), + ), + ), + ); + }).toList(), ), ); } @@ -210,6 +376,156 @@ class _LogoView extends StatelessWidget { @override Widget build(BuildContext context) { - return Image.network(url, height: 100.0, fit: BoxFit.contain); + return Image.network(url, height: 60.0, fit: BoxFit.contain); + } +} + +class CustomRadialGauge extends StatelessWidget { + final double percentage; + + CustomRadialGauge({required this.percentage}); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: 150.0, + width: 150.0, + child: SfRadialGauge( + axes: [ + RadialAxis( + minimum: 0, + maximum: 100, + showLabels: false, + showTicks: false, + axisLineStyle: AxisLineStyle( + thickness: 0.2, + cornerStyle: CornerStyle.bothCurve, + color: Color(0xFFF5DEDD), + thicknessUnit: GaugeSizeUnit.factor, + ), + pointers: [ + RangePointer( + value: percentage, + cornerStyle: CornerStyle.bothCurve, + width: 0.2, + sizeUnit: GaugeSizeUnit.factor, + color: Color(0xFFE1203E), + ), + ], + annotations: [ + GaugeAnnotation( + positionFactor: 0.1, + angle: 90, + widget: Text( + '${percentage.toInt()}%', + style: TextStyle( + fontSize: 24.0, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Text( + 'Polski kapitał', + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ); } } + +class ExpandableText extends StatefulWidget { + final String text; + + ExpandableText(this.text); + + @override + _ExpandableTextState createState() => _ExpandableTextState(); +} + +class _ExpandableTextState extends State { + bool isExpanded = false; + + @override + Widget build(BuildContext context) { + final link = TextSpan( + text: isExpanded ? ' zobacz mniej' : ' zobacz więcej', + style: TextStyle(color: Color(0xFF898989)), // Change to #898989 + recognizer: TapGestureRecognizer() + ..onTap = () { + setState(() { + isExpanded = !isExpanded; + }); + }, + ); + + return LayoutBuilder( + builder: (context, constraints) { + final textSpan = TextSpan( + text: widget.text, + style: TextStyle(color: Colors.black), + ); + + final textPainter = TextPainter( + text: textSpan, + maxLines: isExpanded ? null : 3, + ellipsis: '...', + textDirection: TextDirection.ltr, + ); + + textPainter.layout( + minWidth: constraints.minWidth, + maxWidth: constraints.maxWidth, + ); + + final linkTextPainter = TextPainter( + text: link, + textDirection: TextDirection.ltr, + ); + + linkTextPainter.layout( + minWidth: constraints.minWidth, + maxWidth: constraints.maxWidth, + ); + + if (!isExpanded && textPainter.didExceedMaxLines) { + final pos = textPainter.getPositionForOffset(Offset( + textPainter.width - linkTextPainter.width, + textPainter.height, + )); + final end = textPainter.getOffsetBefore(pos.offset); + final text = TextSpan( + text: widget.text.substring(0, end), + style: TextStyle(color: Colors.black), + children: [link], + ); + + return RichText( + text: text, + ); + } else { + return RichText( + text: TextSpan( + text: widget.text, + style: TextStyle(color: Colors.black), + children: [if (isExpanded) link], + ), + ); + } + }, + ); + } +} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index e13feab..03b5ba9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "1a5e13736d59235ce0139621b4bbe29bc89839e202409081bc667eb3cd20674c" + sha256: "37a42d06068e2fe3deddb2da079a8c4d105f241225ba27b7122b37e9865fd8f7" url: "https://pub.dev" source: hosted - version: "1.3.5" + version: "1.3.35" analyzer: dependency: transitive description: @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: args - sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.5.0" async: dependency: transitive description: @@ -45,18 +45,18 @@ packages: dependency: transitive description: name: bloc - sha256: "3820f15f502372d979121de1f6b97bfcf1630ebff8fe1d52fb2b0bfa49be5b49" + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" url: "https://pub.dev" source: hosted - version: "8.1.2" + version: "8.1.4" bloc_test: dependency: "direct dev" description: name: bloc_test - sha256: af0de1a1e16a7536e95dcd7491e0a6d6078e11d2d691988e862280b74f5c7968 + sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" url: "https://pub.dev" source: hosted - version: "9.1.4" + version: "9.1.7" boolean_selector: dependency: transitive description: @@ -69,10 +69,10 @@ packages: dependency: transitive description: name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.1" build_config: dependency: transitive description: @@ -85,34 +85,34 @@ packages: dependency: transitive description: name: build_daemon - sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.2" build_resolvers: dependency: transitive description: name: build_resolvers - sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" url: "https://pub.dev" source: hosted - version: "2.0.10" + version: "2.4.2" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "10c6bcdbf9d049a0b666702cf1cee4ddfdc38f02a19d35ae392863b47519848b" + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" url: "https://pub.dev" source: hosted - version: "2.4.6" + version: "2.4.11" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe url: "https://pub.dev" source: hosted - version: "7.2.7" + version: "7.3.1" built_collection: dependency: transitive description: @@ -125,10 +125,10 @@ packages: dependency: transitive description: name: built_value - sha256: ff627b645b28fb8bdb69e645f910c2458fd6b65f6585c3a53e0626024897dedf + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb url: "https://pub.dev" source: hosted - version: "8.6.2" + version: "8.9.2" characters: dependency: transitive description: @@ -141,10 +141,10 @@ packages: dependency: transitive description: name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" chopper: dependency: "direct main" description: @@ -237,34 +237,34 @@ packages: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.8" dart_style: dependency: transitive description: name: dart_style - sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" url: "https://pub.dev" source: hosted - version: "2.2.4" + version: "2.3.2" device_info_plus: dependency: transitive description: name: device_info_plus - sha256: "86add5ef97215562d2e090535b0a16f197902b10c369c558a100e74ea06e8659" + sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91 url: "https://pub.dev" source: hosted - version: "9.0.3" + version: "10.1.0" device_info_plus_platform_interface: dependency: transitive description: @@ -301,114 +301,114 @@ packages: dependency: transitive description: name: ffi - sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.1.2" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" firebase_analytics: dependency: "direct main" description: name: firebase_analytics - sha256: "82992b2e93e4752d30296a881f65dde6dfdc09671f9a8cf994fa5d453bd72bde" + sha256: dbf1e7ab22cfb1f4a4adb103b46a26276b4edc593d4a78ef6fb942bafc92e035 url: "https://pub.dev" source: hosted - version: "10.4.5" + version: "10.10.7" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface - sha256: b277ab49112ebc4e545c7fc4fdfab99f692f7cd0e35347f8ed6c85d52a87562c + sha256: "3729b74f8cf1d974a27ba70332ecb55ff5ff560edc8164a6469f4a055b429c37" url: "https://pub.dev" source: hosted - version: "3.6.5" + version: "3.10.8" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web - sha256: "3f05999c06294dbdc05f4afef2b8976e6f57eb449e6aaa07ff751784763a68e0" + sha256: "019cd7eee74254d33fbd2e29229367ce33063516bf6b3258a341d89e3b0f1655" url: "https://pub.dev" source: hosted - version: "0.5.4+5" + version: "0.5.7+7" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: c78132175edda4bc532a71e01a32964e4b4fcf53de7853a422d96dac3725f389 + sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c" url: "https://pub.dev" source: hosted - version: "2.15.1" + version: "2.32.0" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface - sha256: b63e3be6c96ef5c33bdec1aab23c91eb00696f6452f0519401d640938c94cba2 + sha256: "1003a5a03a61fc9a22ef49f37cbcb9e46c86313a7b2e7029b9390cf8c6fc32cb" url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "5.1.0" firebase_core_web: dependency: transitive description: name: firebase_core_web - sha256: "4cf4d2161530332ddc3c562f19823fb897ff37a9a774090d28df99f47370e973" + sha256: "23509cb3cddfb3c910c143279ac3f07f06d3120f7d835e4a5d4b42558e978712" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.17.3" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: fd9e1a1cb7cce3f9dd2358d8363d235f25f056981e23a333db1e57eca693913f + sha256: "9897c01efaa950d2f6da8317d12452749a74dc45f33b46390a14cfe28067f271" url: "https://pub.dev" source: hosted - version: "3.3.5" + version: "3.5.7" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "0d19ef23cf7a917a357d2eb1807338ec536ec3232e729ebd769f5bb2aba9e085" + sha256: "16a71e08fbf6e00382816e1b13397898c29a54fa0ad969c2c2a3b82a704877f0" url: "https://pub.dev" source: hosted - version: "3.6.5" + version: "3.6.35" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: "6c1a2a047d6f165b7c5f947467ac5138731a2af82c7af1c12d691dbb834f6b73" + sha256: a1662cc95d9750a324ad9df349b873360af6f11414902021f130c68ec02267c4 url: "https://pub.dev" source: hosted - version: "14.6.7" + version: "14.9.4" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: bcba58d28f8cda607a323240c6d314c2c62b62ebfbb0f2d704ebefef07b52b5f + sha256: "87c4a922cb6f811cfb7a889bdbb3622702443c52a0271636cbc90d813ceac147" url: "https://pub.dev" source: hosted - version: "4.5.6" + version: "4.5.37" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: "962d09ec9dfa486cbbc218258ad41e8ec7997a2eba46919049496e1cafd960c5" + sha256: "0d34dca01a7b103ed7f20138bffbb28eb0e61a677bf9e78a028a932e2c7322d5" url: "https://pub.dev" source: hosted - version: "3.5.6" + version: "3.8.7" fixnum: dependency: transitive description: name: fixnum - sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -418,10 +418,18 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: e74efb89ee6945bcbce74a5b3a5a3376b088e5f21f55c263fc38cbdc6237faae + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.1.6" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + sha256: d39e7f95621fc84376bc0f7d504f05c3a41488c562f4a8ad410569127507402c + url: "https://pub.dev" + source: hosted + version: "2.0.9" flutter_test: dependency: "direct dev" description: flutter @@ -436,34 +444,34 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" glob: dependency: transitive description: name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" graphs: dependency: transitive description: name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" http: dependency: "direct main" description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "0.13.6" http_multi_server: dependency: transitive description: @@ -484,18 +492,26 @@ packages: dependency: "direct main" description: name: in_app_review - sha256: "16328b8202d36522322b95804ae5d975577aa9f584d634985849ba1099645850" + sha256: "99869244d09adc76af16bf8fd731dd13cef58ecafd5917847589c49f378cbb30" url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.0.9" in_app_review_platform_interface: dependency: transitive description: name: in_app_review_platform_interface - sha256: b12ec9aaf6b34d3a72aa95895eb252b381896246bdad4ef378d444affe8410ef + sha256: fed2c755f2125caa9ae10495a3c163aa7fab5af3585a9c62ef4a6920c5b45f10 url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.0.5" + intl: + dependency: transitive + description: + name: intl + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" + source: hosted + version: "0.19.0" io: dependency: transitive description: @@ -516,18 +532,18 @@ packages: dependency: "direct main" description: name: json_annotation - sha256: "3520fa844009431b5d4491a5a778603520cdc399ab3406332dcc50f93547258c" + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" url: "https://pub.dev" source: hosted - version: "4.7.0" + version: "4.9.0" json_serializable: dependency: "direct dev" description: name: json_serializable - sha256: f3c2c18a7889580f71926f30c1937727c8c7d4f3a435f8f5e8b0ddd25253ef5d + sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b url: "https://pub.dev" source: hosted - version: "6.5.4" + version: "6.8.0" leak_tracker: dependency: transitive description: @@ -564,10 +580,10 @@ packages: dependency: transitive description: name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" matcher: dependency: transitive description: @@ -596,10 +612,10 @@ packages: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.5" mobile_scanner: dependency: "direct main" description: @@ -620,10 +636,10 @@ packages: dependency: transitive description: name: mocktail - sha256: "9503969a7c2c78c7292022c70c0289ed6241df7a9ba720010c0b215af29a5a58" + sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.4" nested: dependency: transitive description: @@ -656,38 +672,54 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: ba2b77f0c52a33db09fc8caf85b12df691bf28d983e84cf87ff6d693cfa007b3 + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: bced5679c7df11190e1ddc35f3222c858f328fff85c3942e46e7f5589bf9eb84 + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: ee0e0d164516b90ae1f970bdf29f726f1aa730d7cfc449ecc74c495378b705da + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" platform: dependency: transitive description: name: platform - sha256: "57c07bf82207aee366dfaa3867b3164e4f03a238a461a11b0e8a3a510d51203d" + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.5" plugin_platform_interface: dependency: transitive description: @@ -708,10 +740,10 @@ packages: dependency: transitive description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.2" pub_semver: dependency: transitive description: @@ -724,10 +756,10 @@ packages: dependency: transitive description: name: pubspec_parse - sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" rxdart: dependency: "direct main" description: @@ -740,58 +772,58 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "0344316c947ffeb3a529eac929e1978fcd37c26be4e8468628bac399365a3ca1" + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: fe8401ec5b6dcd739a0fe9588802069e608c3fdbfd3c3c93e546cf2f90438076 + sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.3" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: d29753996d8eb8f7619a1f13df6ce65e34bc107bef6330739ed76f18b22310ef + sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.4.0" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "71d6806d1449b0a9d4e85e0c7a917771e672a3d5dc61149cc9fac871115018e1" + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "23b052f17a25b90ff2b61aad4cc962154da76fb62848a9ce088efe30d7c50ab1" + sha256: "034650b71e73629ca08a0bd789fd1d83cc63c2d1e405946f7cef7bc37432f93a" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "7347b194fb0bbeb4058e6a4e87ee70350b6b2b90f8ac5f8bd5b3a01548f6d33a" + sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: f95e6a43162bce43c9c3405f3eb6f39e5b5d11f65fab19196cf8225e2777624d + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.2" shelf: dependency: transitive description: @@ -833,18 +865,18 @@ packages: dependency: transitive description: name: source_gen - sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" url: "https://pub.dev" source: hosted - version: "1.2.6" + version: "1.5.0" source_helper: dependency: transitive description: name: source_helper - sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" url: "https://pub.dev" source: hosted - version: "1.3.3" + version: "1.3.4" source_map_stack_trace: dependency: transitive description: @@ -901,6 +933,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + syncfusion_flutter_core: + dependency: transitive + description: + name: syncfusion_flutter_core + sha256: "76c0efa89c79108f043602b0170512f88fcb83156cca7f5ca6dfe17e840bc63d" + url: "https://pub.dev" + source: hosted + version: "26.1.42" + syncfusion_flutter_gauges: + dependency: "direct main" + description: + name: syncfusion_flutter_gauges + sha256: "2f7c9b845505daef1ac96685e01124da719dcb2dcb3167f42e120061b02696e1" + url: "https://pub.dev" + source: hosted + version: "26.1.42" term_glyph: dependency: transitive description: @@ -953,66 +1001,66 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3 + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" url: "https://pub.dev" source: hosted - version: "6.1.11" + version: "6.3.0" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "3dd2388cc0c42912eee04434531a26a82512b9cb1827e0214430c9bcbddfe025" + sha256: "95d8027db36a0e52caf55680f91e33ea6aa12a3ce608c90b06f4e429a21067ac" url: "https://pub.dev" source: hosted - version: "6.0.38" + version: "6.3.5" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" + sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "6.3.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.1.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "1c4fdc0bfea61a70792ce97157e5cc17260f61abbe4f39354513f39ec6fd73b1" + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.2.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: bfdfa402f1f3298637d71ca8ecfe840b4696698213d5346e9d12d4ab647ee2ea + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: cc26720eefe98c1b71d85f9dc7ef0cada5132617046369d9dc296b3ecaa5cbb4 + sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" url: "https://pub.dev" source: hosted - version: "2.0.18" + version: "2.3.1" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "7967065dd2b5fccc18c653b97958fdf839c5478c28e767c61ee879f4e7882422" + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "3.1.1" uuid: dependency: "direct main" description: @@ -1021,6 +1069,30 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.7" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "4ac59808bbfca6da38c99f415ff2d3a5d7ca0a6b4809c71d9cf30fba5daf9752" + url: "https://pub.dev" + source: hosted + version: "1.1.10+1" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: f3247e7ab0ec77dc759263e68394990edc608fb2b480b80db8aa86ed09279e33 + url: "https://pub.dev" + source: hosted + version: "1.1.10+1" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "18489bdd8850de3dd7ca8a34e0c446f719ec63e2bab2e7a8cc66a9028dd76c5a" + url: "https://pub.dev" + source: hosted + version: "1.1.10+1" vector_math: dependency: transitive description: @@ -1033,10 +1105,18 @@ packages: dependency: "direct main" description: name: vibration - sha256: d81f665bcb201f586c295a21f3fe8f1cb6dc32c81a213a99e9c714ec8e811ce5 + sha256: "06588a845a4ebc73ab7ff7da555c2b3dbcd9676164b5856a38bf0b2287f1045d" url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.9.0" + vibration_platform_interface: + dependency: transitive + description: + name: vibration_platform_interface + sha256: "735a5fef0f284de0ad9449a5ed7d36ba017c6f59b5b20ac64418af4a6bd35ee7" + url: "https://pub.dev" + source: hosted + version: "0.0.1" vm_service: dependency: transitive description: @@ -1049,42 +1129,50 @@ packages: dependency: transitive description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "0.5.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.5" webkit_inspection_protocol: dependency: transitive description: name: webkit_inspection_protocol - sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" webview_flutter: dependency: "direct main" description: name: webview_flutter - sha256: "25e1b6e839e8cbfbd708abc6f85ed09d1727e24e08e08c6b8590d7c65c9a8932" + sha256: "6869c8786d179f929144b4a1f86e09ac0eddfe475984951ea6c634774c16b522" url: "https://pub.dev" source: hosted - version: "4.7.0" + version: "4.8.0" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: dad3313c9ead95517bb1cae5e1c9d20ba83729d5a59e5e83c0a2d66203f27f91 + sha256: f42447ca49523f11d8f70abea55ea211b3cafe172dd7a0e7ac007bb35dd356dc url: "https://pub.dev" source: hosted - version: "3.16.1" + version: "3.16.4" webview_flutter_platform_interface: dependency: transitive description: @@ -1097,50 +1185,58 @@ packages: dependency: "direct main" description: name: webview_flutter_web - sha256: "545764e9500b22f28a0de71301a1085b8c66635a6b1be2072b80c578c663ce52" + sha256: a9122bde996d9cdd03954e30c80188cdac0b3258a97573639f022c9d7cca3862 url: "https://pub.dev" source: hosted - version: "0.2.2+2" + version: "0.2.3+1" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: "7affdf9d680c015b11587181171d3cad8093e449db1f7d9f0f08f4f33d24f9a0" + sha256: "9c62cc46fa4f2d41e10ab81014c1de470a6c6f26051a2de32111b2ee55287feb" url: "https://pub.dev" source: hosted - version: "3.13.1" + version: "3.14.0" win32: dependency: transitive description: name: win32 - sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" + sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 url: "https://pub.dev" source: hosted - version: "4.1.4" + version: "5.5.1" win32_registry: dependency: transitive description: name: win32_registry - sha256: "1c52f994bdccb77103a6231ad4ea331a244dbcef5d1f37d8462f713143b0bfae" + sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.3" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: f0c26453a2d47aa4c2570c6a033246a3fc62da2fe23c7ffdd0a7495086dc0247 + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.4.0 <4.0.0" + flutter: ">=3.22.0" diff --git a/pubspec.yaml b/pubspec.yaml index ae8fb30..ae2e36c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -46,6 +46,8 @@ dependencies: url_launcher: ^6.1.7 vibration: ^1.7.6 firebase_analytics: ^10.4.1 + syncfusion_flutter_gauges: ^26.1.42 + flutter_svg: ^2.0.9 dev_dependencies: flutter_test: From a7b8d0bb59cb1acfd094c789bcdf77959e471214 Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Wed, 31 Jul 2024 08:48:00 +0200 Subject: [PATCH 03/40] 85/fixes review --- lib/pages/detail/detail.dart | 216 ++++---------------- lib/pages/detail/polish_capital_grapho.dart | 69 +++++++ 2 files changed, 107 insertions(+), 178 deletions(-) create mode 100644 lib/pages/detail/polish_capital_grapho.dart diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index 905804c..0f1f486 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -1,15 +1,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:http/retry.dart'; import 'package:pola_flutter/models/company.dart'; -import 'package:syncfusion_flutter_gauges/gauges.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; -import 'package:pola_flutter/models/brand.dart'; import 'package:pola_flutter/models/search_result.dart'; import 'package:url_launcher/url_launcher.dart'; import 'detail_lidl.dart'; +import 'polish_capital_grapho.dart'; class DetailPage extends StatelessWidget { DetailPage({Key? key, required this.searchResult}) : super(key: key); @@ -52,33 +50,35 @@ class DetailPage extends StatelessWidget { child: Column( children: [ SizedBox(height: 16.0), - Padding( - padding: const EdgeInsets.only(left: 18.5, right: 8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SvgPicture.asset( - 'assets/info.svg', - height: 24.0, - width: 24.0, - ), - SizedBox(width: 8.0), - Text( - "Nasza ocena:", - style: TextStyle( - fontSize: 18.0, - fontWeight: FontWeight.bold, + Padding( + padding: const EdgeInsets.symmetric(horizontal: 17.0), + child: Align( + alignment: Alignment.centerLeft, + child: Row( + children: [ + SvgPicture.asset( + 'assets/info.svg', + height: 24.0, + width: 24.0, ), - ), - SizedBox(width: 8.0), - Text( - "$score pkt", - style: TextStyle( - fontSize: 18.0, - fontWeight: FontWeight.bold, + SizedBox(width: 8.0), + Text( + "Nasza ocena:", + style: TextStyle( + fontSize: 18.0, + fontWeight: FontWeight.bold, + ), ), - ), - ], + SizedBox(width: 8.0), + Text( + "$score pkt", + style: TextStyle( + fontSize: 18.0, + fontWeight: FontWeight.bold, + ), + ), + ], + ), ), ), Padding( @@ -89,6 +89,7 @@ class DetailPage extends StatelessWidget { value: score / 100.0, backgroundColor: Color(0xFFF5DEDD), valueColor: AlwaysStoppedAnimation(Color(0xFFE1203E)), + minHeight: 12.0, // Set the thickness to 12 px ), ), ), @@ -160,9 +161,7 @@ class _DetailContent extends StatelessWidget { padding: EdgeInsets.all(8.0), child: ExpandableText(company.description ?? ""), ), - _DetailCompanyLogotype(company.logotypeUrl), - _BrandLogotypes(searchResult.allCompanyBrands, onReadMoreClick, searchResult), - _Logotypes(logotypes: searchResult.logotypes(), searchResult: searchResult,) + _Logotypes(logotypes: searchResult.logotypes(), searchResult: searchResult) ], ), ); @@ -205,22 +204,6 @@ class _DetailItem extends StatelessWidget { } } -class _DetailCompanyLogotype extends StatelessWidget { - _DetailCompanyLogotype(this.url); - - final String? url; - - @override - Widget build(BuildContext context) { - final url = this.url; - if (url == null) { - return Container(); - } - - return _LogoView(url); - } -} - class Logotype { final String imageUrl; final String? websiteUrl; @@ -230,21 +213,20 @@ class Logotype { extension on SearchResult { List logotypes() { - var brandLogotypes = allCompanyBrands?.map((brand){ + var brandLogotypes = allCompanyBrands?.map((brand) { final brandLogotype = brand.logotypeUrl; - if (brandLogotype != null){ + if (brandLogotype != null) { return Logotype(brandLogotype, null); - }else { + } else { return null; } - }) - .toList() ?? []; + }).toList() ?? []; final logotypeCompany = companies?.first.logotype(); brandLogotypes.insert(0, logotypeCompany); - return brandLogotypes.nonNulls.toList(); + return brandLogotypes.where((logotype) => logotype != null).cast().toList(); } } @@ -260,17 +242,14 @@ extension on Company { } class _Logotypes extends StatelessWidget { - final List logotypes; final SearchResult searchResult; final PolaAnalytics analytics = PolaAnalytics.instance(); - _Logotypes({super.key, required this.logotypes, required this.searchResult}); - + _Logotypes({required this.logotypes, required this.searchResult}); @override Widget build(BuildContext context) { - return SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( @@ -293,13 +272,13 @@ class _Logotypes extends StatelessWidget { child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), - color: Color(0xFFF8F8F8), + color: Color(0xFFF8F8F8), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.3), spreadRadius: 1, blurRadius: 5, - offset: Offset(0, 3), + offset: Offset(0, 3), ), ], ), @@ -316,59 +295,6 @@ class _Logotypes extends StatelessWidget { } } -class _BrandLogotypes extends StatelessWidget { - _BrandLogotypes(this.brands, this.onReadMoreClick, this.searchResult); - - final List? brands; - final void Function(BuildContext, String?) onReadMoreClick; - final SearchResult searchResult; - - @override - Widget build(BuildContext context) { - final logotypes = brands?.map((brand) => brand.logotypeUrl).where((url) => url != null).toList().cast(); - if (logotypes == null || logotypes.isEmpty) { - return Container(); - } - - return SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Row( - children: logotypes.map((logotypeUrl) { - final bool isJagiellonianClub = logotypeUrl.contains('https://klubjagiellonski.pl'); - return GestureDetector( - onTap: () { - if (isJagiellonianClub) { - onReadMoreClick(context, searchResult.companies?.first.officialUrl); - } - }, - child: Padding( - padding: EdgeInsets.all(8.0), - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - color: Color(0xFFF8F8F8), - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.3), - spreadRadius: 1, - blurRadius: 5, - offset: Offset(0, 3), - ), - ], - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: _LogoView(logotypeUrl), - ), - ), - ), - ); - }).toList(), - ), - ); - } -} - class _LogoView extends StatelessWidget { _LogoView(this.url); @@ -380,72 +306,6 @@ class _LogoView extends StatelessWidget { } } -class CustomRadialGauge extends StatelessWidget { - final double percentage; - - CustomRadialGauge({required this.percentage}); - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox( - height: 150.0, - width: 150.0, - child: SfRadialGauge( - axes: [ - RadialAxis( - minimum: 0, - maximum: 100, - showLabels: false, - showTicks: false, - axisLineStyle: AxisLineStyle( - thickness: 0.2, - cornerStyle: CornerStyle.bothCurve, - color: Color(0xFFF5DEDD), - thicknessUnit: GaugeSizeUnit.factor, - ), - pointers: [ - RangePointer( - value: percentage, - cornerStyle: CornerStyle.bothCurve, - width: 0.2, - sizeUnit: GaugeSizeUnit.factor, - color: Color(0xFFE1203E), - ), - ], - annotations: [ - GaugeAnnotation( - positionFactor: 0.1, - angle: 90, - widget: Text( - '${percentage.toInt()}%', - style: TextStyle( - fontSize: 24.0, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Text( - 'Polski kapitał', - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, - ), - ), - ), - ], - ); - } -} class ExpandableText extends StatefulWidget { final String text; diff --git a/lib/pages/detail/polish_capital_grapho.dart b/lib/pages/detail/polish_capital_grapho.dart new file mode 100644 index 0000000..10921ca --- /dev/null +++ b/lib/pages/detail/polish_capital_grapho.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +import 'package:syncfusion_flutter_gauges/gauges.dart'; + +class CustomRadialGauge extends StatelessWidget { + final double percentage; + + CustomRadialGauge({required this.percentage}); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + height: 100.0, + width: 100.0, + child: SfRadialGauge( + axes: [ + RadialAxis( + minimum: 0, + maximum: 100, + showLabels: false, + showTicks: false, + axisLineStyle: AxisLineStyle( + thickness: 0.15, + cornerStyle: CornerStyle.bothCurve, + color: Color(0xFFF5DEDD), + thicknessUnit: GaugeSizeUnit.factor, + ), + pointers: [ + RangePointer( + value: percentage, + cornerStyle: CornerStyle.bothCurve, + width: 0.15, + sizeUnit: GaugeSizeUnit.factor, + color: Color(0xFFE1203E), + ), + ], + annotations: [ + GaugeAnnotation( + positionFactor: 0.1, + angle: 90, + widget: Text( + '${percentage.toInt()}%', + style: TextStyle( + fontSize: 24.0, + fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.only(top: 0.0), + child: Text( + 'Polski kapitał', + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + ); + } +} From c5cd12bd38a36f828380065e8c8415769ee196db Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Wed, 31 Jul 2024 08:54:14 +0200 Subject: [PATCH 04/40] Redesing ekran menu (#87) * add icons in menu bottom sheet * adding distances from the edges * change line indicator * adding lower buttons * gap repair * adding url links * adding spacing * adding spaces * add fonts * add fonts * fixes review * file separation * improved file separation * bug fixes * bug fixes * improved file separation * deleting unnecessary files * adding a private class * navigate to url in webViewItem * _externalUrlItem -> _webViewItem --- assets/fonts/Lato/Lato-Bold.ttf | Bin 0 -> 73332 bytes assets/fonts/Lato/Lato-Regular.ttf | Bin 0 -> 75152 bytes assets/fonts/Roboto/Roboto-Bold.ttf | Bin 0 -> 167336 bytes assets/fonts/Roboto/Roboto-Regular.ttf | Bin 0 -> 168260 bytes assets/icons/2.0x/diversity.png | Bin 0 -> 1489 bytes assets/icons/2.0x/github.png | Bin 0 -> 1430 bytes assets/icons/2.0x/groups.png | Bin 0 -> 874 bytes assets/icons/2.0x/handshake.png | Bin 0 -> 1401 bytes assets/icons/2.0x/info.png | Bin 0 -> 1253 bytes assets/icons/2.0x/star.png | Bin 0 -> 1438 bytes assets/icons/2.0x/thumbs.png | Bin 0 -> 931 bytes assets/icons/3.0x/diversity.png | Bin 0 -> 2272 bytes assets/icons/3.0x/github.png | Bin 0 -> 2165 bytes assets/icons/3.0x/groups.png | Bin 0 -> 1356 bytes assets/icons/3.0x/handshake.png | Bin 0 -> 1992 bytes assets/icons/3.0x/info.png | Bin 0 -> 1746 bytes assets/icons/3.0x/star.png | Bin 0 -> 2024 bytes assets/icons/3.0x/thumbs.png | Bin 0 -> 1255 bytes assets/icons/diversity.png | Bin 0 -> 772 bytes assets/icons/github.png | Bin 0 -> 807 bytes assets/icons/groups.png | Bin 0 -> 512 bytes assets/icons/handshake.png | Bin 0 -> 748 bytes assets/icons/info.png | Bin 0 -> 641 bytes assets/icons/star.png | Bin 0 -> 776 bytes assets/icons/thumbs.png | Bin 0 -> 526 bytes ios/Flutter/AppFrameworkInfo.plist | 2 +- ios/Podfile.lock | 4 +- ios/Runner.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- lib/ui/menu_bottom_sheet.dart | 199 +++--------------- lib/ui/menu_item_list_view.dart | 150 +++++++++++++ lib/ui/social_media_list_view.dart | 122 +++++++++++ pubspec.yaml | 20 +- 33 files changed, 325 insertions(+), 176 deletions(-) create mode 100644 assets/fonts/Lato/Lato-Bold.ttf create mode 100644 assets/fonts/Lato/Lato-Regular.ttf create mode 100644 assets/fonts/Roboto/Roboto-Bold.ttf create mode 100644 assets/fonts/Roboto/Roboto-Regular.ttf create mode 100644 assets/icons/2.0x/diversity.png create mode 100644 assets/icons/2.0x/github.png create mode 100644 assets/icons/2.0x/groups.png create mode 100644 assets/icons/2.0x/handshake.png create mode 100644 assets/icons/2.0x/info.png create mode 100644 assets/icons/2.0x/star.png create mode 100644 assets/icons/2.0x/thumbs.png create mode 100644 assets/icons/3.0x/diversity.png create mode 100644 assets/icons/3.0x/github.png create mode 100644 assets/icons/3.0x/groups.png create mode 100644 assets/icons/3.0x/handshake.png create mode 100644 assets/icons/3.0x/info.png create mode 100644 assets/icons/3.0x/star.png create mode 100644 assets/icons/3.0x/thumbs.png create mode 100644 assets/icons/diversity.png create mode 100644 assets/icons/github.png create mode 100644 assets/icons/groups.png create mode 100644 assets/icons/handshake.png create mode 100644 assets/icons/info.png create mode 100644 assets/icons/star.png create mode 100644 assets/icons/thumbs.png create mode 100644 lib/ui/menu_item_list_view.dart create mode 100644 lib/ui/social_media_list_view.dart diff --git a/assets/fonts/Lato/Lato-Bold.ttf b/assets/fonts/Lato/Lato-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..016068b486e1bd1d73743185c2752b7b1b843701 GIT binary patch literal 73332 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

    S&jh1n&JeeMOkU4{=4@cYr6k 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≤FHXCuU9Qce=@vmZ{%9^5??OaVQJ8!4u8-w;yt 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 literal 0 HcmV?d00001 diff --git a/assets/icons/2.0x/github.png b/assets/icons/2.0x/github.png new file mode 100644 index 0000000000000000000000000000000000000000..7257af7aabcd4e1a5afc996a6f8bc45c383145b2 GIT binary patch literal 1430 zcmV;H1!?+;P)s#X$l&rwQod!CF zF@EcGG86LDX^nJxj`#@{Lb_lf)9(Sxm!qru>7M@!LPXfv*)=Jd%p>6*A(#Y^LI7h@ zhR3=**5xaUh#EE|>fM&rg$RIf52Q2S<^k0UKrHbpQ?LMBa!9qlqt5O_Y9S&60*NwT z<{?5LLhaVU>LP^ZB4T7rBZ+hh5fkuY5kd)F!JTaGrBd)SUuIzWFquqoD&;yBZgt7lI!#fEO{4ZLeWY4_sgR&u|OiCN(rQ2z24^mVD3%&z<;eP5EmB7#SE*t5u%|muy z$6<2pik~PQU1ZebCLw75VV&sgN@5-ItXlYem>}=Q89Wdqg9wvBa15nWYbzVHikoFX z0%MqrG&~e{Jd7~G+uP`Js(C>`-B1~%CrT%N1Qj%^0eq}<#7049m7zrh*YPo|IFyci zV~?;84+XvOAWk8i2*#M2_&hx{Jg~Wc5MvK_t)w&Al7Jd*D6W4LyEmQsBA?Efd59TO zBk9CBuA?l4x``l{vk)_MYb2>iRez0DODoIdUD?gWMkbxj9cy)Ra8OpOuEoL5(M&-I zD{+t!61>7gJ!v|ZPq&G^@oe*knU(Zz#Qf9eUl^Y~-E8#U{TXS*my%-R^G)s>;E%fZ zaE){z>lim5(z|=_?-&-*8}`l>a@#mg5fP`VNNN8&edpZ%mrtG+Ok*T#c(i60*0>c@6Aex!Har!xyU&PBPA^%PS49E#|QW6 zXmT@e)DIh{DE&2c;^`cwxbJj2vI)MS!mj#Nz_c7RsjIUyS8ut6L(^xB^8g8IlTE!b z5ixq{_)Xm*2A<8ihG&1msus{DWql1I>Rn0|?txp+{dbZ^VaRXYry|3$=(3Qtc{|z5 zO~)Rb-Cgv9>-HA~P9Mun^&}0`OeOxIi>Yl#sXZNlb zP_NhRX5$C%pl@^4ZDuRF@T3Pl?vn3EbuKQLmx!pfXoTMyeCrVr{6>{mx(&9%aX*ID39A_ zf_FipcBg4+CXSj!Mv&8~PO~9rh}C5fk~zsehHDhOM{!}8i^vF)t_UGF6OgwjKzsvp kV~~P>+=0f{qCMvS01zu)%}EoQC;$Ke07*qoM6N<$f-obQQ~&?~ literal 0 HcmV?d00001 diff --git a/assets/icons/2.0x/groups.png b/assets/icons/2.0x/groups.png new file mode 100644 index 0000000000000000000000000000000000000000..6ddd42fc70e4bafa5a23eb8904aefd9439ba7074 GIT binary patch literal 874 zcmV-w1C{)VP)(qg1lUG|K*k85j~R9D z?o~HQq693$sso#wL9pi0IU5{6zOrbT;_l5&6oDmJb3h{hx=t5G#%l_rp99>nbrK3J zpI9t45^ zIHX&B{#$%$MRzT4P?E9c(PwV9_~-Ml#|G`0B;UgWBwE|Ad9W}{^s9o!7u*cTiv^*K zH5x$+iqY3QoD)Z~mn65RvIBjNXjXO={VyCCd+z7#?IX|;6oK$e?{ZGGd9N=Ub-Lv{ z-=3507HwmyKQDc{Ah|J&~Iwc|@80gP)psYUoMH5jJC25AcWlqSP z$W*)mM*8y{D7>GHUdbFtlEvRIxoqN|zR#0Wh=+q;xU)bZFw*~`lxayc?`^`BV8IrRkV2tBW7r}P>*yt!)z07^BncFjLxpFuTHhK0P@0(ABiwefkY{eze;7Pq|H)s z6jG1pfAGR&ti|Ulw8ec{(<*X8r`gTM+hZQxhYE*l5=}P#97<|@mZ|4gc4Hm(=Zzni z$&v5U+i#rUvHseXM}UP@eRx*2u( zblR{4noW)}O`|N4y^1flrJcuMbI`+i8k`56`Ys~B3QTob`=I$-5C=@ZO|AZ`pkom- zI4`f{g)>=bDsO;9d3g8-pF07*qoM6N<$f*k#b AKL7v# literal 0 HcmV?d00001 diff --git a/assets/icons/2.0x/handshake.png b/assets/icons/2.0x/handshake.png new file mode 100644 index 0000000000000000000000000000000000000000..380910cdbfd0df4bd4dbb61a33e3ecb0d5f7ddfd GIT binary patch literal 1401 zcmV-<1%~>GP)K~#7F?O8u_ z8b=g=dk2bb5C&^9Bj=EG>QdTWx`-~Fr81RJm(JEFu=EKcm#Kt0r7|v433usCK7kK$ zSW2anff>&TZvEZ?=jFIRduXZ5Zw3vw?B4#~zW*zLC6@TU!C(%oubXC8cVD`k?J@=? zjd6e`{%x|MduCtT4RL<4Xcluhx5|LMz{h7agdYb#O%Co^r_-*%oJcLehOzl42lgs% z4hLTA_q9XEv7GXHd57uxDGF#pGzn|qx`$U+?K-4{v;cI9`5b?XUw35Y6DjWU6VTWR zNJ0Zvz3f%wpNxGw&NDl#ACO7D6-#}UW7U8lKPD4_~rcWNJeE*47GZP)n^ zV!%|97ZIfia_qZd`1*M@p{XKoVs0>gG`uyIWjSc;Gd@9~G^_Iq$|J$`osLz*@O%&) zPx6Tw0rGk86r{;NeY&w*HnwgCI{(O4G9NaKt&fJWQB4wp4hj?qG35i4q)^dSS@QH! z#@IQ2eIN`M(cX6ptB>Kb-TEiOCyFa8@XP1!?Tl%p^$FhxNUa$>#WdvUWFQWlAK9NS zkE48oLNI0Pu%%Hx0c=>Y?Qf-uZ$i56zJ~jgpC-fDQTeCM*Md1U#Gmu|L1bc#GAG9M zQ_=i<0Z{GF0-GPFAP8*s#ufq$pixzYJnmDAbbJ5+D3qA zpR(j9ND_j22P(Hg5+Q=l`T$DsUfiJ9%QR)klS5%1xWErLj7{IcNC+(0p5sYVsBDf8 zs6oEf>9n3lMV~NWL<%~)zc%9&(lxX-zCSu0R-p}K$ctGU13@*H8@@+}_126}t_t^r zrn&pvovM2LdFw6CoXUnt z`+2wkJMj zV%{;8bTBU@k`MX~`UK=3xh?dGBTzt|EC3I&DJ1}@YI0>lSk3Vdd?Zv+hP;4OeRSH8 z9hu0O;3#9FCZs11L$1|85^2d3B16WLwPG`@HG~x8X=BU>=VW?oYlS}wg~HF>?&qc| z^4{+d11f{>?%Wg9#!NGTmFnKrl~qrhD-aF5m8hs7pD4ft9trBygs@8eE$X2jc1xEK zZXFb$q=Gy_s+b#vLH0%*BcGUqJQZX*j4R~ zi?bO}dEAyrbTTy-q(G{|g)XkT-P<}g-S3dn!|5&#lUBa)|AQac?5)Ov$d7iN6XmkG zgW2vPY2G5qdu!nypgsU%uG<$)o{-81g20C5AlS)GK;w%h@4W*QV0?!|$!Sb literal 0 HcmV?d00001 diff --git a/assets/icons/2.0x/info.png b/assets/icons/2.0x/info.png new file mode 100644 index 0000000000000000000000000000000000000000..9262fb513368172446707d4e9df5c350136c179c GIT binary patch literal 1253 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 literal 0 HcmV?d00001 diff --git a/assets/icons/3.0x/groups.png b/assets/icons/3.0x/groups.png new file mode 100644 index 0000000000000000000000000000000000000000..5659026a7704797bc15c6a876ef7222d7c867e85 GIT binary patch literal 1356 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 literal 0 HcmV?d00001 diff --git a/assets/icons/3.0x/star.png b/assets/icons/3.0x/star.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa252e18e0d3583416da5e244383dfe2a5e4912 GIT binary patch literal 2024 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 literal 0 HcmV?d00001 diff --git a/assets/icons/groups.png b/assets/icons/groups.png new file mode 100644 index 0000000000000000000000000000000000000000..0499f205bd7af84b82964f0431341c3fc454865c GIT binary patch literal 512 zcmV+b0{{JqP)0Y5 z3dAj6GI`T^@0WT!6cKAsgKNJA0g-#F|Ucdib;UG;`y_rz+W29=)0KfA?0kFy!t~gKz z)?o$aST(@+FGT3mZ>?@n9RJTX&1AIZmfW)HKq$kdQ)>CXst*RP8|MRM$J6_hvTO<> zXvyN`wO6oh?I6(O+_BjCe(uN$f(BmvbJH|CbmU(#(`n9-u(&7%=}8U+ zbT{iOHO+)-xNbB{sm?GaHD1>eka5G;r&&A4gU2#XgQJs9kv6%`Vx%O3-mHAkfu+ou zm3akWwLzf{JAuhtY5JK82J-`P_HEv7<70;%;_(fNJ+yls%T3n+0000LgDy5-Jg(*{6IstHk*e8f@VAG|;M-U)qC`BAs zAZ>Q_71@?7x0&pW^hW!he*fKl`yRl*Zdf$YY?x<$KwU&Id67dzefQ^`-KaH=K+}4> z@5N65<_nERwVG+J70AK~816b_@!#J&LqEV)ECM|4d!FM-#EHL11dHI)sWS=v zTyxY^Cjh$keQm5M8p*zJ?fcW|-Kne*XyRWkS14c@dnX9$+X{SnFNmz?Kn)TYf7`tA zR-VXgj)#(^it40#;s1c=xp0JGG@?~eK?g9fqfgjRw3o}Z^*ZQ6vIpXjk>UMSI7jK; zwpsi%5s9;f0MvE1-eFk~+wr=yzXH+bdAe@u%Wxt!loE=#bQ46aDjjAg0c9ee6X_vi+E98PKZ7EdzLARGWMvT!*-(g4({2=GKV?iMd}1Te|Mr42O|^zdcn#;7;DW$-B2{B$i|+)GQBg(IFw z0DKP}RupvB!Ns&ZfnPIktZ!EzIr5ME`HBzLxkBh9a5?Q7!sjx0VFpE+Byc47vFfTxPL9X18UjV!y#f_WE3s7zx;RT2vm=_>JmI{>vDqOi3 ztYJng6|%Kbj5$G9O|7JznO^no%mV!Dz_!VLU-!G+EJVVG1TaAaE#HYC;lMdz_STrs z(Ov|e=Z6StCOpudAju$m-bAEaAAN5)v0V1 z0!cpbM#T2b_jP!azvt;td?m(3f}75{EVA;HS9okpGKU?&BohRB$B%va+p1g}5-Cup zGIH`~uH?Qq`Y5*jU3?|Ru2{|FaMTE7^`a*~#vBlV0~uL!p@@m)FS@s~uttEWPKwo^ zLj%m0#aOIqp5-~Wxge+!PzICyVFf$s?!tQAi7f%%uMw0*WUiVwwrLMaTwW$gzE~@D zjsy4uR0DU#Z;814WgOodk6=&8ag|Z3yGDS@YQIuHk6~}Da{?mzP$N);?=8D}411!C zB~)+f1cwmukg^3sPdiCO#!|{{NF7P6%vbAZt5s-j74(;_0;g4iPStU_Oy|9$qdUwS zF!Q6^z24X5@_Q?Z{abnsdFQ1wV-_!}^UnKVFc`jMA)gelabBUTY;LYhPNwf_{R7qk zc5=-F>qci6=F`*dTrC$4w`!u(vH)9<7R@noP2vr~c3+TAq?K%3nS88?Pu}%4L}{9& b@ZaJWCtc;j3u(&d00000NkvXXu0mjf$cY*| literal 0 HcmV?d00001 diff --git a/assets/icons/star.png b/assets/icons/star.png new file mode 100644 index 0000000000000000000000000000000000000000..9c2a5caa0f32117d29b12727717b6851971e9bbe GIT binary patch literal 776 zcmV+j1NZ!iP)lY{0nzIYG?{N>0#lg3uEHCm=mR$O%GD5a$Hp26b8^Me0L&X!?-g zozAR(M8O0jb)=PNcjssKn{U2>7W;|1SyZbOzL-$4AGlGQOn}ytN>Kgy@bm-H7@O@o5>~QVBGWfrL;^ zK~W$&s&X*lE(3w5Vv(Wd?$C!%`-g|RUpsJvZLUkGgq8PIx+kza*dYXXmFEP!Vc2|yH~`BUZ1brAEh>auG{W;d z5J89t;kt1gLy#wU0~7rMMKxdmVFeAkGIw_z?+k&)V!#Wb20fb3e@tKxX}aFICK{$m zn99g8!i&7fQcO$HEuY>qxq&8etVWNIVfb2LQ^OivvP0J0!7|2P=C{Ej*Y$>s(;(dp z3FBTAML|(;x9<9AS(j-O%CWvi^Y8stn~gq*qHxI9JCRx#N7`OQDX@6}*%lBx>%j{X zh%k1utk7BK7KyM)zGBM<3yN(DMC!pG-%OS&SY1!|j6BCMO;ulNQ96NT#lC#y>hquB zOmtxhcl5ms=cs9*kU|=GSgP;zS?L6bD&aU%ASY`$%`sE(0ul<^{0@yBUQ28f2)DgW z#gAQ1Idxa7(k&OgpDg1SjyN&_c};$wOy^nZ)h>c*gQkr}qf1&{r&D>zY}4Heds!j5 zG24vab=ot=CW#hz)+xPl1FiqLsyGHufAD0LCBm{;V~3A7&4ZgOZvINu<^uY;Jwp=B zA38-(vJ^Oq9!@jJ62Z?q6KG1N7YOK(6xV&TeI{%ojBJ8g)LsR?1q zd{wFW$;+Ee&r1Lb?CnW;5Ok)^rffnDctvyHqp9w8{RTb1y}#bWKf$6o0Z1MzzzAvp zZRQLSJU|VgX|AtuGoP$hQ3N$0+CgWQnbQQ3?nvQnsTd%7jORz-0Onu>N4pvSnklxGG3hJBj+7d1OifpVX%KV%C*jiT!s<% zP+vVZPn9^SWdZYN$mHhymkbSwJXH+RSTP0DTziCM=pWUs+DTS6nm` Q#Q*>R07*qoM6N<$g1i;pWB>pF literal 0 HcmV?d00001 diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 9625e10..7c56964 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/ios/Podfile.lock b/ios/Podfile.lock index fcd86af..7ef7880 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -308,6 +308,6 @@ SPEC CHECKSUMS: vibration: 7d883d141656a1c1a6d8d238616b2042a51a1241 webview_flutter_wkwebview: be0f0d33777f1bfd0c9fdcb594786704dbf65f36 -PODFILE CHECKSUM: 47967388dea8945f9f1c1487809851645610dc38 +PODFILE CHECKSUM: fc557d62e75d2093d5ea3f98944a95bb23324484 -COCOAPODS: 1.14.3 +COCOAPODS: 1.15.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 15105c5..c6a550a 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -165,7 +165,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 3db53b6..e67b280 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ Date: Wed, 31 Jul 2024 13:59:04 +0200 Subject: [PATCH 05/40] add font --- lib/pages/detail/detail.dart | 44 ++++++++++++++------- lib/pages/detail/polish_capital_grapho.dart | 10 +++-- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index 0f1f486..e60f40e 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -65,16 +65,18 @@ class DetailPage extends StatelessWidget { Text( "Nasza ocena:", style: TextStyle( - fontSize: 18.0, - fontWeight: FontWeight.bold, + fontSize: 16.0, + fontWeight: FontWeight.w600, + fontFamily: 'Lato', ), ), SizedBox(width: 8.0), Text( "$score pkt", style: TextStyle( - fontSize: 18.0, - fontWeight: FontWeight.bold, + fontSize: 20.0, + fontWeight: FontWeight.w700, + fontFamily: 'Lato', ), ), ], @@ -89,7 +91,7 @@ class DetailPage extends StatelessWidget { value: score / 100.0, backgroundColor: Color(0xFFF5DEDD), valueColor: AlwaysStoppedAnimation(Color(0xFFE1203E)), - minHeight: 12.0, // Set the thickness to 12 px + minHeight: 12.0, ), ), ), @@ -98,10 +100,11 @@ class DetailPage extends StatelessWidget { child: Align( alignment: Alignment.centerLeft, child: Text( - "Kryteria oceniania", + "Kryteria oceniania:", style: TextStyle( fontSize: 16.0, fontWeight: FontWeight.w600, + fontFamily: 'Lato', ), ), ), @@ -146,12 +149,11 @@ class _DetailContent extends StatelessWidget { Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _DetailItem("produkuje w Polsce", (company.plWorkers ?? 0) != 0), - _DetailItem("prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), - _DetailItem("zarejestrowana w Polsce", (company.plRegistered ?? 0) != 0), - _DetailItem("nie jest częścią zagranicznego koncernu", - (company.plNotGlobEnt ?? 0) != 0), + children: [ + _DetailItem("Produkuje w Polsce", (company.plWorkers ?? 0) != 0), + _DetailItem("Prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), + _DetailItem("Zarejestrowana w Polsce", (company.plRegistered ?? 0) != 0), + _DetailItem("Nie jest częścią zagranicznego koncernu", (company.plNotGlobEnt ?? 0) != 0), ], ), ), @@ -194,6 +196,11 @@ class _DetailItem extends StatelessWidget { ), Expanded( child: Text( + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w400, + fontFamily: 'Lato', + ), text, softWrap: true, overflow: TextOverflow.visible, @@ -309,7 +316,6 @@ class _LogoView extends StatelessWidget { class ExpandableText extends StatefulWidget { final String text; - ExpandableText(this.text); @override @@ -322,8 +328,12 @@ class _ExpandableTextState extends State { @override Widget build(BuildContext context) { final link = TextSpan( + style: TextStyle( color: Color(0xFF898989), + fontSize: 11.0, + fontWeight: FontWeight.w700, + fontFamily: 'Lato', + ), text: isExpanded ? ' zobacz mniej' : ' zobacz więcej', - style: TextStyle(color: Color(0xFF898989)), // Change to #898989 recognizer: TapGestureRecognizer() ..onTap = () { setState(() { @@ -336,7 +346,11 @@ class _ExpandableTextState extends State { builder: (context, constraints) { final textSpan = TextSpan( text: widget.text, - style: TextStyle(color: Colors.black), + style: TextStyle(color: Colors.black, + fontSize: 11.0, + fontWeight: FontWeight.w400, + fontFamily: 'Lato', + ) ); final textPainter = TextPainter( diff --git a/lib/pages/detail/polish_capital_grapho.dart b/lib/pages/detail/polish_capital_grapho.dart index 10921ca..b04b743 100644 --- a/lib/pages/detail/polish_capital_grapho.dart +++ b/lib/pages/detail/polish_capital_grapho.dart @@ -43,8 +43,9 @@ class CustomRadialGauge extends StatelessWidget { widget: Text( '${percentage.toInt()}%', style: TextStyle( - fontSize: 24.0, - fontWeight: FontWeight.bold, + fontSize: 26.0, + fontWeight: FontWeight.w700, + fontFamily: 'Lato', ), ), ), @@ -58,8 +59,9 @@ class CustomRadialGauge extends StatelessWidget { child: Text( 'Polski kapitał', style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, + fontSize: 11.0, + fontWeight: FontWeight.w400, + fontFamily: 'Lato', ), ), ), From e2a6e4f5d8d4b5f64d74f70795da189b4908205f Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Thu, 1 Aug 2024 09:30:43 +0200 Subject: [PATCH 06/40] 85/redesing --- lib/pages/detail/detail.dart | 95 +++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 40 deletions(-) diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index e60f40e..53f4178 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -50,7 +50,7 @@ class DetailPage extends StatelessWidget { child: Column( children: [ SizedBox(height: 16.0), - Padding( + Padding( padding: const EdgeInsets.symmetric(horizontal: 17.0), child: Align( alignment: Alignment.centerLeft, @@ -84,17 +84,27 @@ class DetailPage extends StatelessWidget { ), ), Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 17.0), + padding: + const EdgeInsets.symmetric(vertical: 8.0, horizontal: 17.0), child: ClipRRect( borderRadius: BorderRadius.circular(10.0), child: LinearProgressIndicator( value: score / 100.0, backgroundColor: Color(0xFFF5DEDD), - valueColor: AlwaysStoppedAnimation(Color(0xFFE1203E)), - minHeight: 12.0, + valueColor: + AlwaysStoppedAnimation(Color(0xFFE1203E)), + minHeight: 12.0, ), ), ), + SizedBox(height: 17.0), // Space before the divider + Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), // Divider color + indent: 17.0, // Left indent + endIndent: 17.0, // Right indent + ), + SizedBox(height: 22.0), // Space after the divider Padding( padding: const EdgeInsets.only(left: 17.0, top: 8.0), child: Align( @@ -109,6 +119,7 @@ class DetailPage extends StatelessWidget { ), ), ), + SizedBox(height: 22.0), // Space before the next section _DetailContent(searchResult, _handleReadMoreClick), ], ), @@ -149,11 +160,15 @@ class _DetailContent extends StatelessWidget { Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _DetailItem("Produkuje w Polsce", (company.plWorkers ?? 0) != 0), - _DetailItem("Prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), - _DetailItem("Zarejestrowana w Polsce", (company.plRegistered ?? 0) != 0), - _DetailItem("Nie jest częścią zagranicznego koncernu", (company.plNotGlobEnt ?? 0) != 0), + children: [ + _DetailItem( + "Produkuje w Polsce", (company.plWorkers ?? 0) != 0), + _DetailItem( + "Prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), + _DetailItem("Zarejestrowana w Polsce", + (company.plRegistered ?? 0) != 0), + _DetailItem("Nie jest częścią zagranicznego koncernu", + (company.plNotGlobEnt ?? 0) != 0), ], ), ), @@ -163,7 +178,8 @@ class _DetailContent extends StatelessWidget { padding: EdgeInsets.all(8.0), child: ExpandableText(company.description ?? ""), ), - _Logotypes(logotypes: searchResult.logotypes(), searchResult: searchResult) + _Logotypes( + logotypes: searchResult.logotypes(), searchResult: searchResult) ], ), ); @@ -183,25 +199,19 @@ class _DetailItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [ Padding( - padding: EdgeInsets.all(4.0), - child: SizedBox( - height: 32.0, - width: 32.0, - child: SvgPicture.asset( - state ? 'assets/task_alt.svg' : 'assets/radio_button_unchecked.svg', - height: 32.0, - width: 32.0, - ), + padding: EdgeInsets.only(top: 0, right: 3.0), + child: SvgPicture.asset( + state ? 'assets/task_alt.svg' : 'assets/radio_button_unchecked.svg', ), ), Expanded( child: Text( + text, style: TextStyle( fontSize: 11, fontWeight: FontWeight.w400, fontFamily: 'Lato', ), - text, softWrap: true, overflow: TextOverflow.visible, ), @@ -221,19 +231,23 @@ class Logotype { extension on SearchResult { List logotypes() { var brandLogotypes = allCompanyBrands?.map((brand) { - final brandLogotype = brand.logotypeUrl; - if (brandLogotype != null) { - return Logotype(brandLogotype, null); - } else { - return null; - } - }).toList() ?? []; + final brandLogotype = brand.logotypeUrl; + if (brandLogotype != null) { + return Logotype(brandLogotype, null); + } else { + return null; + } + }).toList() ?? + []; final logotypeCompany = companies?.first.logotype(); brandLogotypes.insert(0, logotypeCompany); - return brandLogotypes.where((logotype) => logotype != null).cast().toList(); + return brandLogotypes + .where((logotype) => logotype != null) + .cast() + .toList(); } } @@ -313,7 +327,6 @@ class _LogoView extends StatelessWidget { } } - class ExpandableText extends StatefulWidget { final String text; ExpandableText(this.text); @@ -328,11 +341,12 @@ class _ExpandableTextState extends State { @override Widget build(BuildContext context) { final link = TextSpan( - style: TextStyle( color: Color(0xFF898989), - fontSize: 11.0, - fontWeight: FontWeight.w700, - fontFamily: 'Lato', - ), + style: TextStyle( + color: Color(0xFF898989), + fontSize: 11.0, + fontWeight: FontWeight.w700, + fontFamily: 'Lato', + ), text: isExpanded ? ' zobacz mniej' : ' zobacz więcej', recognizer: TapGestureRecognizer() ..onTap = () { @@ -346,11 +360,12 @@ class _ExpandableTextState extends State { builder: (context, constraints) { final textSpan = TextSpan( text: widget.text, - style: TextStyle(color: Colors.black, - fontSize: 11.0, - fontWeight: FontWeight.w400, - fontFamily: 'Lato', - ) + style: TextStyle( + color: Colors.black, + fontSize: 11.0, + fontWeight: FontWeight.w400, + fontFamily: 'Lato', + ), ); final textPainter = TextPainter( @@ -402,4 +417,4 @@ class _ExpandableTextState extends State { }, ); } -} \ No newline at end of file +} From 5c8575930a9c990c54782a936f7252789156ac39 Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Fri, 2 Aug 2024 09:46:53 +0200 Subject: [PATCH 07/40] 85/fixes review --- lib/pages/detail/detail.dart | 60 ++++++++++++++------- lib/pages/detail/polish_capital_grapho.dart | 6 +-- 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index 53f4178..1e182e8 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -97,16 +97,15 @@ class DetailPage extends StatelessWidget { ), ), ), - SizedBox(height: 17.0), // Space before the divider + SizedBox(height: 17.0), Divider( thickness: 1.0, - color: Color(0xFFF0F0F0), // Divider color - indent: 17.0, // Left indent - endIndent: 17.0, // Right indent + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, ), - SizedBox(height: 22.0), // Space after the divider Padding( - padding: const EdgeInsets.only(left: 17.0, top: 8.0), + padding: const EdgeInsets.only(left: 17.0, top: 22.0), child: Align( alignment: Alignment.centerLeft, child: Text( @@ -119,7 +118,7 @@ class DetailPage extends StatelessWidget { ), ), ), - SizedBox(height: 22.0), // Space before the next section + SizedBox(height: 22.0), _DetailContent(searchResult, _handleReadMoreClick), ], ), @@ -156,30 +155,50 @@ class _DetailContent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomRadialGauge(percentage: plCapital), - SizedBox(width: 16.0), + SizedBox(width: 35.0), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - _DetailItem( - "Produkuje w Polsce", (company.plWorkers ?? 0) != 0), - _DetailItem( - "Prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), - _DetailItem("Zarejestrowana w Polsce", - (company.plRegistered ?? 0) != 0), - _DetailItem("Nie jest częścią zagranicznego koncernu", - (company.plNotGlobEnt ?? 0) != 0), + _DetailItem("Produkuje w Polsce", (company.plWorkers ?? 0) != 0), + SizedBox(height: 14.0), + _DetailItem("Prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), + SizedBox(height: 14.0), + _DetailItem("Zarejestrowana w Polsce", (company.plRegistered ?? 0) != 0), + SizedBox(height: 14.0), + _DetailItem("Nie jest częścią zagranicznego koncernu", (company.plNotGlobEnt ?? 0) != 0), ], ), ), ], ), + SizedBox(height: 22.0), + Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, + ), Padding( - padding: EdgeInsets.all(8.0), + padding: EdgeInsets.symmetric(vertical: 22.0, horizontal: 17.0,),// horizontl ma byc 22, vertical 17 child: ExpandableText(company.description ?? ""), ), + + Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, + ), _Logotypes( - logotypes: searchResult.logotypes(), searchResult: searchResult) + logotypes: searchResult.logotypes(), searchResult: searchResult), + SizedBox(height: 26.0), + Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, + ), ], ), ); @@ -199,7 +218,7 @@ class _DetailItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [ Padding( - padding: EdgeInsets.only(top: 0, right: 3.0), + padding: EdgeInsets.only(right: 3.0), child: SvgPicture.asset( state ? 'assets/task_alt.svg' : 'assets/radio_button_unchecked.svg', ), @@ -271,6 +290,9 @@ class _Logotypes extends StatelessWidget { @override Widget build(BuildContext context) { + if (logotypes.isEmpty) { + return Container(); + } return SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( diff --git a/lib/pages/detail/polish_capital_grapho.dart b/lib/pages/detail/polish_capital_grapho.dart index b04b743..fbb1099 100644 --- a/lib/pages/detail/polish_capital_grapho.dart +++ b/lib/pages/detail/polish_capital_grapho.dart @@ -12,8 +12,8 @@ class CustomRadialGauge extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( - height: 100.0, - width: 100.0, + height: 140.0, + width: 140.0, child: SfRadialGauge( axes: [ RadialAxis( @@ -38,7 +38,7 @@ class CustomRadialGauge extends StatelessWidget { ], annotations: [ GaugeAnnotation( - positionFactor: 0.1, + positionFactor: 0.01, angle: 90, widget: Text( '${percentage.toInt()}%', From 6d0b89f2fa01e7c5360e4d1042f30dd3121c5eb8 Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Fri, 2 Aug 2024 11:54:47 +0200 Subject: [PATCH 08/40] Slang library integration (#93) * Slang library integration * visual fix * visual fix/2 * visual fix/3 --- Gemfile.lock | 2 + devtools_options.yaml | 3 + lib/i18n/strings.g.dart | 189 +++++++++++++++++++++++++++++ lib/i18n/strings.i18n.json | 13 ++ lib/ui/menu_item_list_view.dart | 21 ++-- lib/ui/social_media_list_view.dart | 10 +- pubspec.lock | 32 +++++ pubspec.yaml | 2 + 8 files changed, 259 insertions(+), 13 deletions(-) create mode 100644 devtools_options.yaml create mode 100644 lib/i18n/strings.g.dart create mode 100644 lib/i18n/strings.i18n.json diff --git a/Gemfile.lock b/Gemfile.lock index ab83b6b..f05fcb0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -69,6 +69,7 @@ GEM ethon (0.16.0) ffi (>= 1.15.0) ffi (1.17.0-arm64-darwin) + ffi (1.17.0-x86_64-darwin) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) @@ -102,6 +103,7 @@ GEM PLATFORMS arm64-darwin-22 + x86_64-darwin-21 DEPENDENCIES cocoapods (= 1.14.2) diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart new file mode 100644 index 0000000..772f7bf --- /dev/null +++ b/lib/i18n/strings.g.dart @@ -0,0 +1,189 @@ +/// Generated file. Do not edit. +/// +/// Original: lib/i18n +/// To regenerate, run: `dart run slang` +/// +/// Locales: 1 +/// Strings: 9 +/// +/// Built on 2024-08-02 at 06:45 UTC + +// coverage:ignore-file +// ignore_for_file: type=lint + +import 'package:flutter/widgets.dart'; +import 'package:slang/builder/model/node.dart'; +import 'package:slang_flutter/slang_flutter.dart'; +export 'package:slang_flutter/slang_flutter.dart'; + +const AppLocale _baseLocale = AppLocale.en; + +/// Supported locales, see extension methods below. +/// +/// Usage: +/// - LocaleSettings.setLocale(AppLocale.en) // set locale +/// - Locale locale = AppLocale.en.flutterLocale // get flutter locale from enum +/// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check +enum AppLocale with BaseAppLocale { + en(languageCode: 'en', build: Translations.build); + + const AppLocale({required this.languageCode, this.scriptCode, this.countryCode, required this.build}); // ignore: unused_element + + @override final String languageCode; + @override final String? scriptCode; + @override final String? countryCode; + @override final TranslationBuilder build; + + /// Gets current instance managed by [LocaleSettings]. + Translations get translations => LocaleSettings.instance.translationMap[this]!; +} + +/// Method A: Simple +/// +/// No rebuild after locale change. +/// Translation happens during initialization of the widget (call of t). +/// Configurable via 'translate_var'. +/// +/// Usage: +/// String a = t.someKey.anotherKey; +/// String b = t['someKey.anotherKey']; // Only for edge cases! +Translations get t => LocaleSettings.instance.currentTranslations; + +/// Method B: Advanced +/// +/// All widgets using this method will trigger a rebuild when locale changes. +/// Use this if you have e.g. a settings page where the user can select the locale during runtime. +/// +/// Step 1: +/// wrap your App with +/// TranslationProvider( +/// child: MyApp() +/// ); +/// +/// Step 2: +/// final t = Translations.of(context); // Get t variable. +/// String a = t.someKey.anotherKey; // Use t variable. +/// String b = t['someKey.anotherKey']; // Only for edge cases! +class TranslationProvider extends BaseTranslationProvider { + TranslationProvider({required super.child}) : super(settings: LocaleSettings.instance); + + static InheritedLocaleData of(BuildContext context) => InheritedLocaleData.of(context); +} + +/// Method B shorthand via [BuildContext] extension method. +/// Configurable via 'translate_var'. +/// +/// Usage (e.g. in a widget's build method): +/// context.t.someKey.anotherKey +extension BuildContextTranslationsExtension on BuildContext { + Translations get t => TranslationProvider.of(this).translations; +} + +/// Manages all translation instances and the current locale +class LocaleSettings extends BaseFlutterLocaleSettings { + LocaleSettings._() : super(utils: AppLocaleUtils.instance); + + static final instance = LocaleSettings._(); + + // static aliases (checkout base methods for documentation) + static AppLocale get currentLocale => instance.currentLocale; + static Stream getLocaleStream() => instance.getLocaleStream(); + static AppLocale setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale); + static AppLocale setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale); + static AppLocale useDeviceLocale() => instance.useDeviceLocale(); + @Deprecated('Use [AppLocaleUtils.supportedLocales]') static List get supportedLocales => instance.supportedLocales; + @Deprecated('Use [AppLocaleUtils.supportedLocalesRaw]') static List get supportedLocalesRaw => instance.supportedLocalesRaw; + static void setPluralResolver({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolver( + language: language, + locale: locale, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); +} + +/// Provides utility functions without any side effects. +class AppLocaleUtils extends BaseAppLocaleUtils { + AppLocaleUtils._() : super(baseLocale: _baseLocale, locales: AppLocale.values); + + static final instance = AppLocaleUtils._(); + + // static aliases (checkout base methods for documentation) + static AppLocale parse(String rawLocale) => instance.parse(rawLocale); + static AppLocale parseLocaleParts({required String languageCode, String? scriptCode, String? countryCode}) => instance.parseLocaleParts(languageCode: languageCode, scriptCode: scriptCode, countryCode: countryCode); + static AppLocale findDeviceLocale() => instance.findDeviceLocale(); + static List get supportedLocales => instance.supportedLocales; + static List get supportedLocalesRaw => instance.supportedLocalesRaw; +} + +// translations + +// Path: +class Translations implements BaseTranslations { + /// Returns the current translations of the given [context]. + /// + /// Usage: + /// final t = Translations.of(context); + static Translations of(BuildContext context) => InheritedLocaleData.of(context).translations; + + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + Translations.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.en, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } + + /// Metadata for the translations of . + @override final TranslationMetadata $meta; + + /// Access flat map + dynamic operator[](String key) => $meta.getTranslation(key); + + late final Translations _root = this; // ignore: unused_field + + // Translations + late final _StringsMenuEn menu = _StringsMenuEn._(_root); +} + +// Path: menu +class _StringsMenuEn { + _StringsMenuEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + String get aboutPola => 'O aplikacji Pola'; + String get aboutClub => ' O Klubie Jagielońskim'; + String get instruction => 'Jak oceniamy Firmy'; + String get partners => 'Partnerzy'; + String get polasFriends => 'Przyjaciele Poli'; + String get rateUS => 'Oceń Polę'; + String get team => 'Zespół'; + String get findUs => 'Znajdź nas tutaj'; + String get footer => 'Aplikacja Pola \n© Klub Jagielloński'; +} + +/// Flat map(s) containing all translations. +/// Only for edge cases! For simple maps, use the map function of this library. + +extension on Translations { + dynamic _flatMapFunction(String path) { + switch (path) { + case 'menu.aboutPola': return 'O aplikacji Pola'; + case 'menu.aboutClub': return ' O Klubie Jagielońskim'; + case 'menu.instruction': return 'Jak oceniamy Firmy'; + case 'menu.partners': return 'Partnerzy'; + case 'menu.polasFriends': return 'Przyjaciele Poli'; + case 'menu.rateUS': return 'Oceń Polę'; + case 'menu.team': return 'Zespół'; + case 'menu.findUs': return 'Znajdź nas tutaj'; + case 'menu.footer': return 'Aplikacja Pola \n© Klub Jagielloński'; + default: return null; + } + } +} diff --git a/lib/i18n/strings.i18n.json b/lib/i18n/strings.i18n.json new file mode 100644 index 0000000..eb728b8 --- /dev/null +++ b/lib/i18n/strings.i18n.json @@ -0,0 +1,13 @@ +{ + "menu": { + "aboutPola": "O aplikacji Pola", + "aboutClub": " O Klubie Jagielońskim", + "instruction": "Jak oceniamy Firmy", + "partners": "Partnerzy", + "polasFriends": "Przyjaciele Poli", + "rateUS": "Oceń Polę", + "team": "Zespół", + "findUs": "Znajdź nas tutaj", + "footer": "Aplikacja Pola \n© Klub Jagielloński" + } +} diff --git a/lib/ui/menu_item_list_view.dart b/lib/ui/menu_item_list_view.dart index 674f8d1..636fbc9 100644 --- a/lib/ui/menu_item_list_view.dart +++ b/lib/ui/menu_item_list_view.dart @@ -3,53 +3,55 @@ import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; +import 'package:pola_flutter/i18n/strings.g.dart'; class MenuItemListView extends StatelessWidget { final PolaAnalytics analytics; const MenuItemListView({super.key, required this.analytics}); - @override + @override Widget build(BuildContext context) { + final Translations t = Translations.of(context); return Column( children: [ _webViewItem( context: context, - text: "O aplikacji Pola", + text: t.menu.aboutPola, iconPath: 'info', analyticsRow: AnalyticsAboutRow.aboutPola, url: 'https://www.pola-app.pl/m/about', ), _webViewItem( context: context, - text: "O Klubie Jagielońskim", + text: t.menu.aboutClub, iconPath: 'info', analyticsRow: AnalyticsAboutRow.aboutKJ, url: 'https://klubjagiellonski.pl/o-klubie-jagiellonskim/', ), _webViewItem( context: context, - text: "Jak oceniamy Firmy", + text: t.menu.instruction, iconPath: 'thumbs', analyticsRow: AnalyticsAboutRow.instructionSet, url: 'https://www.pola-app.pl/m/method', ), _webViewItem( context: context, - text: "Partnerzy", + text: t.menu.partners, iconPath: 'handshake', analyticsRow: AnalyticsAboutRow.partners, url: 'https://www.pola-app.pl/m/partners', ), _webViewItem( context: context, - text: "Przyjaciele Poli", + text: t.menu.polasFriends, iconPath: 'diversity', analyticsRow: AnalyticsAboutRow.polasFriends, url: 'https://www.pola-app.pl/m/friends', ), _externalUrlItem( - text: "Oceń Polę", + text: t.menu.rateUS, iconPath: 'star', analyticsRow: AnalyticsAboutRow.rateUs, url: Platform.isIOS @@ -58,7 +60,7 @@ class MenuItemListView extends StatelessWidget { ), _webViewItem( context: context, - text: "Zespół", + text: t.menu.team, iconPath: 'groups', analyticsRow: AnalyticsAboutRow.team, url: 'https://www.pola-app.pl/m/team', @@ -85,7 +87,7 @@ class MenuItemListView extends StatelessWidget { iconPath: iconPath, onClick: () { analytics.aboutOpened(analyticsRow); - Navigator.pushNamed(context, '/web', arguments: url); + Navigator.pushNamed(context, '/web', arguments: url); }, ); } @@ -105,6 +107,7 @@ class MenuItemListView extends StatelessWidget { }, ); } + void _launchURL(String url) async { launchUrl( Uri.parse(url), diff --git a/lib/ui/social_media_list_view.dart b/lib/ui/social_media_list_view.dart index 25ebb58..a7a3803 100644 --- a/lib/ui/social_media_list_view.dart +++ b/lib/ui/social_media_list_view.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'package:pola_flutter/i18n/strings.g.dart'; class SocialMediaListView extends StatelessWidget { final PolaAnalytics analytics; @@ -10,13 +11,14 @@ class SocialMediaListView extends StatelessWidget { @override Widget build(BuildContext context) { + final Translations t = Translations.of(context); return Column( children: [ Row( - children: const [ + children: [ SizedBox(width: 32.0), Text( - "Znajdź nas tutaj", + t.menu.findUs, style: TextStyle( fontSize: 12, fontWeight: FontWeight.w700, @@ -56,10 +58,10 @@ class SocialMediaListView extends StatelessWidget { ), const SizedBox(height: 17.0), Row( - children: const [ + children: [ SizedBox(width: 32.0), Text( - "Aplikacja Pola \n© Klub Jagielloński", + t.menu.footer, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, diff --git a/pubspec.lock b/pubspec.lock index cb4de6c..a077310 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -241,6 +241,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csv: + dependency: transitive + description: + name: csv + sha256: c6aa2679b2a18cb57652920f674488d89712efaf4d3fdf2e537215b35fc19d6c + url: "https://pub.dev" + source: hosted + version: "6.0.0" cupertino_icons: dependency: "direct main" description: @@ -512,6 +520,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" + json2yaml: + dependency: transitive + description: + name: json2yaml + sha256: da94630fbc56079426fdd167ae58373286f603371075b69bf46d848d63ba3e51 + url: "https://pub.dev" + source: hosted + version: "3.0.1" json_annotation: dependency: "direct main" description: @@ -845,6 +861,22 @@ packages: description: flutter source: sdk version: "0.0.99" + slang: + dependency: "direct main" + description: + name: slang + sha256: f68f6d6709890f85efabfb0318e9d694be2ebdd333e57fe5cb50eee449e4e3ab + url: "https://pub.dev" + source: hosted + version: "3.31.1" + slang_flutter: + dependency: "direct main" + description: + name: slang_flutter + sha256: f8400292be49c11697d94af58d7f7d054c91af759f41ffe71e4e5413871ffc62 + url: "https://pub.dev" + source: hosted + version: "3.31.0" source_gen: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 507da6f..1226f87 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,6 +30,8 @@ dependencies: url_launcher: ^6.1.7 vibration: ^1.7.6 firebase_analytics: ^11.1.0 + slang: ^3.31.1 + slang_flutter: ^3.31.0 dev_dependencies: flutter_test: From 22ac5b22a6da1ed3f94348b4f353fba22b4c6f3c Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Fri, 2 Aug 2024 12:14:20 +0200 Subject: [PATCH 09/40] 85/fixes review --- lib/pages/detail/detail.dart | 193 ++++++++++++++++++----------------- 1 file changed, 97 insertions(+), 96 deletions(-) diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index 1e182e8..9da44f0 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -33,9 +33,6 @@ class DetailPage extends StatelessWidget { return LidlDetailPage(searchResult: searchResult); } - final company = searchResult.companies?.first; - final score = company?.plScore ?? 0; - return Scaffold( backgroundColor: Colors.white, appBar: AppBar( @@ -50,75 +47,7 @@ class DetailPage extends StatelessWidget { child: Column( children: [ SizedBox(height: 16.0), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 17.0), - child: Align( - alignment: Alignment.centerLeft, - child: Row( - children: [ - SvgPicture.asset( - 'assets/info.svg', - height: 24.0, - width: 24.0, - ), - SizedBox(width: 8.0), - Text( - "Nasza ocena:", - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, - fontFamily: 'Lato', - ), - ), - SizedBox(width: 8.0), - Text( - "$score pkt", - style: TextStyle( - fontSize: 20.0, - fontWeight: FontWeight.w700, - fontFamily: 'Lato', - ), - ), - ], - ), - ), - ), - Padding( - padding: - const EdgeInsets.symmetric(vertical: 8.0, horizontal: 17.0), - child: ClipRRect( - borderRadius: BorderRadius.circular(10.0), - child: LinearProgressIndicator( - value: score / 100.0, - backgroundColor: Color(0xFFF5DEDD), - valueColor: - AlwaysStoppedAnimation(Color(0xFFE1203E)), - minHeight: 12.0, - ), - ), - ), - SizedBox(height: 17.0), - Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, - ), - Padding( - padding: const EdgeInsets.only(left: 17.0, top: 22.0), - child: Align( - alignment: Alignment.centerLeft, - child: Text( - "Kryteria oceniania:", - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, - fontFamily: 'Lato', - ), - ), - ), - ), - SizedBox(height: 22.0), + _DetailContent(searchResult, _handleReadMoreClick), ], ), @@ -128,7 +57,7 @@ class DetailPage extends StatelessWidget { } } -class _DetailContent extends StatelessWidget { + class _DetailContent extends StatelessWidget { _DetailContent(this.searchResult, this.onReadMoreClick); final SearchResult searchResult; @@ -144,13 +73,85 @@ class _DetailContent extends StatelessWidget { } final company = searchResult.companies!.first; + final score = company.plScore ?? 0; final double plCapital = (company.plCapital ?? 0).toDouble(); + // Check if the company has a logo and description + final hasLogo = company.logotypeUrl != null; + final hasDescription = company.description?.isNotEmpty ?? false; + return Padding( padding: const EdgeInsets.symmetric(horizontal: 17.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 17.0), + child: Align( + alignment: Alignment.centerLeft, + child: Row( + children: [ + SvgPicture.asset( + 'assets/info.svg', + height: 24.0, + width: 24.0, + ), + SizedBox(width: 8.0), + Text( + "Nasza ocena:", + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + fontFamily: 'Lato', + ), + ), + SizedBox(width: 8.0), + Text( + "$score pkt", + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.w700, + fontFamily: 'Lato', + ), + ), + ], + ), + ), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 17.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(10.0), + child: LinearProgressIndicator( + value: score / 100.0, + backgroundColor: Color(0xFFF5DEDD), + valueColor: AlwaysStoppedAnimation(Color(0xFFE1203E)), + minHeight: 12.0, + ), + ), + ), + SizedBox(height: 17.0), + Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, + ), + Padding( + padding: const EdgeInsets.only(left: 17.0, top: 22.0), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + "Kryteria oceniania:", + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + fontFamily: 'Lato', + ), + ), + ), + ), + SizedBox(height: 22.0), Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -161,43 +162,43 @@ class _DetailContent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ _DetailItem("Produkuje w Polsce", (company.plWorkers ?? 0) != 0), - SizedBox(height: 14.0), + SizedBox(height: 14.0), _DetailItem("Prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), - SizedBox(height: 14.0), + SizedBox(height: 14.0), _DetailItem("Zarejestrowana w Polsce", (company.plRegistered ?? 0) != 0), - SizedBox(height: 14.0), + SizedBox(height: 14.0), _DetailItem("Nie jest częścią zagranicznego koncernu", (company.plNotGlobEnt ?? 0) != 0), ], ), ), ], ), - SizedBox(height: 22.0), - Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, - ), - Padding( - padding: EdgeInsets.symmetric(vertical: 22.0, horizontal: 17.0,),// horizontl ma byc 22, vertical 17 - child: ExpandableText(company.description ?? ""), - ), - + SizedBox(height: 22.0), Divider( thickness: 1.0, color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, + indent: 17.0, + endIndent: 17.0, ), - _Logotypes( - logotypes: searchResult.logotypes(), searchResult: searchResult), - SizedBox(height: 26.0), - Divider( + if (hasDescription) ...[ + Padding( + padding: EdgeInsets.symmetric(vertical: 22.0, horizontal: 17.0), + child: ExpandableText(company.description ?? ""), + ), + if (hasLogo) Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, + ), + ], + if (hasLogo) _Logotypes(logotypes: searchResult.logotypes(), searchResult: searchResult), + SizedBox(height: 26.0), + if (hasLogo) Divider( thickness: 1.0, color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, + indent: 17.0, + endIndent: 17.0, ), ], ), From 2ec7947fb4c9a5b8c6b106da8952f4bfd2751602 Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Fri, 2 Aug 2024 15:16:55 +0200 Subject: [PATCH 10/40] slang repair (#96) --- lib/main.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/main.dart b/lib/main.dart index bd5d3f8..912255e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,6 +6,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:logging/logging.dart'; import 'package:pola_flutter/analytics/analytics_main_tab.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; +import 'package:pola_flutter/i18n/strings.g.dart'; import 'package:pola_flutter/models/search_result.dart'; import 'package:pola_flutter/pages/dialpad/dialpad.dart'; import 'package:pola_flutter/pages/scan/scan.dart'; @@ -22,7 +23,7 @@ void main() async { options: DefaultFirebaseOptions.currentPlatform, ); } - runApp(PolaApp()); + runApp(TranslationProvider(child: PolaApp())); } class PolaApp extends StatefulWidget { From 6811b1870a0abeb8f42ccb3eaa79a79d1c86c729 Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:40:00 +0200 Subject: [PATCH 11/40] Webview Heading (#97) --- lib/main.dart | 24 ++++++++++++------------ lib/pages/scan/scan.dart | 6 ++++-- lib/ui/menu_item_list_view.dart | 6 +++++- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 912255e..d4f5d92 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -78,16 +78,14 @@ class _PolaAppState extends State { return MainPage(); case 1: return WebViewPage( - title: "Wyszukiwarka", - url: "https://www.pola-app.pl/m/search/", - showBackButton: false - ); + title: "Wyszukiwarka", + url: "https://www.pola-app.pl/m/search/", + showBackButton: false); case 2: return WebViewPage( - title: "Wiadomości", - url: "https://www.pola-app.pl/m/blog/", - showBackButton: false - ); + title: "Wiadomości", + url: "https://www.pola-app.pl/m/blog/", + showBackButton: false); default: return MainPage(); } @@ -133,12 +131,14 @@ class RouteGenerator { case '/dialpad': return MaterialPageRoute(builder: (_) => DialPadPage()); case '/web': - if (args is String) { + if (args is Map) { + final url = args['url'] as String; + final title = args['title'] as String; return MaterialPageRoute( builder: (_) => WebViewPage( - title: "O Aplikacji Pola", - url: args, - showBackButton: true + title: title, + url: url, + showBackButton: true, ), ); } diff --git a/lib/pages/scan/scan.dart b/lib/pages/scan/scan.dart index 6050ce0..3334957 100644 --- a/lib/pages/scan/scan.dart +++ b/lib/pages/scan/scan.dart @@ -45,8 +45,10 @@ class _MainPageState extends State { leading: IconButton( onPressed: () { _analytics.aboutPolaOpened(); - Navigator.pushNamed(context, '/web', - arguments: "https://www.pola-app.pl/m/about"); + Navigator.pushNamed(context, '/web', arguments: { + 'url': "https://www.pola-app.pl/m/about", + 'title': "O Aplikacji Pola" + }); }, icon: Image.asset("assets/ic_launcher.png"), ), diff --git a/lib/ui/menu_item_list_view.dart b/lib/ui/menu_item_list_view.dart index 636fbc9..02efda8 100644 --- a/lib/ui/menu_item_list_view.dart +++ b/lib/ui/menu_item_list_view.dart @@ -87,7 +87,11 @@ class MenuItemListView extends StatelessWidget { iconPath: iconPath, onClick: () { analytics.aboutOpened(analyticsRow); - Navigator.pushNamed(context, '/web', arguments: url); + Navigator.pushNamed( + context, + '/web', + arguments: {'url': url, 'title': text}, + ); }, ); } From 2c3319bfa678e9c5359134f73cfa172427cf1390 Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Tue, 6 Aug 2024 09:06:08 +0200 Subject: [PATCH 12/40] 85/fixes review --- lib/i18n/strings.g.dart | 34 ++++++++++++++++-- lib/i18n/strings.i18n.json | 12 +++++++ lib/pages/detail/detail.dart | 40 ++++++++------------- lib/pages/detail/polish_capital_grapho.dart | 4 ++- 4 files changed, 61 insertions(+), 29 deletions(-) diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 772f7bf..f6bcc57 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 1 -/// Strings: 9 +/// Strings: 19 /// -/// Built on 2024-08-02 at 06:45 UTC +/// Built on 2024-08-05 at 10:55 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -148,6 +148,7 @@ class Translations implements BaseTranslations { // Translations late final _StringsMenuEn menu = _StringsMenuEn._(_root); + late final _StringsCompanyScreenEn companyScreen = _StringsCompanyScreenEn._(_root); } // Path: menu @@ -168,6 +169,25 @@ class _StringsMenuEn { String get footer => 'Aplikacja Pola \n© Klub Jagielloński'; } +// Path: companyScreen +class _StringsCompanyScreenEn { + _StringsCompanyScreenEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + String get ourRating => 'Nasza ocena:'; + String get gradingCriteria => 'Kryteria oceniania:'; + String get polishCapital => 'Polski kapitał'; + String get producedInPoland => 'Produkuje w Polsce'; + String get researchInPoland => 'Prowadzi badania w Polsce'; + String get registeredInPoland => 'Zarejestrowana w Polsce'; + String get notConcernPart => 'Nie jest częścią zagranicznego koncernu'; + String get seeMore => 'zobacz więcej'; + String get seeLess => 'zobacz mniej'; + String points({required Object score}) => 'pkt ${score}'; +} + /// Flat map(s) containing all translations. /// Only for edge cases! For simple maps, use the map function of this library. @@ -183,6 +203,16 @@ extension on Translations { case 'menu.team': return 'Zespół'; case 'menu.findUs': return 'Znajdź nas tutaj'; case 'menu.footer': return 'Aplikacja Pola \n© Klub Jagielloński'; + case 'companyScreen.ourRating': return 'Nasza ocena:'; + case 'companyScreen.gradingCriteria': return 'Kryteria oceniania:'; + case 'companyScreen.polishCapital': return 'Polski kapitał'; + case 'companyScreen.producedInPoland': return 'Produkuje w Polsce'; + case 'companyScreen.researchInPoland': return 'Prowadzi badania w Polsce'; + case 'companyScreen.registeredInPoland': return 'Zarejestrowana w Polsce'; + case 'companyScreen.notConcernPart': return 'Nie jest częścią zagranicznego koncernu'; + case 'companyScreen.seeMore': return 'zobacz więcej'; + case 'companyScreen.seeLess': return 'zobacz mniej'; + case 'companyScreen.points': return ({required Object score}) => 'pkt ${score}'; default: return null; } } diff --git a/lib/i18n/strings.i18n.json b/lib/i18n/strings.i18n.json index eb728b8..a9ca793 100644 --- a/lib/i18n/strings.i18n.json +++ b/lib/i18n/strings.i18n.json @@ -9,5 +9,17 @@ "team": "Zespół", "findUs": "Znajdź nas tutaj", "footer": "Aplikacja Pola \n© Klub Jagielloński" + }, + "companyScreen": { + "ourRating": "Nasza ocena:", + "gradingCriteria": "Kryteria oceniania:", + "polishCapital": "Polski kapitał", + "producedInPoland": "Produkuje w Polsce", + "researchInPoland": "Prowadzi badania w Polsce", + "registeredInPoland": "Zarejestrowana w Polsce", + "notConcernPart":"Nie jest częścią zagranicznego koncernu", + "seeMore":"zobacz więcej", + "seeLess":"zobacz mniej", + "points":"pkt $score" } } diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index 9da44f0..8fb185d 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -5,6 +5,7 @@ import 'package:pola_flutter/models/company.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; import 'package:pola_flutter/models/search_result.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'package:pola_flutter/i18n/strings.g.dart'; import 'detail_lidl.dart'; import 'polish_capital_grapho.dart'; @@ -13,19 +14,6 @@ class DetailPage extends StatelessWidget { DetailPage({Key? key, required this.searchResult}) : super(key: key); final SearchResult searchResult; - final PolaAnalytics _analytics = PolaAnalytics.instance(); - - void _handleReadMoreClick(BuildContext context, String? url) { - if (url == null) return; - final Uri? uri = Uri.tryParse(url); - if (uri == null) return; - - _analytics.readMore(searchResult, url); - launchUrl( - uri, - mode: LaunchMode.externalApplication, - ); - } @override Widget build(BuildContext context) { @@ -48,7 +36,7 @@ class DetailPage extends StatelessWidget { children: [ SizedBox(height: 16.0), - _DetailContent(searchResult, _handleReadMoreClick), + _DetailContent(searchResult), ], ), ), @@ -58,10 +46,9 @@ class DetailPage extends StatelessWidget { } class _DetailContent extends StatelessWidget { - _DetailContent(this.searchResult, this.onReadMoreClick); + _DetailContent(this.searchResult); final SearchResult searchResult; - final void Function(BuildContext, String?) onReadMoreClick; @override Widget build(BuildContext context) { @@ -76,7 +63,7 @@ class DetailPage extends StatelessWidget { final score = company.plScore ?? 0; final double plCapital = (company.plCapital ?? 0).toDouble(); - // Check if the company has a logo and description + final hasLogo = company.logotypeUrl != null; final hasDescription = company.description?.isNotEmpty ?? false; @@ -97,8 +84,9 @@ class DetailPage extends StatelessWidget { width: 24.0, ), SizedBox(width: 8.0), + Text( - "Nasza ocena:", + t.companyScreen.ourRating, style: TextStyle( fontSize: 16.0, fontWeight: FontWeight.w600, @@ -107,7 +95,7 @@ class DetailPage extends StatelessWidget { ), SizedBox(width: 8.0), Text( - "$score pkt", + t.companyScreen. points(score: score), style: TextStyle( fontSize: 20.0, fontWeight: FontWeight.w700, @@ -142,7 +130,7 @@ class DetailPage extends StatelessWidget { child: Align( alignment: Alignment.centerLeft, child: Text( - "Kryteria oceniania:", + t.companyScreen.gradingCriteria, style: TextStyle( fontSize: 16.0, fontWeight: FontWeight.w600, @@ -161,13 +149,13 @@ class DetailPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - _DetailItem("Produkuje w Polsce", (company.plWorkers ?? 0) != 0), + _DetailItem( t.companyScreen.producedInPoland, (company.plWorkers ?? 0) != 0), SizedBox(height: 14.0), - _DetailItem("Prowadzi badania w Polsce", (company.plRnD ?? 0) != 0), + _DetailItem( t.companyScreen.researchInPoland, (company.plRnD ?? 0) != 0), SizedBox(height: 14.0), - _DetailItem("Zarejestrowana w Polsce", (company.plRegistered ?? 0) != 0), + _DetailItem( t.companyScreen.registeredInPoland, (company.plRegistered ?? 0) != 0), SizedBox(height: 14.0), - _DetailItem("Nie jest częścią zagranicznego koncernu", (company.plNotGlobEnt ?? 0) != 0), + _DetailItem( t.companyScreen.notConcernPart, (company.plNotGlobEnt ?? 0) != 0), ], ), ), @@ -361,7 +349,7 @@ class ExpandableText extends StatefulWidget { class _ExpandableTextState extends State { bool isExpanded = false; - @override + @override Widget build(BuildContext context) { final link = TextSpan( style: TextStyle( @@ -370,7 +358,7 @@ class _ExpandableTextState extends State { fontWeight: FontWeight.w700, fontFamily: 'Lato', ), - text: isExpanded ? ' zobacz mniej' : ' zobacz więcej', + text: isExpanded ? t.companyScreen.seeLess : t.companyScreen.seeMore, recognizer: TapGestureRecognizer() ..onTap = () { setState(() { diff --git a/lib/pages/detail/polish_capital_grapho.dart b/lib/pages/detail/polish_capital_grapho.dart index fbb1099..bef3815 100644 --- a/lib/pages/detail/polish_capital_grapho.dart +++ b/lib/pages/detail/polish_capital_grapho.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:syncfusion_flutter_gauges/gauges.dart'; +import 'package:pola_flutter/i18n/strings.g.dart'; class CustomRadialGauge extends StatelessWidget { final double percentage; @@ -8,6 +9,7 @@ class CustomRadialGauge extends StatelessWidget { @override Widget build(BuildContext context) { + final Translations t = Translations.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -57,7 +59,7 @@ class CustomRadialGauge extends StatelessWidget { Padding( padding: const EdgeInsets.only(top: 0.0), child: Text( - 'Polski kapitał', + t.companyScreen.polishCapital, style: TextStyle( fontSize: 11.0, fontWeight: FontWeight.w400, From e0ee5db5b9fe1372eb05bdba29ae3f5f12838889 Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Tue, 6 Aug 2024 10:49:01 +0200 Subject: [PATCH 13/40] 85/fixes review --- lib/pages/detail/detail.dart | 6 +++--- ...pital_grapho.dart => polish_capital_graph.dart} | 14 ++++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) rename lib/pages/detail/{polish_capital_grapho.dart => polish_capital_graph.dart} (87%) diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index 8fb185d..b486c60 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -8,7 +8,7 @@ import 'package:url_launcher/url_launcher.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; import 'detail_lidl.dart'; -import 'polish_capital_grapho.dart'; +import 'polish_capital_graph.dart'; class DetailPage extends StatelessWidget { DetailPage({Key? key, required this.searchResult}) : super(key: key); @@ -62,7 +62,7 @@ class DetailPage extends StatelessWidget { final company = searchResult.companies!.first; final score = company.plScore ?? 0; final double plCapital = (company.plCapital ?? 0).toDouble(); - + final Translations t = Translations.of(context); final hasLogo = company.logotypeUrl != null; final hasDescription = company.description?.isNotEmpty ?? false; @@ -143,7 +143,7 @@ class DetailPage extends StatelessWidget { Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - CustomRadialGauge(percentage: plCapital), + PolishCapitalGraph(percentage: plCapital), SizedBox(width: 35.0), Expanded( child: Column( diff --git a/lib/pages/detail/polish_capital_grapho.dart b/lib/pages/detail/polish_capital_graph.dart similarity index 87% rename from lib/pages/detail/polish_capital_grapho.dart rename to lib/pages/detail/polish_capital_graph.dart index bef3815..fd26d5c 100644 --- a/lib/pages/detail/polish_capital_grapho.dart +++ b/lib/pages/detail/polish_capital_graph.dart @@ -2,20 +2,22 @@ import 'package:flutter/material.dart'; import 'package:syncfusion_flutter_gauges/gauges.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; -class CustomRadialGauge extends StatelessWidget { +class PolishCapitalGraph extends StatelessWidget { final double percentage; - CustomRadialGauge({required this.percentage}); + PolishCapitalGraph({required this.percentage}); @override Widget build(BuildContext context) { - final Translations t = Translations.of(context); + // final Translations t = Translations.of(context); + final size = 140.0; + return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( - height: 140.0, - width: 140.0, + height: size, + width: size, child: SfRadialGauge( axes: [ RadialAxis( @@ -59,7 +61,7 @@ class CustomRadialGauge extends StatelessWidget { Padding( padding: const EdgeInsets.only(top: 0.0), child: Text( - t.companyScreen.polishCapital, + "t.companyScreen.polishCapital", style: TextStyle( fontSize: 11.0, fontWeight: FontWeight.w400, From bdec06b1465b0195590621fceeb6ff8d9569fff1 Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Thu, 8 Aug 2024 08:56:27 +0200 Subject: [PATCH 14/40] 85/fixesreview --- lib/pages/detail/detail.dart | 396 +-------------------- lib/pages/detail/detail_content.dart | 227 ++++++++++++ lib/pages/detail/expandandable_text.dart | 95 +++++ lib/pages/detail/logotypes.dart | 84 +++++ lib/pages/detail/polish_capital_graph.dart | 5 +- 5 files changed, 411 insertions(+), 396 deletions(-) create mode 100644 lib/pages/detail/detail_content.dart create mode 100644 lib/pages/detail/expandandable_text.dart create mode 100644 lib/pages/detail/logotypes.dart diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index b486c60..afdbf2d 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -1,14 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter/gestures.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -import 'package:pola_flutter/models/company.dart'; -import 'package:pola_flutter/analytics/pola_analytics.dart'; import 'package:pola_flutter/models/search_result.dart'; -import 'package:url_launcher/url_launcher.dart'; -import 'package:pola_flutter/i18n/strings.g.dart'; - import 'detail_lidl.dart'; -import 'polish_capital_graph.dart'; +import 'detail_content.dart'; class DetailPage extends StatelessWidget { DetailPage({Key? key, required this.searchResult}) : super(key: key); @@ -36,7 +29,7 @@ class DetailPage extends StatelessWidget { children: [ SizedBox(height: 16.0), - _DetailContent(searchResult), + DetailContent(searchResult), ], ), ), @@ -45,387 +38,4 @@ class DetailPage extends StatelessWidget { } } - class _DetailContent extends StatelessWidget { - _DetailContent(this.searchResult); - - final SearchResult searchResult; - - @override - Widget build(BuildContext context) { - if (searchResult.companies == null) { - return Padding( - padding: EdgeInsets.all(8.0), - child: Text(searchResult.altText ?? ""), - ); - } - - final company = searchResult.companies!.first; - final score = company.plScore ?? 0; - final double plCapital = (company.plCapital ?? 0).toDouble(); - final Translations t = Translations.of(context); - - final hasLogo = company.logotypeUrl != null; - final hasDescription = company.description?.isNotEmpty ?? false; - - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 17.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 17.0), - child: Align( - alignment: Alignment.centerLeft, - child: Row( - children: [ - SvgPicture.asset( - 'assets/info.svg', - height: 24.0, - width: 24.0, - ), - SizedBox(width: 8.0), - - Text( - t.companyScreen.ourRating, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, - fontFamily: 'Lato', - ), - ), - SizedBox(width: 8.0), - Text( - t.companyScreen. points(score: score), - style: TextStyle( - fontSize: 20.0, - fontWeight: FontWeight.w700, - fontFamily: 'Lato', - ), - ), - ], - ), - ), - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 17.0), - child: ClipRRect( - borderRadius: BorderRadius.circular(10.0), - child: LinearProgressIndicator( - value: score / 100.0, - backgroundColor: Color(0xFFF5DEDD), - valueColor: AlwaysStoppedAnimation(Color(0xFFE1203E)), - minHeight: 12.0, - ), - ), - ), - SizedBox(height: 17.0), - Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, - ), - Padding( - padding: const EdgeInsets.only(left: 17.0, top: 22.0), - child: Align( - alignment: Alignment.centerLeft, - child: Text( - t.companyScreen.gradingCriteria, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, - fontFamily: 'Lato', - ), - ), - ), - ), - SizedBox(height: 22.0), - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - PolishCapitalGraph(percentage: plCapital), - SizedBox(width: 35.0), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _DetailItem( t.companyScreen.producedInPoland, (company.plWorkers ?? 0) != 0), - SizedBox(height: 14.0), - _DetailItem( t.companyScreen.researchInPoland, (company.plRnD ?? 0) != 0), - SizedBox(height: 14.0), - _DetailItem( t.companyScreen.registeredInPoland, (company.plRegistered ?? 0) != 0), - SizedBox(height: 14.0), - _DetailItem( t.companyScreen.notConcernPart, (company.plNotGlobEnt ?? 0) != 0), - ], - ), - ), - ], - ), - SizedBox(height: 22.0), - Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, - ), - if (hasDescription) ...[ - Padding( - padding: EdgeInsets.symmetric(vertical: 22.0, horizontal: 17.0), - child: ExpandableText(company.description ?? ""), - ), - if (hasLogo) Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, - ), - ], - if (hasLogo) _Logotypes(logotypes: searchResult.logotypes(), searchResult: searchResult), - SizedBox(height: 26.0), - if (hasLogo) Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, - ), - ], - ), - ); - } -} - -class _DetailItem extends StatelessWidget { - _DetailItem(this.text, this.state); - - final String text; - final bool state; - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.only(right: 3.0), - child: SvgPicture.asset( - state ? 'assets/task_alt.svg' : 'assets/radio_button_unchecked.svg', - ), - ), - Expanded( - child: Text( - text, - style: TextStyle( - fontSize: 11, - fontWeight: FontWeight.w400, - fontFamily: 'Lato', - ), - softWrap: true, - overflow: TextOverflow.visible, - ), - ), - ], - ); - } -} - -class Logotype { - final String imageUrl; - final String? websiteUrl; - - Logotype(this.imageUrl, this.websiteUrl); -} - -extension on SearchResult { - List logotypes() { - var brandLogotypes = allCompanyBrands?.map((brand) { - final brandLogotype = brand.logotypeUrl; - if (brandLogotype != null) { - return Logotype(brandLogotype, null); - } else { - return null; - } - }).toList() ?? - []; - - final logotypeCompany = companies?.first.logotype(); - - brandLogotypes.insert(0, logotypeCompany); - - return brandLogotypes - .where((logotype) => logotype != null) - .cast() - .toList(); - } -} - -extension on Company { - Logotype? logotype() { - final logotypeUrl = this.logotypeUrl; - if (logotypeUrl != null) { - return Logotype(logotypeUrl, officialUrl); - } else { - return null; - } - } -} - -class _Logotypes extends StatelessWidget { - final List logotypes; - final SearchResult searchResult; - final PolaAnalytics analytics = PolaAnalytics.instance(); - - _Logotypes({required this.logotypes, required this.searchResult}); - - @override - Widget build(BuildContext context) { - if (logotypes.isEmpty) { - return Container(); - } - return SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Row( - children: logotypes.map((logotype) { - return GestureDetector( - onTap: () { - final url = logotype.websiteUrl; - if (url == null) return; - final Uri? uri = Uri.tryParse(url); - if (uri == null) return; - - analytics.readMore(searchResult, url); - launchUrl( - uri, - mode: LaunchMode.externalApplication, - ); - }, - child: Padding( - padding: EdgeInsets.all(8.0), - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - color: Color(0xFFF8F8F8), - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.3), - spreadRadius: 1, - blurRadius: 5, - offset: Offset(0, 3), - ), - ], - ), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: _LogoView(logotype.imageUrl), - ), - ), - ), - ); - }).toList(), - ), - ); - } -} - -class _LogoView extends StatelessWidget { - _LogoView(this.url); - - final String url; - - @override - Widget build(BuildContext context) { - return Image.network(url, height: 60.0, fit: BoxFit.contain); - } -} - -class ExpandableText extends StatefulWidget { - final String text; - ExpandableText(this.text); - - @override - _ExpandableTextState createState() => _ExpandableTextState(); -} - -class _ExpandableTextState extends State { - bool isExpanded = false; - - @override - Widget build(BuildContext context) { - final link = TextSpan( - style: TextStyle( - color: Color(0xFF898989), - fontSize: 11.0, - fontWeight: FontWeight.w700, - fontFamily: 'Lato', - ), - text: isExpanded ? t.companyScreen.seeLess : t.companyScreen.seeMore, - recognizer: TapGestureRecognizer() - ..onTap = () { - setState(() { - isExpanded = !isExpanded; - }); - }, - ); - - return LayoutBuilder( - builder: (context, constraints) { - final textSpan = TextSpan( - text: widget.text, - style: TextStyle( - color: Colors.black, - fontSize: 11.0, - fontWeight: FontWeight.w400, - fontFamily: 'Lato', - ), - ); - - final textPainter = TextPainter( - text: textSpan, - maxLines: isExpanded ? null : 3, - ellipsis: '...', - textDirection: TextDirection.ltr, - ); - - textPainter.layout( - minWidth: constraints.minWidth, - maxWidth: constraints.maxWidth, - ); - - final linkTextPainter = TextPainter( - text: link, - textDirection: TextDirection.ltr, - ); - - linkTextPainter.layout( - minWidth: constraints.minWidth, - maxWidth: constraints.maxWidth, - ); - - if (!isExpanded && textPainter.didExceedMaxLines) { - final pos = textPainter.getPositionForOffset(Offset( - textPainter.width - linkTextPainter.width, - textPainter.height, - )); - final end = textPainter.getOffsetBefore(pos.offset); - final text = TextSpan( - text: widget.text.substring(0, end), - style: TextStyle(color: Colors.black), - children: [link], - ); - - return RichText( - text: text, - ); - } else { - return RichText( - text: TextSpan( - text: widget.text, - style: TextStyle(color: Colors.black), - children: [if (isExpanded) link], - ), - ); - } - }, - ); - } -} + \ No newline at end of file diff --git a/lib/pages/detail/detail_content.dart b/lib/pages/detail/detail_content.dart new file mode 100644 index 0000000..195306f --- /dev/null +++ b/lib/pages/detail/detail_content.dart @@ -0,0 +1,227 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:pola_flutter/models/company.dart'; +import 'package:pola_flutter/models/search_result.dart'; +import 'package:pola_flutter/i18n/strings.g.dart'; +import 'logotypes.dart'; +import 'expandandable_text.dart'; +import 'polish_capital_graph.dart'; + +class DetailContent extends StatelessWidget { + DetailContent(this.searchResult); + + final SearchResult searchResult; + + @override + Widget build(BuildContext context) { + if (searchResult.companies == null) { + return Padding( + padding: EdgeInsets.all(8.0), + child: Text(searchResult.altText ?? ""), + ); + } + + final company = searchResult.companies!.first; + final score = company.plScore ?? 0; + final double plCapital = (company.plCapital ?? 0).toDouble(); + final Translations t = Translations.of(context); + + final hasLogo = company.logotypeUrl != null; + final hasDescription = company.description?.isNotEmpty ?? false; + + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 17.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 17.0), + child: Align( + alignment: Alignment.centerLeft, + child: Row( + children: [ + SvgPicture.asset( + 'assets/info.svg', + height: 24.0, + width: 24.0, + ), + SizedBox(width: 8.0), + + Text( + t.companyScreen.ourRating, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + fontFamily: 'Lato', + ), + ), + SizedBox(width: 8.0), + Text( + t.companyScreen. points(score: score), + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.w700, + fontFamily: 'Lato', + ), + ), + ], + ), + ), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 17.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(10.0), + child: LinearProgressIndicator( + value: score / 100.0, + backgroundColor: Color(0xFFF5DEDD), + valueColor: AlwaysStoppedAnimation(Color(0xFFE1203E)), + minHeight: 12.0, + ), + ), + ), + SizedBox(height: 17.0), + Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, + ), + Padding( + padding: const EdgeInsets.only(left: 17.0, top: 22.0), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + t.companyScreen.gradingCriteria, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + fontFamily: 'Lato', + ), + ), + ), + ), + SizedBox(height: 22.0), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + PolishCapitalGraph(percentage: plCapital), + SizedBox(width: 35.0), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _DetailItem( t.companyScreen.producedInPoland, (company.plWorkers ?? 0) != 0), + SizedBox(height: 14.0), + _DetailItem( t.companyScreen.researchInPoland, (company.plRnD ?? 0) != 0), + SizedBox(height: 14.0), + _DetailItem( t.companyScreen.registeredInPoland, (company.plRegistered ?? 0) != 0), + SizedBox(height: 14.0), + _DetailItem( t.companyScreen.notConcernPart, (company.plNotGlobEnt ?? 0) != 0), + ], + ), + ), + ], + ), + SizedBox(height: 22.0), + Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, + ), + if (hasDescription) ...[ + Padding( + padding: EdgeInsets.symmetric(vertical: 22.0, horizontal: 17.0), + child: ExpandableText(company.description ?? ""), + ), + if (hasLogo) Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, + ), + ], + if (hasLogo) Logotypes(logotypes: searchResult.logotypes(), searchResult: searchResult), + SizedBox(height: 26.0), + if (hasLogo) Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 17.0, + endIndent: 17.0, + ), + ], + ), + ); + } +} + +class _DetailItem extends StatelessWidget { + _DetailItem(this.text, this.state); + + final String text; + final bool state; + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: EdgeInsets.only(right: 3.0), + child: SvgPicture.asset( + state ? 'assets/task_alt.svg' : 'assets/radio_button_unchecked.svg', + ), + ), + Expanded( + child: Text( + text, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w400, + fontFamily: 'Lato', + ), + softWrap: true, + overflow: TextOverflow.visible, + ), + ), + ], + ); + } +} + + +extension on SearchResult { + List logotypes() { + var brandLogotypes = allCompanyBrands?.map((brand) { + final brandLogotype = brand.logotypeUrl; + if (brandLogotype != null) { + return Logotype(brandLogotype, null); + } else { + return null; + } + }).toList() ?? + []; + + final logotypeCompany = companies?.first.logotype(); + + brandLogotypes.insert(0, logotypeCompany); + + return brandLogotypes + .where((logotype) => logotype != null) + .cast() + .toList(); + } +} + +extension on Company { + Logotype? logotype() { + final logotypeUrl = this.logotypeUrl; + if (logotypeUrl != null) { + return Logotype(logotypeUrl, officialUrl); + } else { + return null; + } + } +} \ No newline at end of file diff --git a/lib/pages/detail/expandandable_text.dart b/lib/pages/detail/expandandable_text.dart new file mode 100644 index 0000000..5cd6166 --- /dev/null +++ b/lib/pages/detail/expandandable_text.dart @@ -0,0 +1,95 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/gestures.dart'; +import 'package:pola_flutter/i18n/strings.g.dart'; + + class ExpandableText extends StatefulWidget { + final String text; + ExpandableText(this.text); + + @override + _ExpandableTextState createState() => _ExpandableTextState(); +} + +class _ExpandableTextState extends State { + bool isExpanded = false; + + @override + Widget build(BuildContext context) { + final link = TextSpan( + style: TextStyle( + color: Color(0xFF898989), + fontSize: 11.0, + fontWeight: FontWeight.w700, + fontFamily: 'Lato', + ), + text: isExpanded ? t.companyScreen.seeLess : t.companyScreen.seeMore, + recognizer: TapGestureRecognizer() + ..onTap = () { + setState(() { + isExpanded = !isExpanded; + }); + }, + ); + + return LayoutBuilder( + builder: (context, constraints) { + final textSpan = TextSpan( + text: widget.text, + style: TextStyle( + color: Colors.black, + fontSize: 11.0, + fontWeight: FontWeight.w400, + fontFamily: 'Lato', + ), + ); + + final textPainter = TextPainter( + text: textSpan, + maxLines: isExpanded ? null : 3, + ellipsis: '...', + textDirection: TextDirection.ltr, + ); + + textPainter.layout( + minWidth: constraints.minWidth, + maxWidth: constraints.maxWidth, + ); + + final linkTextPainter = TextPainter( + text: link, + textDirection: TextDirection.ltr, + ); + + linkTextPainter.layout( + minWidth: constraints.minWidth, + maxWidth: constraints.maxWidth, + ); + + if (!isExpanded && textPainter.didExceedMaxLines) { + final pos = textPainter.getPositionForOffset(Offset( + textPainter.width - linkTextPainter.width, + textPainter.height, + )); + final end = textPainter.getOffsetBefore(pos.offset); + final text = TextSpan( + text: widget.text.substring(0, end), + style: TextStyle(color: Colors.black), + children: [link], + ); + + return RichText( + text: text, + ); + } else { + return RichText( + text: TextSpan( + text: widget.text, + style: TextStyle(color: Colors.black), + children: [if (isExpanded) link], + ), + ); + } + }, + ); + } +} diff --git a/lib/pages/detail/logotypes.dart b/lib/pages/detail/logotypes.dart new file mode 100644 index 0000000..61438af --- /dev/null +++ b/lib/pages/detail/logotypes.dart @@ -0,0 +1,84 @@ +import 'package:flutter/material.dart'; +import 'package:pola_flutter/analytics/pola_analytics.dart'; +import 'package:pola_flutter/models/search_result.dart'; +import 'package:url_launcher/url_launcher.dart'; + + + +class Logotype { + final String imageUrl; + final String? websiteUrl; + + Logotype(this.imageUrl, this.websiteUrl); +} + + +class Logotypes extends StatelessWidget { + final List logotypes; + final SearchResult searchResult; + final PolaAnalytics analytics = PolaAnalytics.instance(); + + Logotypes({required this.logotypes, required this.searchResult}); + + @override + Widget build(BuildContext context) { + if (logotypes.isEmpty) { + return Container(); + } + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + children: logotypes.map((logotype) { + return GestureDetector( + onTap: () { + final url = logotype.websiteUrl; + if (url == null) return; + final Uri? uri = Uri.tryParse(url); + if (uri == null) return; + + analytics.readMore(searchResult, url); + launchUrl( + uri, + mode: LaunchMode.externalApplication, + ); + }, + child: Padding( + padding: EdgeInsets.all(8.0), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Color(0xFFF8F8F8), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.3), + spreadRadius: 1, + blurRadius: 5, + offset: Offset(0, 3), + ), + ], + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: _LogoView(logotype.imageUrl), + ), + ), + ), + ); + }).toList(), + ), + ); + } +} + +class _LogoView extends StatelessWidget { + _LogoView(this.url); + + final String url; + + @override + Widget build(BuildContext context) { + return Image.network(url, height: 60.0, fit: BoxFit.contain); + } +} + + diff --git a/lib/pages/detail/polish_capital_graph.dart b/lib/pages/detail/polish_capital_graph.dart index fd26d5c..3072904 100644 --- a/lib/pages/detail/polish_capital_graph.dart +++ b/lib/pages/detail/polish_capital_graph.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:syncfusion_flutter_gauges/gauges.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; - class PolishCapitalGraph extends StatelessWidget { final double percentage; @@ -9,7 +8,7 @@ class PolishCapitalGraph extends StatelessWidget { @override Widget build(BuildContext context) { - // final Translations t = Translations.of(context); + final size = 140.0; return Column( @@ -61,7 +60,7 @@ class PolishCapitalGraph extends StatelessWidget { Padding( padding: const EdgeInsets.only(top: 0.0), child: Text( - "t.companyScreen.polishCapital", + t.companyScreen.polishCapital, style: TextStyle( fontSize: 11.0, fontWeight: FontWeight.w400, From 2a49f1c144a122d99534036684b2aac02bc34900 Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Thu, 8 Aug 2024 09:43:22 +0200 Subject: [PATCH 15/40] 85/fixSpacing --- lib/i18n/strings.g.dart | 10 ++++---- lib/i18n/strings.i18n.json | 4 ++-- lib/pages/detail/detail_content.dart | 27 ++++++++++------------ lib/pages/detail/polish_capital_graph.dart | 6 ++--- 4 files changed, 22 insertions(+), 25 deletions(-) diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index f6bcc57..3e97547 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -6,7 +6,7 @@ /// Locales: 1 /// Strings: 19 /// -/// Built on 2024-08-05 at 10:55 UTC +/// Built on 2024-08-08 at 07:30 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -183,8 +183,8 @@ class _StringsCompanyScreenEn { String get researchInPoland => 'Prowadzi badania w Polsce'; String get registeredInPoland => 'Zarejestrowana w Polsce'; String get notConcernPart => 'Nie jest częścią zagranicznego koncernu'; - String get seeMore => 'zobacz więcej'; - String get seeLess => 'zobacz mniej'; + String get seeMore => ' zobacz więcej'; + String get seeLess => ' zobacz mniej'; String points({required Object score}) => 'pkt ${score}'; } @@ -210,8 +210,8 @@ extension on Translations { case 'companyScreen.researchInPoland': return 'Prowadzi badania w Polsce'; case 'companyScreen.registeredInPoland': return 'Zarejestrowana w Polsce'; case 'companyScreen.notConcernPart': return 'Nie jest częścią zagranicznego koncernu'; - case 'companyScreen.seeMore': return 'zobacz więcej'; - case 'companyScreen.seeLess': return 'zobacz mniej'; + case 'companyScreen.seeMore': return ' zobacz więcej'; + case 'companyScreen.seeLess': return ' zobacz mniej'; case 'companyScreen.points': return ({required Object score}) => 'pkt ${score}'; default: return null; } diff --git a/lib/i18n/strings.i18n.json b/lib/i18n/strings.i18n.json index a9ca793..74f9af3 100644 --- a/lib/i18n/strings.i18n.json +++ b/lib/i18n/strings.i18n.json @@ -18,8 +18,8 @@ "researchInPoland": "Prowadzi badania w Polsce", "registeredInPoland": "Zarejestrowana w Polsce", "notConcernPart":"Nie jest częścią zagranicznego koncernu", - "seeMore":"zobacz więcej", - "seeLess":"zobacz mniej", + "seeMore":" zobacz więcej", + "seeLess":" zobacz mniej", "points":"pkt $score" } } diff --git a/lib/pages/detail/detail_content.dart b/lib/pages/detail/detail_content.dart index 195306f..f299744 100644 --- a/lib/pages/detail/detail_content.dart +++ b/lib/pages/detail/detail_content.dart @@ -34,9 +34,7 @@ class DetailContent extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 17.0), - child: Align( + Align( alignment: Alignment.centerLeft, child: Row( children: [ @@ -67,9 +65,8 @@ class DetailContent extends StatelessWidget { ], ), ), - ), Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 17.0), + padding: const EdgeInsets.symmetric(vertical: 8.0), child: ClipRRect( borderRadius: BorderRadius.circular(10.0), child: LinearProgressIndicator( @@ -84,11 +81,11 @@ class DetailContent extends StatelessWidget { Divider( thickness: 1.0, color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, + indent: 0, + endIndent: 0, ), Padding( - padding: const EdgeInsets.only(left: 17.0, top: 22.0), + padding: const EdgeInsets.only(top: 22.0), child: Align( alignment: Alignment.centerLeft, child: Text( @@ -127,19 +124,19 @@ class DetailContent extends StatelessWidget { Divider( thickness: 1.0, color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, + indent: 0, + endIndent: 0, ), if (hasDescription) ...[ Padding( - padding: EdgeInsets.symmetric(vertical: 22.0, horizontal: 17.0), + padding: EdgeInsets.symmetric(vertical: 22.0), child: ExpandableText(company.description ?? ""), ), if (hasLogo) Divider( thickness: 1.0, color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, + indent: 0, + endIndent: 0, ), ], if (hasLogo) Logotypes(logotypes: searchResult.logotypes(), searchResult: searchResult), @@ -147,8 +144,8 @@ class DetailContent extends StatelessWidget { if (hasLogo) Divider( thickness: 1.0, color: Color(0xFFF0F0F0), - indent: 17.0, - endIndent: 17.0, + indent: 0, + endIndent:0, ), ], ), diff --git a/lib/pages/detail/polish_capital_graph.dart b/lib/pages/detail/polish_capital_graph.dart index 3072904..e08974e 100644 --- a/lib/pages/detail/polish_capital_graph.dart +++ b/lib/pages/detail/polish_capital_graph.dart @@ -10,7 +10,7 @@ class PolishCapitalGraph extends StatelessWidget { Widget build(BuildContext context) { final size = 140.0; - + final thickness = 0.15; return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -25,7 +25,7 @@ class PolishCapitalGraph extends StatelessWidget { showLabels: false, showTicks: false, axisLineStyle: AxisLineStyle( - thickness: 0.15, + thickness: thickness, cornerStyle: CornerStyle.bothCurve, color: Color(0xFFF5DEDD), thicknessUnit: GaugeSizeUnit.factor, @@ -34,7 +34,7 @@ class PolishCapitalGraph extends StatelessWidget { RangePointer( value: percentage, cornerStyle: CornerStyle.bothCurve, - width: 0.15, + width: thickness, sizeUnit: GaugeSizeUnit.factor, color: Color(0xFFE1203E), ), From 1dc273603cf0d1999b137bde5224fd4167f2f7d1 Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Thu, 8 Aug 2024 10:35:34 +0200 Subject: [PATCH 16/40] 85/ format --- lib/pages/detail/detail.dart | 4 +- lib/pages/detail/detail_content.dart | 101 +++++++++++---------- lib/pages/detail/expandandable_text.dart | 8 +- lib/pages/detail/logotypes.dart | 7 +- lib/pages/detail/polish_capital_graph.dart | 14 +-- 5 files changed, 67 insertions(+), 67 deletions(-) diff --git a/lib/pages/detail/detail.dart b/lib/pages/detail/detail.dart index afdbf2d..0dc7bbe 100644 --- a/lib/pages/detail/detail.dart +++ b/lib/pages/detail/detail.dart @@ -16,6 +16,7 @@ class DetailPage extends StatelessWidget { return Scaffold( backgroundColor: Colors.white, + appBar: AppBar( title: Text(searchResult.name ?? ""), leading: IconButton( @@ -28,7 +29,6 @@ class DetailPage extends StatelessWidget { child: Column( children: [ SizedBox(height: 16.0), - DetailContent(searchResult), ], ), @@ -37,5 +37,3 @@ class DetailPage extends StatelessWidget { ); } } - - \ No newline at end of file diff --git a/lib/pages/detail/detail_content.dart b/lib/pages/detail/detail_content.dart index f299744..11aa598 100644 --- a/lib/pages/detail/detail_content.dart +++ b/lib/pages/detail/detail_content.dart @@ -25,7 +25,7 @@ class DetailContent extends StatelessWidget { final score = company.plScore ?? 0; final double plCapital = (company.plCapital ?? 0).toDouble(); final Translations t = Translations.of(context); - + final hasLogo = company.logotypeUrl != null; final hasDescription = company.description?.isNotEmpty ?? false; @@ -34,37 +34,36 @@ class DetailContent extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Align( - alignment: Alignment.centerLeft, - child: Row( - children: [ - SvgPicture.asset( - 'assets/info.svg', - height: 24.0, - width: 24.0, - ), - SizedBox(width: 8.0), - - Text( - t.companyScreen.ourRating, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, - fontFamily: 'Lato', - ), + Align( + alignment: Alignment.centerLeft, + child: Row( + children: [ + SvgPicture.asset( + 'assets/info.svg', + height: 24.0, + width: 24.0, + ), + SizedBox(width: 8.0), + Text( + t.companyScreen.ourRating, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + fontFamily: 'Lato', ), - SizedBox(width: 8.0), - Text( - t.companyScreen. points(score: score), - style: TextStyle( - fontSize: 20.0, - fontWeight: FontWeight.w700, - fontFamily: 'Lato', - ), + ), + SizedBox(width: 8.0), + Text( + t.companyScreen.points(score: score), + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.w700, + fontFamily: 'Lato', ), - ], - ), + ), + ], ), + ), Padding( padding: const EdgeInsets.symmetric(vertical: 8.0), child: ClipRRect( @@ -89,7 +88,7 @@ class DetailContent extends StatelessWidget { child: Align( alignment: Alignment.centerLeft, child: Text( - t.companyScreen.gradingCriteria, + t.companyScreen.gradingCriteria, style: TextStyle( fontSize: 16.0, fontWeight: FontWeight.w600, @@ -102,19 +101,23 @@ class DetailContent extends StatelessWidget { Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - PolishCapitalGraph(percentage: plCapital), + PolishCapitalGraph(percentage: plCapital), SizedBox(width: 35.0), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - _DetailItem( t.companyScreen.producedInPoland, (company.plWorkers ?? 0) != 0), + _DetailItem(t.companyScreen.producedInPoland, + (company.plWorkers ?? 0) != 0), SizedBox(height: 14.0), - _DetailItem( t.companyScreen.researchInPoland, (company.plRnD ?? 0) != 0), + _DetailItem(t.companyScreen.researchInPoland, + (company.plRnD ?? 0) != 0), SizedBox(height: 14.0), - _DetailItem( t.companyScreen.registeredInPoland, (company.plRegistered ?? 0) != 0), + _DetailItem(t.companyScreen.registeredInPoland, + (company.plRegistered ?? 0) != 0), SizedBox(height: 14.0), - _DetailItem( t.companyScreen.notConcernPart, (company.plNotGlobEnt ?? 0) != 0), + _DetailItem(t.companyScreen.notConcernPart, + (company.plNotGlobEnt ?? 0) != 0), ], ), ), @@ -132,21 +135,26 @@ class DetailContent extends StatelessWidget { padding: EdgeInsets.symmetric(vertical: 22.0), child: ExpandableText(company.description ?? ""), ), - if (hasLogo) Divider( + if (hasLogo) + Divider( + thickness: 1.0, + color: Color(0xFFF0F0F0), + indent: 0, + endIndent: 0, + ), + ], + if (hasLogo) + Logotypes( + logotypes: searchResult.logotypes(), + searchResult: searchResult), + SizedBox(height: 26.0), + if (hasLogo) + Divider( thickness: 1.0, color: Color(0xFFF0F0F0), indent: 0, endIndent: 0, ), - ], - if (hasLogo) Logotypes(logotypes: searchResult.logotypes(), searchResult: searchResult), - SizedBox(height: 26.0), - if (hasLogo) Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 0, - endIndent:0, - ), ], ), ); @@ -188,7 +196,6 @@ class _DetailItem extends StatelessWidget { } } - extension on SearchResult { List logotypes() { var brandLogotypes = allCompanyBrands?.map((brand) { @@ -221,4 +228,4 @@ extension on Company { return null; } } -} \ No newline at end of file +} diff --git a/lib/pages/detail/expandandable_text.dart b/lib/pages/detail/expandandable_text.dart index 5cd6166..b265db3 100644 --- a/lib/pages/detail/expandandable_text.dart +++ b/lib/pages/detail/expandandable_text.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/gestures.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; - - class ExpandableText extends StatefulWidget { + +class ExpandableText extends StatefulWidget { final String text; ExpandableText(this.text); @@ -13,7 +13,7 @@ import 'package:pola_flutter/i18n/strings.g.dart'; class _ExpandableTextState extends State { bool isExpanded = false; - @override + @override Widget build(BuildContext context) { final link = TextSpan( style: TextStyle( @@ -22,7 +22,7 @@ class _ExpandableTextState extends State { fontWeight: FontWeight.w700, fontFamily: 'Lato', ), - text: isExpanded ? t.companyScreen.seeLess : t.companyScreen.seeMore, + text: isExpanded ? t.companyScreen.seeLess : t.companyScreen.seeMore, recognizer: TapGestureRecognizer() ..onTap = () { setState(() { diff --git a/lib/pages/detail/logotypes.dart b/lib/pages/detail/logotypes.dart index 61438af..d25521f 100644 --- a/lib/pages/detail/logotypes.dart +++ b/lib/pages/detail/logotypes.dart @@ -2,8 +2,6 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; import 'package:pola_flutter/models/search_result.dart'; import 'package:url_launcher/url_launcher.dart'; - - class Logotype { final String imageUrl; @@ -12,7 +10,6 @@ class Logotype { Logotype(this.imageUrl, this.websiteUrl); } - class Logotypes extends StatelessWidget { final List logotypes; final SearchResult searchResult; @@ -69,7 +66,7 @@ class Logotypes extends StatelessWidget { ); } } - + class _LogoView extends StatelessWidget { _LogoView(this.url); @@ -80,5 +77,3 @@ class _LogoView extends StatelessWidget { return Image.network(url, height: 60.0, fit: BoxFit.contain); } } - - diff --git a/lib/pages/detail/polish_capital_graph.dart b/lib/pages/detail/polish_capital_graph.dart index e08974e..7467ee3 100644 --- a/lib/pages/detail/polish_capital_graph.dart +++ b/lib/pages/detail/polish_capital_graph.dart @@ -1,22 +1,22 @@ import 'package:flutter/material.dart'; import 'package:syncfusion_flutter_gauges/gauges.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; -class PolishCapitalGraph extends StatelessWidget { + +class PolishCapitalGraph extends StatelessWidget { final double percentage; - PolishCapitalGraph({required this.percentage}); + PolishCapitalGraph({required this.percentage}); @override Widget build(BuildContext context) { - final size = 140.0; final thickness = 0.15; return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( - height: size, - width: size, + height: size, + width: size, child: SfRadialGauge( axes: [ RadialAxis( @@ -58,9 +58,9 @@ class PolishCapitalGraph extends StatelessWidget { ), ), Padding( - padding: const EdgeInsets.only(top: 0.0), + padding: const EdgeInsets.only(top: 0.0), child: Text( - t.companyScreen.polishCapital, + t.companyScreen.polishCapital, style: TextStyle( fontSize: 11.0, fontWeight: FontWeight.w400, From c008656117f64758b73148a4f0d95c76a1b7aa8b Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Thu, 8 Aug 2024 10:50:51 +0200 Subject: [PATCH 17/40] 85/font color --- lib/pages/detail/expandandable_text.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pages/detail/expandandable_text.dart b/lib/pages/detail/expandandable_text.dart index b265db3..292b298 100644 --- a/lib/pages/detail/expandandable_text.dart +++ b/lib/pages/detail/expandandable_text.dart @@ -36,7 +36,7 @@ class _ExpandableTextState extends State { final textSpan = TextSpan( text: widget.text, style: TextStyle( - color: Colors.black, + color: Color(0x1C1B1F), fontSize: 11.0, fontWeight: FontWeight.w400, fontFamily: 'Lato', @@ -73,7 +73,7 @@ class _ExpandableTextState extends State { final end = textPainter.getOffsetBefore(pos.offset); final text = TextSpan( text: widget.text.substring(0, end), - style: TextStyle(color: Colors.black), + style: TextStyle(color: Color(0x1C1B1F)), children: [link], ); @@ -84,7 +84,7 @@ class _ExpandableTextState extends State { return RichText( text: TextSpan( text: widget.text, - style: TextStyle(color: Colors.black), + style: TextStyle(color: Color(0x1C1B1F)), children: [if (isExpanded) link], ), ); From f41488e74d882f644307c88a2bab1460fe8cd877 Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Thu, 8 Aug 2024 11:05:28 +0200 Subject: [PATCH 18/40] 85/text color change --- lib/pages/detail/detail_content.dart | 4 ++++ lib/pages/detail/expandandable_text.dart | 6 +++--- lib/pages/detail/polish_capital_graph.dart | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/pages/detail/detail_content.dart b/lib/pages/detail/detail_content.dart index 11aa598..2ef323e 100644 --- a/lib/pages/detail/detail_content.dart +++ b/lib/pages/detail/detail_content.dart @@ -50,6 +50,7 @@ class DetailContent extends StatelessWidget { fontSize: 16.0, fontWeight: FontWeight.w600, fontFamily: 'Lato', + color: Color(0xFF1C1B1F), ), ), SizedBox(width: 8.0), @@ -59,6 +60,7 @@ class DetailContent extends StatelessWidget { fontSize: 20.0, fontWeight: FontWeight.w700, fontFamily: 'Lato', + color: Color(0xFF1C1B1F), ), ), ], @@ -93,6 +95,7 @@ class DetailContent extends StatelessWidget { fontSize: 16.0, fontWeight: FontWeight.w600, fontFamily: 'Lato', + color: Color(0xFF1C1B1F), ), ), ), @@ -186,6 +189,7 @@ class _DetailItem extends StatelessWidget { fontSize: 11, fontWeight: FontWeight.w400, fontFamily: 'Lato', + color: Color(0xFF1C1B1F), ), softWrap: true, overflow: TextOverflow.visible, diff --git a/lib/pages/detail/expandandable_text.dart b/lib/pages/detail/expandandable_text.dart index 292b298..cdf74ee 100644 --- a/lib/pages/detail/expandandable_text.dart +++ b/lib/pages/detail/expandandable_text.dart @@ -36,7 +36,7 @@ class _ExpandableTextState extends State { final textSpan = TextSpan( text: widget.text, style: TextStyle( - color: Color(0x1C1B1F), + color: Color(0xFF1C1B1F), fontSize: 11.0, fontWeight: FontWeight.w400, fontFamily: 'Lato', @@ -73,7 +73,7 @@ class _ExpandableTextState extends State { final end = textPainter.getOffsetBefore(pos.offset); final text = TextSpan( text: widget.text.substring(0, end), - style: TextStyle(color: Color(0x1C1B1F)), + style: TextStyle(color: Color(0xFF1C1B1F)), children: [link], ); @@ -84,7 +84,7 @@ class _ExpandableTextState extends State { return RichText( text: TextSpan( text: widget.text, - style: TextStyle(color: Color(0x1C1B1F)), + style: TextStyle(color: Color(0xFF1C1B1F)), children: [if (isExpanded) link], ), ); diff --git a/lib/pages/detail/polish_capital_graph.dart b/lib/pages/detail/polish_capital_graph.dart index 7467ee3..0fcfb35 100644 --- a/lib/pages/detail/polish_capital_graph.dart +++ b/lib/pages/detail/polish_capital_graph.dart @@ -49,6 +49,7 @@ class PolishCapitalGraph extends StatelessWidget { fontSize: 26.0, fontWeight: FontWeight.w700, fontFamily: 'Lato', + color: Color(0xFF1C1B1F), ), ), ), @@ -64,6 +65,7 @@ class PolishCapitalGraph extends StatelessWidget { style: TextStyle( fontSize: 11.0, fontWeight: FontWeight.w400, + color: Color(0xFF1C1B1F), fontFamily: 'Lato', ), ), From 5e1c024ba32d7d6a860dde67e09aa3c1d49ae67a Mon Sep 17 00:00:00 2001 From: Karol Stolarczyk Date: Thu, 8 Aug 2024 14:10:46 +0200 Subject: [PATCH 19/40] 85/ fixes --- lib/i18n/strings.g.dart | 6 +++--- lib/i18n/strings.i18n.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 3e97547..6d719a8 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -6,7 +6,7 @@ /// Locales: 1 /// Strings: 19 /// -/// Built on 2024-08-08 at 07:30 UTC +/// Built on 2024-08-08 at 12:09 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -185,7 +185,7 @@ class _StringsCompanyScreenEn { String get notConcernPart => 'Nie jest częścią zagranicznego koncernu'; String get seeMore => ' zobacz więcej'; String get seeLess => ' zobacz mniej'; - String points({required Object score}) => 'pkt ${score}'; + String points({required Object score}) => '${score} pkt'; } /// Flat map(s) containing all translations. @@ -212,7 +212,7 @@ extension on Translations { case 'companyScreen.notConcernPart': return 'Nie jest częścią zagranicznego koncernu'; case 'companyScreen.seeMore': return ' zobacz więcej'; case 'companyScreen.seeLess': return ' zobacz mniej'; - case 'companyScreen.points': return ({required Object score}) => 'pkt ${score}'; + case 'companyScreen.points': return ({required Object score}) => '${score} pkt'; default: return null; } } diff --git a/lib/i18n/strings.i18n.json b/lib/i18n/strings.i18n.json index 74f9af3..c3670ba 100644 --- a/lib/i18n/strings.i18n.json +++ b/lib/i18n/strings.i18n.json @@ -20,6 +20,6 @@ "notConcernPart":"Nie jest częścią zagranicznego koncernu", "seeMore":" zobacz więcej", "seeLess":" zobacz mniej", - "points":"pkt $score" + "points":"$score pkt" } } From fe21ce311df3482280035bf670f3382fddb58e50 Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Fri, 9 Aug 2024 08:07:59 +0200 Subject: [PATCH 20/40] redesign ekranu webview (#103) * add web_view_dialog.dart file * add vebviewpage to vebviewtab * adding font to scan.dart/ adding style to text in web_view_tab.dart * adding color to the text --- lib/main.dart | 64 ++++++++++---------------- lib/pages/scan/scan.dart | 15 ++++-- lib/pages/web/web_view_page.dart | 78 +++++++++----------------------- lib/ui/menu_item_list_view.dart | 10 ++-- lib/ui/web_view_dialog.dart | 65 ++++++++++++++++++++++++++ lib/ui/web_view_tab.dart | 29 ++++++++++++ 6 files changed, 158 insertions(+), 103 deletions(-) create mode 100644 lib/ui/web_view_dialog.dart create mode 100644 lib/ui/web_view_tab.dart diff --git a/lib/main.dart b/lib/main.dart index d4f5d92..a80a0b6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -10,7 +10,7 @@ import 'package:pola_flutter/i18n/strings.g.dart'; import 'package:pola_flutter/models/search_result.dart'; import 'package:pola_flutter/pages/dialpad/dialpad.dart'; import 'package:pola_flutter/pages/scan/scan.dart'; -import 'package:pola_flutter/pages/web/web_view_page.dart'; +import 'package:pola_flutter/ui/web_view_tab.dart'; import 'firebase_options.dart'; import 'pages/detail/detail.dart'; @@ -49,25 +49,26 @@ class _PolaAppState extends State { home: DefaultTabController( length: 3, child: Scaffold( - bottomNavigationBar: BottomNavigationBar( - items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.smartphone), - label: 'Skaner kodów', - ), - BottomNavigationBarItem( - icon: Icon(Icons.search), - label: 'Wyszukiwarka', - ), - BottomNavigationBarItem( - icon: Icon(Icons.newspaper), - label: 'Wiadomości', - ), - ], - onTap: _onItemTapped, - currentIndex: _selectedIndex, - ), - body: _getTabContentWidget()), + bottomNavigationBar: BottomNavigationBar( + items: const [ + BottomNavigationBarItem( + icon: Icon(Icons.smartphone), + label: 'Skaner kodów', + ), + BottomNavigationBarItem( + icon: Icon(Icons.search), + label: 'Wyszukiwarka', + ), + BottomNavigationBarItem( + icon: Icon(Icons.newspaper), + label: 'Wiadomości', + ), + ], + onTap: _onItemTapped, + currentIndex: _selectedIndex, + ), + body: _getTabContentWidget(), + ), ), ); } @@ -77,15 +78,13 @@ class _PolaAppState extends State { case 0: return MainPage(); case 1: - return WebViewPage( + return WebViewTab( title: "Wyszukiwarka", - url: "https://www.pola-app.pl/m/search/", - showBackButton: false); + url: "https://www.pola-app.pl/m/search/"); case 2: - return WebViewPage( + return WebViewTab( title: "Wiadomości", - url: "https://www.pola-app.pl/m/blog/", - showBackButton: false); + url: "https://www.pola-app.pl/m/blog/"); default: return MainPage(); } @@ -130,19 +129,6 @@ class RouteGenerator { return MaterialPageRoute(builder: (_) => MainPage()); case '/dialpad': return MaterialPageRoute(builder: (_) => DialPadPage()); - case '/web': - if (args is Map) { - final url = args['url'] as String; - final title = args['title'] as String; - return MaterialPageRoute( - builder: (_) => WebViewPage( - title: title, - url: url, - showBackButton: true, - ), - ); - } - return MaterialPageRoute(builder: (_) => MainPage()); default: return MaterialPageRoute(builder: (_) => MainPage()); } diff --git a/lib/pages/scan/scan.dart b/lib/pages/scan/scan.dart index 3334957..73f6e59 100644 --- a/lib/pages/scan/scan.dart +++ b/lib/pages/scan/scan.dart @@ -4,8 +4,10 @@ import 'package:mobile_scanner/mobile_scanner.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; import 'package:pola_flutter/data/pola_api_repository.dart'; +import 'package:pola_flutter/i18n/strings.g.dart'; import 'package:pola_flutter/pages/scan/scan_vibration.dart'; import 'package:pola_flutter/ui/menu_bottom_sheet.dart'; +import 'package:pola_flutter/ui/web_view_dialog.dart'; import 'companies_list.dart'; import 'scan_bloc.dart'; @@ -45,10 +47,15 @@ class _MainPageState extends State { leading: IconButton( onPressed: () { _analytics.aboutPolaOpened(); - Navigator.pushNamed(context, '/web', arguments: { - 'url': "https://www.pola-app.pl/m/about", - 'title': "O Aplikacji Pola" - }); + showDialog( + context: context, + builder: (context) { + return WebViewDialog( + url: "https://www.pola-app.pl/m/about", + title: t.menu.aboutPola, + ); + }, + ); }, icon: Image.asset("assets/ic_launcher.png"), ), diff --git a/lib/pages/web/web_view_page.dart b/lib/pages/web/web_view_page.dart index e7470e9..bf0a64b 100644 --- a/lib/pages/web/web_view_page.dart +++ b/lib/pages/web/web_view_page.dart @@ -2,12 +2,9 @@ import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; class WebViewPage extends StatefulWidget { - WebViewPage({Key? key, required this.title, required this.url, required this.showBackButton}) - : super(key: key); + WebViewPage({Key? key, required this.url}) : super(key: key); final String url; - final String title; - final bool showBackButton; @override _WebViewTabState createState() => _WebViewTabState(); @@ -24,24 +21,20 @@ class _WebViewTabState extends State { controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate( - NavigationDelegate( - onProgress: (int progress) { - setState(() { - loadingPercentage = progress; - }); - }, - onPageStarted: (String url) { - setState(() { - loadingPercentage = 0; - }); - }, - onPageFinished: (String url) { - setState(() { - loadingPercentage = 100; - }); - } - ), - ) + NavigationDelegate(onProgress: (int progress) { + setState(() { + loadingPercentage = progress; + }); + }, onPageStarted: (String url) { + setState(() { + loadingPercentage = 0; + }); + }, onPageFinished: (String url) { + setState(() { + loadingPercentage = 100; + }); + }), + ) ..loadRequest(Uri.parse(widget.url)); } @@ -53,41 +46,14 @@ class _WebViewTabState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - elevation: 0, - title: Text( - widget.title, - style: TextStyle( - color: Colors.black, - ) + return Stack( + children: [ + WebViewWidget(controller: controller), + if (loadingPercentage < 100) + LinearProgressIndicator( + value: loadingPercentage / 100.0, ), - leading: widget.showBackButton ? _BackButton() : null, - - ), - body: Stack( - children: [ - WebViewWidget(controller: controller), - if (loadingPercentage < 100) - LinearProgressIndicator( - value: loadingPercentage / 100.0, - ), - ], - ) - ); - } -} - -class _BackButton extends StatelessWidget { - @override - Widget build(BuildContext context) { - return IconButton( - icon: Icon( - Icons.arrow_back, - color: Colors.black, - ), - onPressed: () => Navigator.of(context).pop(), + ], ); } } diff --git a/lib/ui/menu_item_list_view.dart b/lib/ui/menu_item_list_view.dart index 02efda8..6985a20 100644 --- a/lib/ui/menu_item_list_view.dart +++ b/lib/ui/menu_item_list_view.dart @@ -4,6 +4,7 @@ import 'package:url_launcher/url_launcher.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; +import 'web_view_dialog.dart'; class MenuItemListView extends StatelessWidget { final PolaAnalytics analytics; @@ -87,10 +88,11 @@ class MenuItemListView extends StatelessWidget { iconPath: iconPath, onClick: () { analytics.aboutOpened(analyticsRow); - Navigator.pushNamed( - context, - '/web', - arguments: {'url': url, 'title': text}, + showDialog( + context: context, + builder: (context) { + return WebViewDialog(url: url, title: text); + }, ); }, ); diff --git a/lib/ui/web_view_dialog.dart b/lib/ui/web_view_dialog.dart new file mode 100644 index 0000000..50f0f38 --- /dev/null +++ b/lib/ui/web_view_dialog.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:pola_flutter/pages/web/web_view_page.dart'; + +class WebViewDialog extends StatelessWidget { + final String url; + final String title; + + const WebViewDialog({Key? key, required this.url, required this.title}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return DraggableScrollableSheet( + initialChildSize: 0.8, + minChildSize: 0.3, + maxChildSize: 1.0, + builder: (BuildContext context, ScrollController scrollController) { + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical(top: Radius.circular(16.0)), + ), + child: Column( + children: [ + Padding( + padding: + const EdgeInsets.only(left: 19.0, right: 17.0, top: 19.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Image.asset("assets/ic_launcher.png", + width: 35, height: 35), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 14.0), + child: Text( + title, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + color: Color(0xFF1C1B1F), + ), + ), + ), + ), + IconButton( + icon: + Image.asset("assets/back.png", width: 32, height: 32), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ), + ), + Expanded( + child: WebViewPage(url: url), + ), + ], + ), + ); + }, + ); + } +} diff --git a/lib/ui/web_view_tab.dart b/lib/ui/web_view_tab.dart new file mode 100644 index 0000000..677977b --- /dev/null +++ b/lib/ui/web_view_tab.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; +import 'package:pola_flutter/pages/web/web_view_page.dart'; + +class WebViewTab extends StatelessWidget { + final String title; + final String url; + + WebViewTab({Key? key, required this.title, required this.url}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text( + title, + style: TextStyle( + fontWeight: FontWeight.w700, + fontFamily: "lato", + color: Color(0xFF1C1B1F), + ), + ), + ), + body: Center( + child: WebViewPage(url: url), + ), + ); + } +} From f8c6d99532e3d28a8e4088e6bcba82bf83bbed1d Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:40:33 +0200 Subject: [PATCH 21/40] Integracja biblioteki flutter gen (#104) * add fonts.gen.dart * add assets.gen.dart --- lib/pages/detail/detail_content.dart | 27 +- lib/pages/detail/expandandable_text.dart | 5 +- lib/pages/detail/polish_capital_graph.dart | 5 +- lib/theme/assets.gen.dart | 296 +++++++++++++++++++++ lib/theme/fonts.gen.dart | 18 ++ lib/ui/menu_item_list_view.dart | 3 +- lib/ui/social_media_list_view.dart | 7 +- lib/ui/web_view_tab.dart | 3 +- pubspec.lock | 56 ++++ pubspec.yaml | 8 + 10 files changed, 406 insertions(+), 22 deletions(-) create mode 100644 lib/theme/assets.gen.dart create mode 100644 lib/theme/fonts.gen.dart diff --git a/lib/pages/detail/detail_content.dart b/lib/pages/detail/detail_content.dart index 2ef323e..4eb3ecd 100644 --- a/lib/pages/detail/detail_content.dart +++ b/lib/pages/detail/detail_content.dart @@ -1,11 +1,12 @@ import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:pola_flutter/models/company.dart'; import 'package:pola_flutter/models/search_result.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; +import 'package:pola_flutter/theme/fonts.gen.dart'; import 'logotypes.dart'; import 'expandandable_text.dart'; import 'polish_capital_graph.dart'; +import 'package:pola_flutter/theme/assets.gen.dart'; class DetailContent extends StatelessWidget { DetailContent(this.searchResult); @@ -38,18 +39,20 @@ class DetailContent extends StatelessWidget { alignment: Alignment.centerLeft, child: Row( children: [ - SvgPicture.asset( - 'assets/info.svg', - height: 24.0, - width: 24.0, - ), + Assets.info.svg(height: 24.0,width: 24.0), + // SvgPicture.asset( + // 'assets/info.svg', + // height: 24.0, + // width: 24.0, + // ), + SizedBox(width: 8.0), Text( t.companyScreen.ourRating, style: TextStyle( fontSize: 16.0, fontWeight: FontWeight.w600, - fontFamily: 'Lato', + fontFamily: FontFamily.lato, color: Color(0xFF1C1B1F), ), ), @@ -59,7 +62,7 @@ class DetailContent extends StatelessWidget { style: TextStyle( fontSize: 20.0, fontWeight: FontWeight.w700, - fontFamily: 'Lato', + fontFamily: FontFamily.lato, color: Color(0xFF1C1B1F), ), ), @@ -94,7 +97,7 @@ class DetailContent extends StatelessWidget { style: TextStyle( fontSize: 16.0, fontWeight: FontWeight.w600, - fontFamily: 'Lato', + fontFamily: FontFamily.lato, color: Color(0xFF1C1B1F), ), ), @@ -178,9 +181,7 @@ class _DetailItem extends StatelessWidget { children: [ Padding( padding: EdgeInsets.only(right: 3.0), - child: SvgPicture.asset( - state ? 'assets/task_alt.svg' : 'assets/radio_button_unchecked.svg', - ), + child: state ? Assets.taskAlt.svg() : Assets.radioButtonUnchecked.svg() ), Expanded( child: Text( @@ -188,7 +189,7 @@ class _DetailItem extends StatelessWidget { style: TextStyle( fontSize: 11, fontWeight: FontWeight.w400, - fontFamily: 'Lato', + fontFamily: FontFamily.lato, color: Color(0xFF1C1B1F), ), softWrap: true, diff --git a/lib/pages/detail/expandandable_text.dart b/lib/pages/detail/expandandable_text.dart index cdf74ee..716272d 100644 --- a/lib/pages/detail/expandandable_text.dart +++ b/lib/pages/detail/expandandable_text.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/gestures.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; +import 'package:pola_flutter/theme/fonts.gen.dart'; class ExpandableText extends StatefulWidget { final String text; @@ -20,7 +21,7 @@ class _ExpandableTextState extends State { color: Color(0xFF898989), fontSize: 11.0, fontWeight: FontWeight.w700, - fontFamily: 'Lato', + fontFamily: FontFamily.lato, ), text: isExpanded ? t.companyScreen.seeLess : t.companyScreen.seeMore, recognizer: TapGestureRecognizer() @@ -39,7 +40,7 @@ class _ExpandableTextState extends State { color: Color(0xFF1C1B1F), fontSize: 11.0, fontWeight: FontWeight.w400, - fontFamily: 'Lato', + fontFamily: FontFamily.lato, ), ); diff --git a/lib/pages/detail/polish_capital_graph.dart b/lib/pages/detail/polish_capital_graph.dart index 0fcfb35..299615b 100644 --- a/lib/pages/detail/polish_capital_graph.dart +++ b/lib/pages/detail/polish_capital_graph.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:pola_flutter/theme/fonts.gen.dart'; import 'package:syncfusion_flutter_gauges/gauges.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; @@ -48,7 +49,7 @@ class PolishCapitalGraph extends StatelessWidget { style: TextStyle( fontSize: 26.0, fontWeight: FontWeight.w700, - fontFamily: 'Lato', + fontFamily: FontFamily.lato, color: Color(0xFF1C1B1F), ), ), @@ -66,7 +67,7 @@ class PolishCapitalGraph extends StatelessWidget { fontSize: 11.0, fontWeight: FontWeight.w400, color: Color(0xFF1C1B1F), - fontFamily: 'Lato', + fontFamily: FontFamily.lato, ), ), ), diff --git a/lib/theme/assets.gen.dart b/lib/theme/assets.gen.dart new file mode 100644 index 0000000..00fae6e --- /dev/null +++ b/lib/theme/assets.gen.dart @@ -0,0 +1,296 @@ +/// GENERATED CODE - DO NOT MODIFY BY HAND +/// ***************************************************** +/// FlutterGen +/// ***************************************************** + +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use + +import 'package:flutter/widgets.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:vector_graphics/vector_graphics.dart'; + +class $AssetsIconsGen { + const $AssetsIconsGen(); + + /// Directory path: assets/icons/2.0x + $AssetsIcons20xGen get a2 => const $AssetsIcons20xGen(); + + /// Directory path: assets/icons/3.0x + $AssetsIcons30xGen get a3 => const $AssetsIcons30xGen(); + + /// File path: assets/icons/diversity.png + AssetGenImage get diversity => const AssetGenImage('assets/icons/diversity.png'); + + /// File path: assets/icons/github.png + AssetGenImage get github => const AssetGenImage('assets/icons/github.png'); + + /// File path: assets/icons/groups.png + AssetGenImage get groups => const AssetGenImage('assets/icons/groups.png'); + + /// File path: assets/icons/handshake.png + AssetGenImage get handshake => const AssetGenImage('assets/icons/handshake.png'); + + /// File path: assets/icons/info.png + AssetGenImage get info => const AssetGenImage('assets/icons/info.png'); + + /// File path: assets/icons/star.png + AssetGenImage get star => const AssetGenImage('assets/icons/star.png'); + + /// File path: assets/icons/thumbs.png + AssetGenImage get thumbs => const AssetGenImage('assets/icons/thumbs.png'); + + /// List of all assets + List get values => [diversity, github, groups, handshake, info, star, thumbs]; +} + +class $AssetsIcons20xGen { + const $AssetsIcons20xGen(); + + /// File path: assets/icons/2.0x/diversity.png + AssetGenImage get diversity => const AssetGenImage('assets/icons/2.0x/diversity.png'); + + /// File path: assets/icons/2.0x/github.png + AssetGenImage get github => const AssetGenImage('assets/icons/2.0x/github.png'); + + /// File path: assets/icons/2.0x/groups.png + AssetGenImage get groups => const AssetGenImage('assets/icons/2.0x/groups.png'); + + /// File path: assets/icons/2.0x/handshake.png + AssetGenImage get handshake => const AssetGenImage('assets/icons/2.0x/handshake.png'); + + /// File path: assets/icons/2.0x/info.png + AssetGenImage get info => const AssetGenImage('assets/icons/2.0x/info.png'); + + /// File path: assets/icons/2.0x/star.png + AssetGenImage get star => const AssetGenImage('assets/icons/2.0x/star.png'); + + /// File path: assets/icons/2.0x/thumbs.png + AssetGenImage get thumbs => const AssetGenImage('assets/icons/2.0x/thumbs.png'); + + /// List of all assets + List get values => [diversity, github, groups, handshake, info, star, thumbs]; +} + +class $AssetsIcons30xGen { + const $AssetsIcons30xGen(); + + /// File path: assets/icons/3.0x/diversity.png + AssetGenImage get diversity => const AssetGenImage('assets/icons/3.0x/diversity.png'); + + /// File path: assets/icons/3.0x/github.png + AssetGenImage get github => const AssetGenImage('assets/icons/3.0x/github.png'); + + /// File path: assets/icons/3.0x/groups.png + AssetGenImage get groups => const AssetGenImage('assets/icons/3.0x/groups.png'); + + /// File path: assets/icons/3.0x/handshake.png + AssetGenImage get handshake => const AssetGenImage('assets/icons/3.0x/handshake.png'); + + /// File path: assets/icons/3.0x/info.png + AssetGenImage get info => const AssetGenImage('assets/icons/3.0x/info.png'); + + /// File path: assets/icons/3.0x/star.png + AssetGenImage get star => const AssetGenImage('assets/icons/3.0x/star.png'); + + /// File path: assets/icons/3.0x/thumbs.png + AssetGenImage get thumbs => const AssetGenImage('assets/icons/3.0x/thumbs.png'); + + /// List of all assets + List get values => [diversity, github, groups, handshake, info, star, thumbs]; +} + +class Assets { + Assets._(); + + static const AssetGenImage back = AssetGenImage('assets/back.png'); + static const AssetGenImage icAddBlack24dp = AssetGenImage('assets/ic_add_black_24dp.png'); + static const AssetGenImage icBackspaceWhite36dp = AssetGenImage('assets/ic_backspace_white_36dp.png'); + static const AssetGenImage icDialpadWhite36dp = AssetGenImage('assets/ic_dialpad_white_36dp.png'); + static const AssetGenImage icDoneWhite36dp = AssetGenImage('assets/ic_done_white_36dp.png'); + static const AssetGenImage icFlashOffWhite48dp = AssetGenImage('assets/ic_flash_off_white_48dp.png'); + static const AssetGenImage icFlashOnWhite48dp = AssetGenImage('assets/ic_flash_on_white_48dp.png'); + static const AssetGenImage icHeart = AssetGenImage('assets/ic_heart.png'); + static const AssetGenImage icLauncher = AssetGenImage('assets/ic_launcher.png'); + static const $AssetsIconsGen icons = $AssetsIconsGen(); + static const SvgGenImage info = SvgGenImage('assets/info.svg'); + static const AssetGenImage menu = AssetGenImage('assets/menu.png'); + static const SvgGenImage radioButtonUnchecked = SvgGenImage('assets/radio_button_unchecked.svg'); + static const SvgGenImage taskAlt = SvgGenImage('assets/task_alt.svg'); + + /// List of all assets + static List get values => [ + back, + icAddBlack24dp, + icBackspaceWhite36dp, + icDialpadWhite36dp, + icDoneWhite36dp, + icFlashOffWhite48dp, + icFlashOnWhite48dp, + icHeart, + icLauncher, + info, + menu, + radioButtonUnchecked, + taskAlt + ]; +} + +class AssetGenImage { + const AssetGenImage( + this._assetName, { + this.size, + this.flavors = const {}, + }); + + final String _assetName; + + final Size? size; + final Set flavors; + + Image image({ + Key? key, + AssetBundle? bundle, + ImageFrameBuilder? frameBuilder, + ImageErrorWidgetBuilder? errorBuilder, + String? semanticLabel, + bool excludeFromSemantics = false, + double? scale, + double? width, + double? height, + Color? color, + Animation? opacity, + BlendMode? colorBlendMode, + BoxFit? fit, + AlignmentGeometry alignment = Alignment.center, + ImageRepeat repeat = ImageRepeat.noRepeat, + Rect? centerSlice, + bool matchTextDirection = false, + bool gaplessPlayback = false, + bool isAntiAlias = false, + String? package, + FilterQuality filterQuality = FilterQuality.low, + int? cacheWidth, + int? cacheHeight, + }) { + return Image.asset( + _assetName, + key: key, + bundle: bundle, + frameBuilder: frameBuilder, + errorBuilder: errorBuilder, + semanticLabel: semanticLabel, + excludeFromSemantics: excludeFromSemantics, + scale: scale, + width: width, + height: height, + color: color, + opacity: opacity, + colorBlendMode: colorBlendMode, + fit: fit, + alignment: alignment, + repeat: repeat, + centerSlice: centerSlice, + matchTextDirection: matchTextDirection, + gaplessPlayback: gaplessPlayback, + isAntiAlias: isAntiAlias, + package: package, + filterQuality: filterQuality, + cacheWidth: cacheWidth, + cacheHeight: cacheHeight, + ); + } + + ImageProvider provider({ + AssetBundle? bundle, + String? package, + }) { + return AssetImage( + _assetName, + bundle: bundle, + package: package, + ); + } + + String get path => _assetName; + + String get keyName => _assetName; +} + +class SvgGenImage { + const SvgGenImage( + this._assetName, { + this.size, + this.flavors = const {}, + }) : _isVecFormat = false; + + const SvgGenImage.vec( + this._assetName, { + this.size, + this.flavors = const {}, + }) : _isVecFormat = true; + + final String _assetName; + final Size? size; + final Set flavors; + final bool _isVecFormat; + + SvgPicture svg({ + Key? key, + bool matchTextDirection = false, + AssetBundle? bundle, + String? package, + double? width, + double? height, + BoxFit fit = BoxFit.contain, + AlignmentGeometry alignment = Alignment.center, + bool allowDrawingOutsideViewBox = false, + WidgetBuilder? placeholderBuilder, + String? semanticsLabel, + bool excludeFromSemantics = false, + SvgTheme? theme, + ColorFilter? colorFilter, + Clip clipBehavior = Clip.hardEdge, + @deprecated Color? color, + @deprecated BlendMode colorBlendMode = BlendMode.srcIn, + @deprecated bool cacheColorFilter = false, + }) { + final BytesLoader loader; + if (_isVecFormat) { + loader = AssetBytesLoader( + _assetName, + assetBundle: bundle, + packageName: package, + ); + } else { + loader = SvgAssetLoader( + _assetName, + assetBundle: bundle, + packageName: package, + theme: theme, + ); + } + return SvgPicture( + loader, + key: key, + matchTextDirection: matchTextDirection, + width: width, + height: height, + fit: fit, + alignment: alignment, + allowDrawingOutsideViewBox: allowDrawingOutsideViewBox, + placeholderBuilder: placeholderBuilder, + semanticsLabel: semanticsLabel, + excludeFromSemantics: excludeFromSemantics, + colorFilter: colorFilter ?? (color == null ? null : ColorFilter.mode(color, colorBlendMode)), + clipBehavior: clipBehavior, + cacheColorFilter: cacheColorFilter, + ); + } + + String get path => _assetName; + + String get keyName => _assetName; +} diff --git a/lib/theme/fonts.gen.dart b/lib/theme/fonts.gen.dart new file mode 100644 index 0000000..305560d --- /dev/null +++ b/lib/theme/fonts.gen.dart @@ -0,0 +1,18 @@ +/// GENERATED CODE - DO NOT MODIFY BY HAND +/// ***************************************************** +/// FlutterGen +/// ***************************************************** + +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use + +class FontFamily { + FontFamily._(); + + /// Font family: Lato + static const String lato = 'Lato'; + + /// Font family: Roboto + static const String roboto = 'Roboto'; +} diff --git a/lib/ui/menu_item_list_view.dart b/lib/ui/menu_item_list_view.dart index 6985a20..4641637 100644 --- a/lib/ui/menu_item_list_view.dart +++ b/lib/ui/menu_item_list_view.dart @@ -1,5 +1,6 @@ import 'dart:io'; import 'package:flutter/material.dart'; +import 'package:pola_flutter/theme/fonts.gen.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; @@ -134,7 +135,7 @@ class _MenuBottomItem extends StatelessWidget { }); final textStyle = const TextStyle( - fontWeight: FontWeight.w500, fontSize: 16.0, fontFamily: 'Lato'); + fontWeight: FontWeight.w500, fontSize: 16.0, fontFamily: FontFamily.lato); @override Widget build(BuildContext context) { diff --git a/lib/ui/social_media_list_view.dart b/lib/ui/social_media_list_view.dart index a7a3803..1a997e6 100644 --- a/lib/ui/social_media_list_view.dart +++ b/lib/ui/social_media_list_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; +import 'package:pola_flutter/theme/fonts.gen.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; @@ -22,7 +23,7 @@ class SocialMediaListView extends StatelessWidget { style: TextStyle( fontSize: 12, fontWeight: FontWeight.w700, - fontFamily: 'Lato', + fontFamily: FontFamily.lato ), ), ], @@ -65,7 +66,7 @@ class SocialMediaListView extends StatelessWidget { style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, - fontFamily: 'Lato'), + fontFamily: FontFamily.lato), ), ], ), @@ -113,7 +114,7 @@ class SocialItemView extends StatelessWidget { style: ElevatedButton.styleFrom( foregroundColor: const Color(0xFFE1203E), backgroundColor: const Color(0xFFF5DEDD), - textStyle: const TextStyle(fontFamily: 'Roboto'), + textStyle: const TextStyle(fontFamily: FontFamily.roboto), padding: const EdgeInsets.symmetric(horizontal: 24.0), ), onPressed: onPressed, diff --git a/lib/ui/web_view_tab.dart b/lib/ui/web_view_tab.dart index 677977b..b1071d9 100644 --- a/lib/ui/web_view_tab.dart +++ b/lib/ui/web_view_tab.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/pages/web/web_view_page.dart'; +import 'package:pola_flutter/theme/fonts.gen.dart'; class WebViewTab extends StatelessWidget { final String title; @@ -16,7 +17,7 @@ class WebViewTab extends StatelessWidget { title, style: TextStyle( fontWeight: FontWeight.w700, - fontFamily: "lato", + fontFamily: FontFamily.lato, color: Color(0xFF1C1B1F), ), ), diff --git a/pubspec.lock b/pubspec.lock index c6002a2..311935b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -185,6 +185,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + color: + dependency: transitive + description: + name: color + sha256: ddcdf1b3badd7008233f5acffaf20ca9f5dc2cd0172b75f68f24526a5f5725cb + url: "https://pub.dev" + source: hosted + version: "3.0.0" connectivity: dependency: "direct main" description: @@ -265,6 +273,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.6" + dartx: + dependency: transitive + description: + name: dartx + sha256: "8b25435617027257d43e6508b5fe061012880ddfdaa75a71d607c3de2a13d244" + url: "https://pub.dev" + source: hosted + version: "1.2.0" device_info_plus: dependency: transitive description: @@ -430,6 +446,22 @@ packages: url: "https://pub.dev" source: hosted version: "8.1.6" + flutter_gen_core: + dependency: transitive + description: + name: flutter_gen_core + sha256: d8e828ad015a8511624491b78ad8e3f86edb7993528b1613aefbb4ad95947795 + url: "https://pub.dev" + source: hosted + version: "5.6.0" + flutter_gen_runner: + dependency: "direct dev" + description: + name: flutter_gen_runner + sha256: "931b03f77c164df0a4815aac0efc619a6ac8ec4cada55025119fca4894dada90" + url: "https://pub.dev" + source: hosted + version: "5.6.0" flutter_svg: dependency: "direct main" description: @@ -488,6 +520,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.1" + hashcodes: + dependency: transitive + description: + name: hashcodes + sha256: "80f9410a5b3c8e110c4b7604546034749259f5d6dcca63e0d3c17c9258f1a651" + url: "https://pub.dev" + source: hosted + version: "2.0.0" http: dependency: "direct main" description: @@ -512,6 +552,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image_size_getter: + dependency: transitive + description: + name: image_size_getter + sha256: f98c4246144e9b968899d2dfde69091e22a539bb64bc9b0bea51505fbb490e57 + url: "https://pub.dev" + source: hosted + version: "2.1.3" in_app_review: dependency: "direct main" description: @@ -1053,6 +1101,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.0" + time: + dependency: transitive + description: + name: time + sha256: ad8e018a6c9db36cb917a031853a1aae49467a93e0d464683e029537d848c221 + url: "https://pub.dev" + source: hosted + version: "2.1.4" timing: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index e08e842..999b276 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,6 +41,7 @@ dev_dependencies: flutter_test: sdk: flutter build_runner: ^2.0.6 + flutter_gen_runner: ^5.6.0 json_serializable: any chopper_generator: ^8.0.1 test: any @@ -67,3 +68,10 @@ flutter: - asset: assets/fonts/Lato/Lato-Regular.ttf - asset: assets/fonts/Lato/Lato-Bold.ttf weight: 700 + +flutter_gen: + output: lib/theme/ + line_length: 120 + + integrations: + flutter_svg: true From a10abbb49d9ce967884a767e362ebb4aeb8a6809 Mon Sep 17 00:00:00 2001 From: karolgeneral <167442610+karolgeneral@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:37:23 +0200 Subject: [PATCH 22/40] 100 feature pola friends (#105) * 100/ add bar * 100/ add pola friends bar * 100/fixesrieview * 100/fixreview * 100/fixesrieview * 100/fix review * 100/ fix review --- assets/company/heart.svg | 3 + assets/{ => company}/info.svg | 0 .../{ => company}/radio_button_unchecked.svg | 0 assets/{ => company}/task_alt.svg | 0 assets/ic_heart.png | Bin 1149 -> 0 bytes lib/i18n/strings.g.dart | 8 +- lib/i18n/strings.i18n.json | 4 +- lib/pages/detail/detail_content.dart | 262 +++++++++--------- lib/pages/detail/friends_bar.dart | 57 ++++ lib/theme/assets.gen.dart | 32 ++- pubspec.yaml | 1 + 11 files changed, 225 insertions(+), 142 deletions(-) create mode 100644 assets/company/heart.svg rename assets/{ => company}/info.svg (100%) rename assets/{ => company}/radio_button_unchecked.svg (100%) rename assets/{ => company}/task_alt.svg (100%) delete mode 100644 assets/ic_heart.png create mode 100644 lib/pages/detail/friends_bar.dart diff --git a/assets/company/heart.svg b/assets/company/heart.svg new file mode 100644 index 0000000..3e26354 --- /dev/null +++ b/assets/company/heart.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/info.svg b/assets/company/info.svg similarity index 100% rename from assets/info.svg rename to assets/company/info.svg diff --git a/assets/radio_button_unchecked.svg b/assets/company/radio_button_unchecked.svg similarity index 100% rename from assets/radio_button_unchecked.svg rename to assets/company/radio_button_unchecked.svg diff --git a/assets/task_alt.svg b/assets/company/task_alt.svg similarity index 100% rename from assets/task_alt.svg rename to assets/company/task_alt.svg diff --git a/assets/ic_heart.png b/assets/ic_heart.png deleted file mode 100644 index 8722eba73c4baef42141519bc26e2a9436d78fef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmeAS@N?(olHy`uVBq!ia0vp^E_n(^mjC9CtZQ;KPSU+d*4 z1z!A8&iv+W_KVP6yuSjvcij8-{P4VV%}2e)CMRQA;+f7`&E&JM-!5=VP)*(1FEZNO zMwo5xPxB{R^7JnobXr_(+^du%6$!MEG0EHAg`tC0)&t1lEbxddW?>df|81ZAd9KRln{yd57H!$GZROhzy>j>T>FgyROG?Xj#CE*R ziq7t4dQ`EyIzV{q_2p}SRsG&_bza{3h8N%Y7w9!RA3po)!-WO=tRB3-F0H&+!y{o$ zoGf?8s>RCtdkfnRv8b=Q+PPrIsbgD@sYt0>uo{S(==lGWxP0b=)||j8l8?1!|I0hA zGb<(U+#0Lf89^EeWuk4*eNQ(A@J2cWiDh{wOl;E$6Td8U)*)@^ch!G=E!U>|7H<4}PkRqH zKTE7p>6iK2!&(>lIKp`T91p$QUpmW9oivbaPOUp19Vw}@TKbRE@^ihHC)Cy0oVGMA zdS1_dvwMTF@*HvBE3EF)^?MZNoz|E2k(}sl;Bm2RaikzmacXd4c*3MbYt_3%4w_sy zyO;MzN+)Q;o01>LPCanmb#&F~%C)==(U%`v7G@u3*spI`d; vv-7MK_k3pVpBWVS&+OI7aIMPK+4~qSN-d2vE9-a;Og{{su6{1-oD!M<`*qSc diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 6d719a8..646cf14 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 1 -/// Strings: 19 +/// Strings: 21 /// -/// Built on 2024-08-08 at 12:09 UTC +/// Built on 2024-08-13 at 07:42 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -186,6 +186,8 @@ class _StringsCompanyScreenEn { String get seeMore => ' zobacz więcej'; String get seeLess => ' zobacz mniej'; String points({required Object score}) => '${score} pkt'; + String get companyFriend => ' Ta firma jest przyjacielem Poli'; + String get polaFriends => 'Przyjaciele Poli'; } /// Flat map(s) containing all translations. @@ -213,6 +215,8 @@ extension on Translations { case 'companyScreen.seeMore': return ' zobacz więcej'; case 'companyScreen.seeLess': return ' zobacz mniej'; case 'companyScreen.points': return ({required Object score}) => '${score} pkt'; + case 'companyScreen.companyFriend': return ' Ta firma jest przyjacielem Poli'; + case 'companyScreen.polaFriends': return 'Przyjaciele Poli'; default: return null; } } diff --git a/lib/i18n/strings.i18n.json b/lib/i18n/strings.i18n.json index c3670ba..a1cec50 100644 --- a/lib/i18n/strings.i18n.json +++ b/lib/i18n/strings.i18n.json @@ -20,6 +20,8 @@ "notConcernPart":"Nie jest częścią zagranicznego koncernu", "seeMore":" zobacz więcej", "seeLess":" zobacz mniej", - "points":"$score pkt" + "points":"$score pkt", + "companyFriend": " Ta firma jest przyjacielem Poli", + "polaFriends": "Przyjaciele Poli" } } diff --git a/lib/pages/detail/detail_content.dart b/lib/pages/detail/detail_content.dart index 4eb3ecd..a6fe980 100644 --- a/lib/pages/detail/detail_content.dart +++ b/lib/pages/detail/detail_content.dart @@ -2,14 +2,15 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/models/company.dart'; import 'package:pola_flutter/models/search_result.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; +import 'package:pola_flutter/theme/assets.gen.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; import 'logotypes.dart'; import 'expandandable_text.dart'; import 'polish_capital_graph.dart'; -import 'package:pola_flutter/theme/assets.gen.dart'; +import 'friends_bar.dart'; class DetailContent extends StatelessWidget { - DetailContent(this.searchResult); + const DetailContent(this.searchResult, {Key? key}) : super(key: key); final SearchResult searchResult; @@ -17,7 +18,7 @@ class DetailContent extends StatelessWidget { Widget build(BuildContext context) { if (searchResult.companies == null) { return Padding( - padding: EdgeInsets.all(8.0), + padding: const EdgeInsets.all(8.0), child: Text(searchResult.altText ?? ""), ); } @@ -30,145 +31,148 @@ class DetailContent extends StatelessWidget { final hasLogo = company.logotypeUrl != null; final hasDescription = company.description?.isNotEmpty ?? false; - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 17.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Align( - alignment: Alignment.centerLeft, - child: Row( - children: [ - Assets.info.svg(height: 24.0,width: 24.0), - // SvgPicture.asset( - // 'assets/info.svg', - // height: 24.0, - // width: 24.0, - // ), - - SizedBox(width: 8.0), - Text( - t.companyScreen.ourRating, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, - fontFamily: FontFamily.lato, - color: Color(0xFF1C1B1F), - ), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if ((company.isFriend ?? false)) + FriendsBar(), + const SizedBox(height: 20.0), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 17.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.centerLeft, + child: Row( + children: [ + Assets.company.info.svg(height: 24.0, width: 24.0), + const SizedBox(width: 8.0), + Text( + t.companyScreen.ourRating, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + fontFamily: FontFamily.lato, + color: const Color(0xFF1C1B1F), + ), + ), + const SizedBox(width: 8.0), + Text( + t.companyScreen.points(score: score), + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.w700, + fontFamily: FontFamily.lato, + color: const Color(0xFF1C1B1F), + ), + ), + ], ), - SizedBox(width: 8.0), - Text( - t.companyScreen.points(score: score), - style: TextStyle( - fontSize: 20.0, - fontWeight: FontWeight.w700, - fontFamily: FontFamily.lato, - color: Color(0xFF1C1B1F), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(10.0), + child: LinearProgressIndicator( + value: score / 100.0, + backgroundColor: const Color(0xFFF5DEDD), + valueColor: + const AlwaysStoppedAnimation(Color(0xFFE1203E)), + minHeight: 12.0, ), ), - ], - ), - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: ClipRRect( - borderRadius: BorderRadius.circular(10.0), - child: LinearProgressIndicator( - value: score / 100.0, - backgroundColor: Color(0xFFF5DEDD), - valueColor: AlwaysStoppedAnimation(Color(0xFFE1203E)), - minHeight: 12.0, ), - ), - ), - SizedBox(height: 17.0), - Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 0, - endIndent: 0, - ), - Padding( - padding: const EdgeInsets.only(top: 22.0), - child: Align( - alignment: Alignment.centerLeft, - child: Text( - t.companyScreen.gradingCriteria, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, - fontFamily: FontFamily.lato, - color: Color(0xFF1C1B1F), - ), + const SizedBox(height: 17.0), + Divider( + thickness: 1.0, + color: const Color(0xFFF0F0F0), + indent: 0, + endIndent: 0, ), - ), - ), - SizedBox(height: 22.0), - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - PolishCapitalGraph(percentage: plCapital), - SizedBox(width: 35.0), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _DetailItem(t.companyScreen.producedInPoland, - (company.plWorkers ?? 0) != 0), - SizedBox(height: 14.0), - _DetailItem(t.companyScreen.researchInPoland, - (company.plRnD ?? 0) != 0), - SizedBox(height: 14.0), - _DetailItem(t.companyScreen.registeredInPoland, - (company.plRegistered ?? 0) != 0), - SizedBox(height: 14.0), - _DetailItem(t.companyScreen.notConcernPart, - (company.plNotGlobEnt ?? 0) != 0), - ], + Padding( + padding: const EdgeInsets.only(top: 22.0), + child: Align( + alignment: Alignment.centerLeft, + child: Text( + t.companyScreen.gradingCriteria, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + fontFamily: FontFamily.lato, + color: const Color(0xFF1C1B1F), + ), + ), ), ), - ], - ), - SizedBox(height: 22.0), - Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 0, - endIndent: 0, - ), - if (hasDescription) ...[ - Padding( - padding: EdgeInsets.symmetric(vertical: 22.0), - child: ExpandableText(company.description ?? ""), - ), - if (hasLogo) + const SizedBox(height: 22.0), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + PolishCapitalGraph(percentage: plCapital), + const SizedBox(width: 35.0), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _DetailItem(t.companyScreen.producedInPoland, + (company.plWorkers ?? 0) != 0), + const SizedBox(height: 14.0), + _DetailItem(t.companyScreen.researchInPoland, + (company.plRnD ?? 0) != 0), + const SizedBox(height: 14.0), + _DetailItem(t.companyScreen.registeredInPoland, + (company.plRegistered ?? 0) != 0), + const SizedBox(height: 14.0), + _DetailItem(t.companyScreen.notConcernPart, + (company.plNotGlobEnt ?? 0) != 0), + ], + ), + ), + ], + ), + const SizedBox(height: 22.0), Divider( thickness: 1.0, - color: Color(0xFFF0F0F0), + color: const Color(0xFFF0F0F0), indent: 0, endIndent: 0, ), - ], - if (hasLogo) - Logotypes( - logotypes: searchResult.logotypes(), - searchResult: searchResult), - SizedBox(height: 26.0), - if (hasLogo) - Divider( - thickness: 1.0, - color: Color(0xFFF0F0F0), - indent: 0, - endIndent: 0, - ), - ], - ), + if (hasDescription) ...[ + Padding( + padding: const EdgeInsets.symmetric(vertical: 22.0), + child: ExpandableText(company.description ?? ""), + ), + if (hasLogo) + Divider( + thickness: 1.0, + color: const Color(0xFFF0F0F0), + indent: 0, + endIndent: 0, + ), + ], + if (hasLogo) + Logotypes( + logotypes: searchResult.logotypes(), + searchResult: searchResult), + const SizedBox(height: 26.0), + if (hasLogo) + Divider( + thickness: 1.0, + color: const Color(0xFFF0F0F0), + indent: 0, + endIndent: 0, + ), + ], + ), + ), + ], ); } } class _DetailItem extends StatelessWidget { - _DetailItem(this.text, this.state); + const _DetailItem(this.text, this.state, {Key? key}) : super(key: key); final String text; final bool state; @@ -180,9 +184,9 @@ class _DetailItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [ Padding( - padding: EdgeInsets.only(right: 3.0), - child: state ? Assets.taskAlt.svg() : Assets.radioButtonUnchecked.svg() - ), + padding: const EdgeInsets.only(right: 3.0), + child: state ? Assets.company.taskAlt.svg() : Assets.company.radioButtonUnchecked.svg() + ), Expanded( child: Text( text, @@ -190,7 +194,7 @@ class _DetailItem extends StatelessWidget { fontSize: 11, fontWeight: FontWeight.w400, fontFamily: FontFamily.lato, - color: Color(0xFF1C1B1F), + color: const Color(0xFF1C1B1F), ), softWrap: true, overflow: TextOverflow.visible, diff --git a/lib/pages/detail/friends_bar.dart b/lib/pages/detail/friends_bar.dart new file mode 100644 index 0000000..f740395 --- /dev/null +++ b/lib/pages/detail/friends_bar.dart @@ -0,0 +1,57 @@ +import 'package:flutter/material.dart'; + import 'package:pola_flutter/theme/assets.gen.dart'; +import 'package:pola_flutter/theme/fonts.gen.dart'; +import 'package:pola_flutter/ui/web_view_dialog.dart'; +import 'package:pola_flutter/i18n/strings.g.dart'; + +class FriendsBar extends StatelessWidget { + @override + Widget build(BuildContext context) { + final Translations t = Translations.of(context); + + return GestureDetector( + onTap: () { + showDialog( + context: context, + builder: (context) { + return WebViewDialog( + url: "https://www.pola-app.pl/m/friends", + title: t.companyScreen.polaFriends + ); + }, + ); + }, + child: Container( + height: 40.0, + color: const Color(0xFFF5DEDD), + alignment: Alignment.center, + child: Row( + children: [ + Padding( + padding: const EdgeInsets.only(left: 9.0), + child: Assets.company.heart.svg() + ), + Expanded( + child: Center( + child: Text( + t.companyScreen.companyFriend, + style: TextStyle( + fontSize: 12.0, + fontWeight: FontWeight.w700, + fontFamily: FontFamily.lato, + color: Color(0xFFE1203E), + ), + textAlign: TextAlign.center, + ), + ), + ), + Padding( + padding: const EdgeInsets.only(right: 9.0), + child: Assets.company.heart.svg() + ), + ], + ), + ), + ); + } +} diff --git a/lib/theme/assets.gen.dart b/lib/theme/assets.gen.dart index 00fae6e..3ab7b8e 100644 --- a/lib/theme/assets.gen.dart +++ b/lib/theme/assets.gen.dart @@ -12,6 +12,25 @@ import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:vector_graphics/vector_graphics.dart'; +class $AssetsCompanyGen { + const $AssetsCompanyGen(); + + /// File path: assets/company/heart.svg + SvgGenImage get heart => const SvgGenImage('assets/company/heart.svg'); + + /// File path: assets/company/info.svg + SvgGenImage get info => const SvgGenImage('assets/company/info.svg'); + + /// File path: assets/company/radio_button_unchecked.svg + SvgGenImage get radioButtonUnchecked => const SvgGenImage('assets/company/radio_button_unchecked.svg'); + + /// File path: assets/company/task_alt.svg + SvgGenImage get taskAlt => const SvgGenImage('assets/company/task_alt.svg'); + + /// List of all assets + List get values => [heart, info, radioButtonUnchecked, taskAlt]; +} + class $AssetsIconsGen { const $AssetsIconsGen(); @@ -106,22 +125,19 @@ class Assets { Assets._(); static const AssetGenImage back = AssetGenImage('assets/back.png'); + static const $AssetsCompanyGen company = $AssetsCompanyGen(); static const AssetGenImage icAddBlack24dp = AssetGenImage('assets/ic_add_black_24dp.png'); static const AssetGenImage icBackspaceWhite36dp = AssetGenImage('assets/ic_backspace_white_36dp.png'); static const AssetGenImage icDialpadWhite36dp = AssetGenImage('assets/ic_dialpad_white_36dp.png'); static const AssetGenImage icDoneWhite36dp = AssetGenImage('assets/ic_done_white_36dp.png'); static const AssetGenImage icFlashOffWhite48dp = AssetGenImage('assets/ic_flash_off_white_48dp.png'); static const AssetGenImage icFlashOnWhite48dp = AssetGenImage('assets/ic_flash_on_white_48dp.png'); - static const AssetGenImage icHeart = AssetGenImage('assets/ic_heart.png'); static const AssetGenImage icLauncher = AssetGenImage('assets/ic_launcher.png'); static const $AssetsIconsGen icons = $AssetsIconsGen(); - static const SvgGenImage info = SvgGenImage('assets/info.svg'); static const AssetGenImage menu = AssetGenImage('assets/menu.png'); - static const SvgGenImage radioButtonUnchecked = SvgGenImage('assets/radio_button_unchecked.svg'); - static const SvgGenImage taskAlt = SvgGenImage('assets/task_alt.svg'); /// List of all assets - static List get values => [ + static List get values => [ back, icAddBlack24dp, icBackspaceWhite36dp, @@ -129,12 +145,8 @@ class Assets { icDoneWhite36dp, icFlashOffWhite48dp, icFlashOnWhite48dp, - icHeart, icLauncher, - info, - menu, - radioButtonUnchecked, - taskAlt + menu ]; } diff --git a/pubspec.yaml b/pubspec.yaml index 999b276..81d8f39 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -57,6 +57,7 @@ flutter: - assets/icons/2.0x/ - assets/icons/3.0x/ - assets/fonts/ + - assets/company/ fonts: - family: Roboto fonts: From 0b1b2c75b55f83484c66cfeff31f44fda82327a5 Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Tue, 13 Aug 2024 13:16:21 +0200 Subject: [PATCH 23/40] Svg w menu (#106) * changing png to svg * renaming files * review fixes --- assets/icons/2.0x/diversity.png | Bin 1489 -> 0 bytes assets/icons/2.0x/github.png | Bin 1430 -> 0 bytes assets/icons/2.0x/groups.png | Bin 874 -> 0 bytes assets/icons/2.0x/handshake.png | Bin 1401 -> 0 bytes assets/icons/2.0x/info.png | Bin 1253 -> 0 bytes assets/icons/2.0x/star.png | Bin 1438 -> 0 bytes assets/icons/2.0x/thumbs.png | Bin 931 -> 0 bytes assets/icons/3.0x/diversity.png | Bin 2272 -> 0 bytes assets/icons/3.0x/github.png | Bin 2165 -> 0 bytes assets/icons/3.0x/groups.png | Bin 1356 -> 0 bytes assets/icons/3.0x/handshake.png | Bin 1992 -> 0 bytes assets/icons/3.0x/info.png | Bin 1746 -> 0 bytes assets/icons/3.0x/star.png | Bin 2024 -> 0 bytes assets/icons/3.0x/thumbs.png | Bin 1255 -> 0 bytes assets/icons/diversity.png | Bin 772 -> 0 bytes assets/icons/github.png | Bin 807 -> 0 bytes assets/icons/groups.png | Bin 512 -> 0 bytes assets/icons/handshake.png | Bin 748 -> 0 bytes assets/icons/info.png | Bin 641 -> 0 bytes assets/icons/star.png | Bin 776 -> 0 bytes assets/icons/thumbs.png | Bin 526 -> 0 bytes assets/menuPage/diversity.svg | 8 +++ assets/menuPage/github.svg | 10 ++++ assets/menuPage/groups.svg | 3 + assets/menuPage/handshake.svg | 8 +++ assets/menuPage/info.svg | 3 + assets/menuPage/star.svg | 3 + assets/menuPage/thumbs.svg | 3 + lib/theme/assets.gen.dart | 98 ++++++-------------------------- lib/ui/menu_item_list_view.dart | 31 +++++----- pubspec.yaml | 4 +- 31 files changed, 73 insertions(+), 98 deletions(-) delete mode 100644 assets/icons/2.0x/diversity.png delete mode 100644 assets/icons/2.0x/github.png delete mode 100644 assets/icons/2.0x/groups.png delete mode 100644 assets/icons/2.0x/handshake.png delete mode 100644 assets/icons/2.0x/info.png delete mode 100644 assets/icons/2.0x/star.png delete mode 100644 assets/icons/2.0x/thumbs.png delete mode 100644 assets/icons/3.0x/diversity.png delete mode 100644 assets/icons/3.0x/github.png delete mode 100644 assets/icons/3.0x/groups.png delete mode 100644 assets/icons/3.0x/handshake.png delete mode 100644 assets/icons/3.0x/info.png delete mode 100644 assets/icons/3.0x/star.png delete mode 100644 assets/icons/3.0x/thumbs.png delete mode 100644 assets/icons/diversity.png delete mode 100644 assets/icons/github.png delete mode 100644 assets/icons/groups.png delete mode 100644 assets/icons/handshake.png delete mode 100644 assets/icons/info.png delete mode 100644 assets/icons/star.png delete mode 100644 assets/icons/thumbs.png create mode 100644 assets/menuPage/diversity.svg create mode 100644 assets/menuPage/github.svg create mode 100644 assets/menuPage/groups.svg create mode 100644 assets/menuPage/handshake.svg create mode 100644 assets/menuPage/info.svg create mode 100644 assets/menuPage/star.svg create mode 100644 assets/menuPage/thumbs.svg diff --git a/assets/icons/2.0x/diversity.png b/assets/icons/2.0x/diversity.png deleted file mode 100644 index 0cdf7da8417e316a99ec81406409001c16363c50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1489 zcmV;?1upuDP)l4aV7#VuE;rz%D!FU3VoXDY24{dN?{U}uXvI3B#SN~mJlm(J zzXcdYI}54^_(Bt~y;!MS-P~M<6h3{rx;_6Ro{;gs(Cd8mX({U({9ajHg6o^BzoQ>R z8So=imVZIUsHZ~8X7}Q(#gDb0^*un@gegHww$tlj-Ek~uI2LlCwzBq~{%pkj)|BA2 z=jJrivIfh;cXk0br1TmT`QISH2><~J#*-1U4JeLFC9sC`uB_;+pZ101IgL15y7p;( z%z?Nl`5Q{$PPc2Bkb>o9UDq_PndnH25q%eTlJ?3FtE>99=gNJha187Md0^XTyCVnK zYx4MgSZF+5lTfSaP4ap#RS0FP+dXSSMsRRSn!l{WD+Aqnx7#&^{|s_p{l<}ZU3{6x zcm`#vDFJtqz7MjQ-FOCPsWgXmwkh;M`V|r|F8Z$Lz06bBqo6ryU&uezF*g4E+&Y4S zpzInH*^|&9WkFl2RQ{l+7s{}CadGwrrohdO)2S>y!JzTca>O^3owqOruCE=dQmGoC zmUfA!B{KfGDoD!O@Ce}LM1Pv_h~P?yAdJxf;+Ehjg{1DG1OHRFu4bz5OhJ%pzf=dQ z#!lo%UlUP#1$^V6J-{9D3$fx3o40(b7!o$xOO0Uz;+}$@Ji7fX+SAOf>w2~S5K4f< z8L-rmg@yhG6a+V&#WIy-#HQLkk(-df1OCP`P!RpQa5LlHKn}vD+y5|M}(_=+ruYB+Sd6wB#W6zUkHJ%L{;P=+iKfZ=g~@Lw7jw5!(arP?^DQ_ zM=IB)xWRw{GMC}~!0R;={Z(;y2afVwEoqP$dGw2fA2Yc#;7fTmcq}+r|Q%s}Y}I2hyXF<_bAXE;g`F(8NjI0w=?Wn%rNBdz0lF$WI?{z1u`c*@JAKhA+P zHfpAP^G{Fq#p!x*DjUt?JB8Tl{fnC!3PCRYW2H>lL{V=Yssx)w`$Sgc)sHEY@Mbb# zkkSrCb(b3lq`)U~^ZgBy)#(VStKXz2`MS`$y(@Jl5xPA3r*0;3>~j*BoeGfVL&`N| zRup!C4PPvKdt`VqUK4<5#u448wu)021$?24n)ua|xUEK$(!Xn8o*fL|ImMHhXHFxm z2RF>a_4GcL>I4>6Y0@afnEVVge2@4KI>5Vhr7NqC00000NkvXXu0mjf`mD%~ diff --git a/assets/icons/2.0x/github.png b/assets/icons/2.0x/github.png deleted file mode 100644 index 7257af7aabcd4e1a5afc996a6f8bc45c383145b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1430 zcmV;H1!?+;P)s#X$l&rwQod!CF zF@EcGG86LDX^nJxj`#@{Lb_lf)9(Sxm!qru>7M@!LPXfv*)=Jd%p>6*A(#Y^LI7h@ zhR3=**5xaUh#EE|>fM&rg$RIf52Q2S<^k0UKrHbpQ?LMBa!9qlqt5O_Y9S&60*NwT z<{?5LLhaVU>LP^ZB4T7rBZ+hh5fkuY5kd)F!JTaGrBd)SUuIzWFquqoD&;yBZgt7lI!#fEO{4ZLeWY4_sgR&u|OiCN(rQ2z24^mVD3%&z<;eP5EmB7#SE*t5u%|muy z$6<2pik~PQU1ZebCLw75VV&sgN@5-ItXlYem>}=Q89Wdqg9wvBa15nWYbzVHikoFX z0%MqrG&~e{Jd7~G+uP`Js(C>`-B1~%CrT%N1Qj%^0eq}<#7049m7zrh*YPo|IFyci zV~?;84+XvOAWk8i2*#M2_&hx{Jg~Wc5MvK_t)w&Al7Jd*D6W4LyEmQsBA?Efd59TO zBk9CBuA?l4x``l{vk)_MYb2>iRez0DODoIdUD?gWMkbxj9cy)Ra8OpOuEoL5(M&-I zD{+t!61>7gJ!v|ZPq&G^@oe*knU(Zz#Qf9eUl^Y~-E8#U{TXS*my%-R^G)s>;E%fZ zaE){z>lim5(z|=_?-&-*8}`l>a@#mg5fP`VNNN8&edpZ%mrtG+Ok*T#c(i60*0>c@6Aex!Har!xyU&PBPA^%PS49E#|QW6 zXmT@e)DIh{DE&2c;^`cwxbJj2vI)MS!mj#Nz_c7RsjIUyS8ut6L(^xB^8g8IlTE!b z5ixq{_)Xm*2A<8ihG&1msus{DWql1I>Rn0|?txp+{dbZ^VaRXYry|3$=(3Qtc{|z5 zO~)Rb-Cgv9>-HA~P9Mun^&}0`OeOxIi>Yl#sXZNlb zP_NhRX5$C%pl@^4ZDuRF@T3Pl?vn3EbuKQLmx!pfXoTMyeCrVr{6>{mx(&9%aX*ID39A_ zf_FipcBg4+CXSj!Mv&8~PO~9rh}C5fk~zsehHDhOM{!}8i^vF)t_UGF6OgwjKzsvp kV~~P>+=0f{qCMvS01zu)%}EoQC;$Ke07*qoM6N<$f-obQQ~&?~ diff --git a/assets/icons/2.0x/groups.png b/assets/icons/2.0x/groups.png deleted file mode 100644 index 6ddd42fc70e4bafa5a23eb8904aefd9439ba7074..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmV-w1C{)VP)(qg1lUG|K*k85j~R9D z?o~HQq693$sso#wL9pi0IU5{6zOrbT;_l5&6oDmJb3h{hx=t5G#%l_rp99>nbrK3J zpI9t45^ zIHX&B{#$%$MRzT4P?E9c(PwV9_~-Ml#|G`0B;UgWBwE|Ad9W}{^s9o!7u*cTiv^*K zH5x$+iqY3QoD)Z~mn65RvIBjNXjXO={VyCCd+z7#?IX|;6oK$e?{ZGGd9N=Ub-Lv{ z-=3507HwmyKQDc{Ah|J&~Iwc|@80gP)psYUoMH5jJC25AcWlqSP z$W*)mM*8y{D7>GHUdbFtlEvRIxoqN|zR#0Wh=+q;xU)bZFw*~`lxayc?`^`BV8IrRkV2tBW7r}P>*yt!)z07^BncFjLxpFuTHhK0P@0(ABiwefkY{eze;7Pq|H)s z6jG1pfAGR&ti|Ulw8ec{(<*X8r`gTM+hZQxhYE*l5=}P#97<|@mZ|4gc4Hm(=Zzni z$&v5U+i#rUvHseXM}UP@eRx*2u( zblR{4noW)}O`|N4y^1flrJcuMbI`+i8k`56`Ys~B3QTob`=I$-5C=@ZO|AZ`pkom- zI4`f{g)>=bDsO;9d3g8-pF07*qoM6N<$f*k#b AKL7v# diff --git a/assets/icons/2.0x/handshake.png b/assets/icons/2.0x/handshake.png deleted file mode 100644 index 380910cdbfd0df4bd4dbb61a33e3ecb0d5f7ddfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1401 zcmV-<1%~>GP)K~#7F?O8u_ z8b=g=dk2bb5C&^9Bj=EG>QdTWx`-~Fr81RJm(JEFu=EKcm#Kt0r7|v433usCK7kK$ zSW2anff>&TZvEZ?=jFIRduXZ5Zw3vw?B4#~zW*zLC6@TU!C(%oubXC8cVD`k?J@=? zjd6e`{%x|MduCtT4RL<4Xcluhx5|LMz{h7agdYb#O%Co^r_-*%oJcLehOzl42lgs% z4hLTA_q9XEv7GXHd57uxDGF#pGzn|qx`$U+?K-4{v;cI9`5b?XUw35Y6DjWU6VTWR zNJ0Zvz3f%wpNxGw&NDl#ACO7D6-#}UW7U8lKPD4_~rcWNJeE*47GZP)n^ zV!%|97ZIfia_qZd`1*M@p{XKoVs0>gG`uyIWjSc;Gd@9~G^_Iq$|J$`osLz*@O%&) zPx6Tw0rGk86r{;NeY&w*HnwgCI{(O4G9NaKt&fJWQB4wp4hj?qG35i4q)^dSS@QH! z#@IQ2eIN`M(cX6ptB>Kb-TEiOCyFa8@XP1!?Tl%p^$FhxNUa$>#WdvUWFQWlAK9NS zkE48oLNI0Pu%%Hx0c=>Y?Qf-uZ$i56zJ~jgpC-fDQTeCM*Md1U#Gmu|L1bc#GAG9M zQ_=i<0Z{GF0-GPFAP8*s#ufq$pixzYJnmDAbbJ5+D3qA zpR(j9ND_j22P(Hg5+Q=l`T$DsUfiJ9%QR)klS5%1xWErLj7{IcNC+(0p5sYVsBDf8 zs6oEf>9n3lMV~NWL<%~)zc%9&(lxX-zCSu0R-p}K$ctGU13@*H8@@+}_126}t_t^r zrn&pvovM2LdFw6CoXUnt z`+2wkJMj zV%{;8bTBU@k`MX~`UK=3xh?dGBTzt|EC3I&DJ1}@YI0>lSk3Vdd?Zv+hP;4OeRSH8 z9hu0O;3#9FCZs11L$1|85^2d3B16WLwPG`@HG~x8X=BU>=VW?oYlS}wg~HF>?&qc| z^4{+d11f{>?%Wg9#!NGTmFnKrl~qrhD-aF5m8hs7pD4ft9trBygs@8eE$X2jc1xEK zZXFb$q=Gy_s+b#vLH0%*BcGUqJQZX*j4R~ zi?bO}dEAyrbTTy-q(G{|g)XkT-P<}g-S3dn!|5&#lUBa)|AQac?5)Ov$d7iN6XmkG zgW2vPY2G5qdu!nypgsU%uG<$)o{-81g20C5AlS)GK;w%h@4W*QV0?!|$!Sb diff --git a/assets/icons/2.0x/info.png b/assets/icons/2.0x/info.png deleted file mode 100644 index 9262fb513368172446707d4e9df5c350136c179c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1253 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 diff --git a/assets/icons/3.0x/groups.png b/assets/icons/3.0x/groups.png deleted file mode 100644 index 5659026a7704797bc15c6a876ef7222d7c867e85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1356 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 diff --git a/assets/icons/3.0x/star.png b/assets/icons/3.0x/star.png deleted file mode 100644 index aaa252e18e0d3583416da5e244383dfe2a5e4912..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2024 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 diff --git a/assets/icons/groups.png b/assets/icons/groups.png deleted file mode 100644 index 0499f205bd7af84b82964f0431341c3fc454865c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)0Y5 z3dAj6GI`T^@0WT!6cKAsgKNJA0g-#F|Ucdib;UG;`y_rz+W29=)0KfA?0kFy!t~gKz z)?o$aST(@+FGT3mZ>?@n9RJTX&1AIZmfW)HKq$kdQ)>CXst*RP8|MRM$J6_hvTO<> zXvyN`wO6oh?I6(O+_BjCe(uN$f(BmvbJH|CbmU(#(`n9-u(&7%=}8U+ zbT{iOHO+)-xNbB{sm?GaHD1>eka5G;r&&A4gU2#XgQJs9kv6%`Vx%O3-mHAkfu+ou zm3akWwLzf{JAuhtY5JK82J-`P_HEv7<70;%;_(fNJ+yls%T3n+0000LgDy5-Jg(*{6IstHk*e8f@VAG|;M-U)qC`BAs zAZ>Q_71@?7x0&pW^hW!he*fKl`yRl*Zdf$YY?x<$KwU&Id67dzefQ^`-KaH=K+}4> z@5N65<_nERwVG+J70AK~816b_@!#J&LqEV)ECM|4d!FM-#EHL11dHI)sWS=v zTyxY^Cjh$keQm5M8p*zJ?fcW|-Kne*XyRWkS14c@dnX9$+X{SnFNmz?Kn)TYf7`tA zR-VXgj)#(^it40#;s1c=xp0JGG@?~eK?g9fqfgjRw3o}Z^*ZQ6vIpXjk>UMSI7jK; zwpsi%5s9;f0MvE1-eFk~+wr=yzXH+bdAe@u%Wxt!loE=#bQ46aDjjAg0c9ee6X_vi+E98PKZ7EdzLARGWMvT!*-(g4({2=GKV?iMd}1Te|Mr42O|^zdcn#;7;DW$-B2{B$i|+)GQBg(IFw z0DKP}RupvB!Ns&ZfnPIktZ!EzIr5ME`HBzLxkBh9a5?Q7!sjx0VFpE+Byc47vFfTxPL9X18UjV!y#f_WE3s7zx;RT2vm=_>JmI{>vDqOi3 ztYJng6|%Kbj5$G9O|7JznO^no%mV!Dz_!VLU-!G+EJVVG1TaAaE#HYC;lMdz_STrs z(Ov|e=Z6StCOpudAju$m-bAEaAAN5)v0V1 z0!cpbM#T2b_jP!azvt;td?m(3f}75{EVA;HS9okpGKU?&BohRB$B%va+p1g}5-Cup zGIH`~uH?Qq`Y5*jU3?|Ru2{|FaMTE7^`a*~#vBlV0~uL!p@@m)FS@s~uttEWPKwo^ zLj%m0#aOIqp5-~Wxge+!PzICyVFf$s?!tQAi7f%%uMw0*WUiVwwrLMaTwW$gzE~@D zjsy4uR0DU#Z;814WgOodk6=&8ag|Z3yGDS@YQIuHk6~}Da{?mzP$N);?=8D}411!C zB~)+f1cwmukg^3sPdiCO#!|{{NF7P6%vbAZt5s-j74(;_0;g4iPStU_Oy|9$qdUwS zF!Q6^z24X5@_Q?Z{abnsdFQ1wV-_!}^UnKVFc`jMA)gelabBUTY;LYhPNwf_{R7qk zc5=-F>qci6=F`*dTrC$4w`!u(vH)9<7R@noP2vr~c3+TAq?K%3nS88?Pu}%4L}{9& b@ZaJWCtc;j3u(&d00000NkvXXu0mjf$cY*| diff --git a/assets/icons/star.png b/assets/icons/star.png deleted file mode 100644 index 9c2a5caa0f32117d29b12727717b6851971e9bbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 zcmV+j1NZ!iP)lY{0nzIYG?{N>0#lg3uEHCm=mR$O%GD5a$Hp26b8^Me0L&X!?-g zozAR(M8O0jb)=PNcjssKn{U2>7W;|1SyZbOzL-$4AGlGQOn}ytN>Kgy@bm-H7@O@o5>~QVBGWfrL;^ zK~W$&s&X*lE(3w5Vv(Wd?$C!%`-g|RUpsJvZLUkGgq8PIx+kza*dYXXmFEP!Vc2|yH~`BUZ1brAEh>auG{W;d z5J89t;kt1gLy#wU0~7rMMKxdmVFeAkGIw_z?+k&)V!#Wb20fb3e@tKxX}aFICK{$m zn99g8!i&7fQcO$HEuY>qxq&8etVWNIVfb2LQ^OivvP0J0!7|2P=C{Ej*Y$>s(;(dp z3FBTAML|(;x9<9AS(j-O%CWvi^Y8stn~gq*qHxI9JCRx#N7`OQDX@6}*%lBx>%j{X zh%k1utk7BK7KyM)zGBM<3yN(DMC!pG-%OS&SY1!|j6BCMO;ulNQ96NT#lC#y>hquB zOmtxhcl5ms=cs9*kU|=GSgP;zS?L6bD&aU%ASY`$%`sE(0ul<^{0@yBUQ28f2)DgW z#gAQ1Idxa7(k&OgpDg1SjyN&_c};$wOy^nZ)h>c*gQkr}qf1&{r&D>zY}4Heds!j5 zG24vab=ot=CW#hz)+xPl1FiqLsyGHufAD0LCBm{;V~3A7&4ZgOZvINu<^uY;Jwp=B zA38-(vJ^Oq9!@jJ62Z?q6KG1N7YOK(6xV&TeI{%ojBJ8g)LsR?1q zd{wFW$;+Ee&r1Lb?CnW;5Ok)^rffnDctvyHqp9w8{RTb1y}#bWKf$6o0Z1MzzzAvp zZRQLSJU|VgX|AtuGoP$hQ3N$0+CgWQnbQQ3?nvQnsTd%7jORz-0Onu>N4pvSnklxGG3hJBj+7d1OifpVX%KV%C*jiT!s<% zP+vVZPn9^SWdZYN$mHhymkbSwJXH+RSTP0DTziCM=pWUs+DTS6nm` Q#Q*>R07*qoM6N<$g1i;pWB>pF diff --git a/assets/menuPage/diversity.svg b/assets/menuPage/diversity.svg new file mode 100644 index 0000000..ef0b50a --- /dev/null +++ b/assets/menuPage/diversity.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/menuPage/github.svg b/assets/menuPage/github.svg new file mode 100644 index 0000000..a2ce021 --- /dev/null +++ b/assets/menuPage/github.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/menuPage/groups.svg b/assets/menuPage/groups.svg new file mode 100644 index 0000000..8da51f1 --- /dev/null +++ b/assets/menuPage/groups.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/menuPage/handshake.svg b/assets/menuPage/handshake.svg new file mode 100644 index 0000000..4bd1a35 --- /dev/null +++ b/assets/menuPage/handshake.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/menuPage/info.svg b/assets/menuPage/info.svg new file mode 100644 index 0000000..3778156 --- /dev/null +++ b/assets/menuPage/info.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/menuPage/star.svg b/assets/menuPage/star.svg new file mode 100644 index 0000000..b859834 --- /dev/null +++ b/assets/menuPage/star.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/menuPage/thumbs.svg b/assets/menuPage/thumbs.svg new file mode 100644 index 0000000..c214493 --- /dev/null +++ b/assets/menuPage/thumbs.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/theme/assets.gen.dart b/lib/theme/assets.gen.dart index 3ab7b8e..3c91f5b 100644 --- a/lib/theme/assets.gen.dart +++ b/lib/theme/assets.gen.dart @@ -31,94 +31,32 @@ class $AssetsCompanyGen { List get values => [heart, info, radioButtonUnchecked, taskAlt]; } -class $AssetsIconsGen { - const $AssetsIconsGen(); +class $AssetsMenuPageGen { + const $AssetsMenuPageGen(); - /// Directory path: assets/icons/2.0x - $AssetsIcons20xGen get a2 => const $AssetsIcons20xGen(); + /// File path: assets/menuPage/diversity.svg + SvgGenImage get diversity => const SvgGenImage('assets/menuPage/diversity.svg'); - /// Directory path: assets/icons/3.0x - $AssetsIcons30xGen get a3 => const $AssetsIcons30xGen(); + /// File path: assets/menuPage/github.svg + SvgGenImage get github => const SvgGenImage('assets/menuPage/github.svg'); - /// File path: assets/icons/diversity.png - AssetGenImage get diversity => const AssetGenImage('assets/icons/diversity.png'); + /// File path: assets/menuPage/groups.svg + SvgGenImage get groups => const SvgGenImage('assets/menuPage/groups.svg'); - /// File path: assets/icons/github.png - AssetGenImage get github => const AssetGenImage('assets/icons/github.png'); + /// File path: assets/menuPage/handshake.svg + SvgGenImage get handshake => const SvgGenImage('assets/menuPage/handshake.svg'); - /// File path: assets/icons/groups.png - AssetGenImage get groups => const AssetGenImage('assets/icons/groups.png'); + /// File path: assets/menuPage/info.svg + SvgGenImage get info => const SvgGenImage('assets/menuPage/info.svg'); - /// File path: assets/icons/handshake.png - AssetGenImage get handshake => const AssetGenImage('assets/icons/handshake.png'); + /// File path: assets/menuPage/star.svg + SvgGenImage get star => const SvgGenImage('assets/menuPage/star.svg'); - /// File path: assets/icons/info.png - AssetGenImage get info => const AssetGenImage('assets/icons/info.png'); - - /// File path: assets/icons/star.png - AssetGenImage get star => const AssetGenImage('assets/icons/star.png'); - - /// File path: assets/icons/thumbs.png - AssetGenImage get thumbs => const AssetGenImage('assets/icons/thumbs.png'); - - /// List of all assets - List get values => [diversity, github, groups, handshake, info, star, thumbs]; -} - -class $AssetsIcons20xGen { - const $AssetsIcons20xGen(); - - /// File path: assets/icons/2.0x/diversity.png - AssetGenImage get diversity => const AssetGenImage('assets/icons/2.0x/diversity.png'); - - /// File path: assets/icons/2.0x/github.png - AssetGenImage get github => const AssetGenImage('assets/icons/2.0x/github.png'); - - /// File path: assets/icons/2.0x/groups.png - AssetGenImage get groups => const AssetGenImage('assets/icons/2.0x/groups.png'); - - /// File path: assets/icons/2.0x/handshake.png - AssetGenImage get handshake => const AssetGenImage('assets/icons/2.0x/handshake.png'); - - /// File path: assets/icons/2.0x/info.png - AssetGenImage get info => const AssetGenImage('assets/icons/2.0x/info.png'); - - /// File path: assets/icons/2.0x/star.png - AssetGenImage get star => const AssetGenImage('assets/icons/2.0x/star.png'); - - /// File path: assets/icons/2.0x/thumbs.png - AssetGenImage get thumbs => const AssetGenImage('assets/icons/2.0x/thumbs.png'); - - /// List of all assets - List get values => [diversity, github, groups, handshake, info, star, thumbs]; -} - -class $AssetsIcons30xGen { - const $AssetsIcons30xGen(); - - /// File path: assets/icons/3.0x/diversity.png - AssetGenImage get diversity => const AssetGenImage('assets/icons/3.0x/diversity.png'); - - /// File path: assets/icons/3.0x/github.png - AssetGenImage get github => const AssetGenImage('assets/icons/3.0x/github.png'); - - /// File path: assets/icons/3.0x/groups.png - AssetGenImage get groups => const AssetGenImage('assets/icons/3.0x/groups.png'); - - /// File path: assets/icons/3.0x/handshake.png - AssetGenImage get handshake => const AssetGenImage('assets/icons/3.0x/handshake.png'); - - /// File path: assets/icons/3.0x/info.png - AssetGenImage get info => const AssetGenImage('assets/icons/3.0x/info.png'); - - /// File path: assets/icons/3.0x/star.png - AssetGenImage get star => const AssetGenImage('assets/icons/3.0x/star.png'); - - /// File path: assets/icons/3.0x/thumbs.png - AssetGenImage get thumbs => const AssetGenImage('assets/icons/3.0x/thumbs.png'); + /// File path: assets/menuPage/thumbs.svg + SvgGenImage get thumbs => const SvgGenImage('assets/menuPage/thumbs.svg'); /// List of all assets - List get values => [diversity, github, groups, handshake, info, star, thumbs]; + List get values => [diversity, github, groups, handshake, info, star, thumbs]; } class Assets { @@ -133,8 +71,8 @@ class Assets { static const AssetGenImage icFlashOffWhite48dp = AssetGenImage('assets/ic_flash_off_white_48dp.png'); static const AssetGenImage icFlashOnWhite48dp = AssetGenImage('assets/ic_flash_on_white_48dp.png'); static const AssetGenImage icLauncher = AssetGenImage('assets/ic_launcher.png'); - static const $AssetsIconsGen icons = $AssetsIconsGen(); static const AssetGenImage menu = AssetGenImage('assets/menu.png'); + static const $AssetsMenuPageGen menuPage = $AssetsMenuPageGen(); /// List of all assets static List get values => [ diff --git a/lib/ui/menu_item_list_view.dart b/lib/ui/menu_item_list_view.dart index 4641637..86b5ed7 100644 --- a/lib/ui/menu_item_list_view.dart +++ b/lib/ui/menu_item_list_view.dart @@ -1,5 +1,6 @@ import 'dart:io'; import 'package:flutter/material.dart'; +import 'package:pola_flutter/theme/assets.gen.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; @@ -20,41 +21,41 @@ class MenuItemListView extends StatelessWidget { _webViewItem( context: context, text: t.menu.aboutPola, - iconPath: 'info', + icon: Assets.menuPage.info.svg(), analyticsRow: AnalyticsAboutRow.aboutPola, url: 'https://www.pola-app.pl/m/about', ), _webViewItem( context: context, text: t.menu.aboutClub, - iconPath: 'info', + icon: Assets.menuPage.info.svg(), analyticsRow: AnalyticsAboutRow.aboutKJ, url: 'https://klubjagiellonski.pl/o-klubie-jagiellonskim/', ), _webViewItem( context: context, text: t.menu.instruction, - iconPath: 'thumbs', + icon: Assets.menuPage.thumbs.svg(), analyticsRow: AnalyticsAboutRow.instructionSet, url: 'https://www.pola-app.pl/m/method', ), _webViewItem( context: context, text: t.menu.partners, - iconPath: 'handshake', + icon: Assets.menuPage.handshake.svg(), analyticsRow: AnalyticsAboutRow.partners, url: 'https://www.pola-app.pl/m/partners', ), _webViewItem( context: context, text: t.menu.polasFriends, - iconPath: 'diversity', + icon: Assets.menuPage.diversity.svg(), analyticsRow: AnalyticsAboutRow.polasFriends, url: 'https://www.pola-app.pl/m/friends', ), _externalUrlItem( text: t.menu.rateUS, - iconPath: 'star', + icon: Assets.menuPage.star.svg(), analyticsRow: AnalyticsAboutRow.rateUs, url: Platform.isIOS ? "https://apps.apple.com/app/id1038401148" @@ -63,13 +64,13 @@ class MenuItemListView extends StatelessWidget { _webViewItem( context: context, text: t.menu.team, - iconPath: 'groups', + icon: Assets.menuPage.groups.svg(), analyticsRow: AnalyticsAboutRow.team, url: 'https://www.pola-app.pl/m/team', ), _externalUrlItem( text: "Github", - iconPath: 'github', + icon: Assets.menuPage.github.svg(), analyticsRow: AnalyticsAboutRow.github, url: 'https://github.com/KlubJagiellonski', ), @@ -80,13 +81,13 @@ class MenuItemListView extends StatelessWidget { Widget _webViewItem({ required BuildContext context, required String text, - required String iconPath, + required Widget icon, required AnalyticsAboutRow analyticsRow, required String url, }) { return _MenuBottomItem( text: text, - iconPath: iconPath, + icon: icon, onClick: () { analytics.aboutOpened(analyticsRow); showDialog( @@ -101,13 +102,13 @@ class MenuItemListView extends StatelessWidget { Widget _externalUrlItem({ required String text, - required String iconPath, + required Widget icon, required AnalyticsAboutRow analyticsRow, required String url, }) { return _MenuBottomItem( text: text, - iconPath: iconPath, + icon: icon, onClick: () { analytics.aboutOpened(analyticsRow); _launchURL(url); @@ -125,12 +126,12 @@ class MenuItemListView extends StatelessWidget { class _MenuBottomItem extends StatelessWidget { final String text; - final String iconPath; + final Widget icon; final VoidCallback onClick; const _MenuBottomItem({ required this.text, - required this.iconPath, + required this.icon, required this.onClick, }); @@ -147,7 +148,7 @@ class _MenuBottomItem extends StatelessWidget { Row( children: [ const SizedBox(width: 32), - Image.asset("assets/icons/$iconPath.png"), + icon, const SizedBox(width: 20.0), Text(text, style: textStyle), const SizedBox(width: 32), diff --git a/pubspec.yaml b/pubspec.yaml index 81d8f39..cd72a70 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -53,9 +53,7 @@ flutter: assets: - assets/ - - assets/icons/ - - assets/icons/2.0x/ - - assets/icons/3.0x/ + - assets/menuPage/ - assets/fonts/ - assets/company/ fonts: From 8bffbb9d651a1ae84a57aacf01670aa1ff86219e Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Tue, 13 Aug 2024 13:33:50 +0200 Subject: [PATCH 24/40] Text size (#108) * add class text size * use text size in code * fixes review * fixes review --- lib/pages/detail/detail_content.dart | 9 +++++---- lib/pages/detail/friends_bar.dart | 3 ++- lib/theme/fonts.gen.dart | 3 ++- lib/theme/text_size.dart | 18 ++++++++++++++++++ lib/ui/list_item.dart | 5 +++-- lib/ui/menu_item_list_view.dart | 3 ++- lib/ui/social_media_list_view.dart | 3 ++- lib/ui/web_view_dialog.dart | 3 ++- 8 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 lib/theme/text_size.dart diff --git a/lib/pages/detail/detail_content.dart b/lib/pages/detail/detail_content.dart index a6fe980..92df742 100644 --- a/lib/pages/detail/detail_content.dart +++ b/lib/pages/detail/detail_content.dart @@ -4,6 +4,7 @@ import 'package:pola_flutter/models/search_result.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; import 'package:pola_flutter/theme/assets.gen.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; +import 'package:pola_flutter/theme/text_size.dart'; import 'logotypes.dart'; import 'expandandable_text.dart'; import 'polish_capital_graph.dart'; @@ -51,7 +52,7 @@ class DetailContent extends StatelessWidget { Text( t.companyScreen.ourRating, style: TextStyle( - fontSize: 16.0, + fontSize: TextSize.mediumTitle, fontWeight: FontWeight.w600, fontFamily: FontFamily.lato, color: const Color(0xFF1C1B1F), @@ -61,7 +62,7 @@ class DetailContent extends StatelessWidget { Text( t.companyScreen.points(score: score), style: TextStyle( - fontSize: 20.0, + fontSize: TextSize.newsTitle, fontWeight: FontWeight.w700, fontFamily: FontFamily.lato, color: const Color(0xFF1C1B1F), @@ -97,7 +98,7 @@ class DetailContent extends StatelessWidget { child: Text( t.companyScreen.gradingCriteria, style: TextStyle( - fontSize: 16.0, + fontSize: TextSize.mediumTitle, fontWeight: FontWeight.w600, fontFamily: FontFamily.lato, color: const Color(0xFF1C1B1F), @@ -191,7 +192,7 @@ class _DetailItem extends StatelessWidget { child: Text( text, style: TextStyle( - fontSize: 11, + fontSize: TextSize.description, fontWeight: FontWeight.w400, fontFamily: FontFamily.lato, color: const Color(0xFF1C1B1F), diff --git a/lib/pages/detail/friends_bar.dart b/lib/pages/detail/friends_bar.dart index f740395..df2b43a 100644 --- a/lib/pages/detail/friends_bar.dart +++ b/lib/pages/detail/friends_bar.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/theme/assets.gen.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; +import 'package:pola_flutter/theme/text_size.dart'; import 'package:pola_flutter/ui/web_view_dialog.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; @@ -36,7 +37,7 @@ class FriendsBar extends StatelessWidget { child: Text( t.companyScreen.companyFriend, style: TextStyle( - fontSize: 12.0, + fontSize: TextSize.smallTitle, fontWeight: FontWeight.w700, fontFamily: FontFamily.lato, color: Color(0xFFE1203E), diff --git a/lib/theme/fonts.gen.dart b/lib/theme/fonts.gen.dart index 305560d..71f2e54 100644 --- a/lib/theme/fonts.gen.dart +++ b/lib/theme/fonts.gen.dart @@ -1,7 +1,7 @@ /// GENERATED CODE - DO NOT MODIFY BY HAND /// ***************************************************** /// FlutterGen -/// ***************************************************** +/// ** *************************************************** // coverage:ignore-file // ignore_for_file: type=lint @@ -16,3 +16,4 @@ class FontFamily { /// Font family: Roboto static const String roboto = 'Roboto'; } + diff --git a/lib/theme/text_size.dart b/lib/theme/text_size.dart new file mode 100644 index 0000000..2a89798 --- /dev/null +++ b/lib/theme/text_size.dart @@ -0,0 +1,18 @@ +class TextSize { + TextSize._(); + + /// Text size for Page title + static const double pageTitle = 24.0; + + /// Text size for News title + static const double newsTitle = 20.0; + + /// Text size for Medium title + static const double mediumTitle = 16.0; + + /// Text size for Small title + static const double smallTitle = 12.0; + + /// Text size for Description + static const double description = 11.0; +} diff --git a/lib/ui/list_item.dart b/lib/ui/list_item.dart index 7ed34e6..e9653d9 100644 --- a/lib/ui/list_item.dart +++ b/lib/ui/list_item.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/models/search_result.dart'; +import 'package:pola_flutter/theme/text_size.dart'; class ResultListItem extends StatelessWidget { ResultListItem(this.searchResult); @@ -8,7 +9,7 @@ class ResultListItem extends StatelessWidget { @override Widget build(BuildContext context) { - final textStyle = TextStyle(fontWeight: FontWeight.normal, fontSize: 16.0); + final textStyle = TextStyle(fontWeight: FontWeight.normal, fontSize: TextSize.mediumTitle); return _ListItem( child: Column( children: [ @@ -45,7 +46,7 @@ class LoadingListItem extends StatelessWidget { @override Widget build(BuildContext context) { - final textStyle = TextStyle(fontWeight: FontWeight.normal, fontSize: 16.0); + final textStyle = TextStyle(fontWeight: FontWeight.normal, fontSize: TextSize.mediumTitle); return _ListItem( child: Expanded( child: Align( diff --git a/lib/ui/menu_item_list_view.dart b/lib/ui/menu_item_list_view.dart index 86b5ed7..e91c576 100644 --- a/lib/ui/menu_item_list_view.dart +++ b/lib/ui/menu_item_list_view.dart @@ -2,6 +2,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:pola_flutter/theme/assets.gen.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; +import 'package:pola_flutter/theme/text_size.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; @@ -136,7 +137,7 @@ class _MenuBottomItem extends StatelessWidget { }); final textStyle = const TextStyle( - fontWeight: FontWeight.w500, fontSize: 16.0, fontFamily: FontFamily.lato); + fontWeight: FontWeight.w500, fontSize: TextSize.mediumTitle, fontFamily: FontFamily.lato); @override Widget build(BuildContext context) { diff --git a/lib/ui/social_media_list_view.dart b/lib/ui/social_media_list_view.dart index 1a997e6..fe3d752 100644 --- a/lib/ui/social_media_list_view.dart +++ b/lib/ui/social_media_list_view.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; +import 'package:pola_flutter/theme/text_size.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; @@ -21,7 +22,7 @@ class SocialMediaListView extends StatelessWidget { Text( t.menu.findUs, style: TextStyle( - fontSize: 12, + fontSize: TextSize.smallTitle, fontWeight: FontWeight.w700, fontFamily: FontFamily.lato ), diff --git a/lib/ui/web_view_dialog.dart b/lib/ui/web_view_dialog.dart index 50f0f38..14aa423 100644 --- a/lib/ui/web_view_dialog.dart +++ b/lib/ui/web_view_dialog.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/pages/web/web_view_page.dart'; +import 'package:pola_flutter/theme/text_size.dart'; class WebViewDialog extends StatelessWidget { final String url; @@ -36,7 +37,7 @@ class WebViewDialog extends StatelessWidget { child: Text( title, style: TextStyle( - fontSize: 20, + fontSize: TextSize.newsTitle, fontWeight: FontWeight.bold, color: Color(0xFF1C1B1F), ), From 9f9c1a32d9f2878d659b368a3a0892617e70dc03 Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:34:11 +0200 Subject: [PATCH 25/40] Text color (#113) * add text color * add color text * fixes review * Update lib/ui/menu_bottom_sheet.dart Co-authored-by: Marcin Stepnowski --------- Co-authored-by: Marcin Stepnowski --- lib/pages/detail/detail_content.dart | 21 ++++++++--------- lib/pages/detail/expandandable_text.dart | 9 ++++---- lib/pages/detail/friends_bar.dart | 5 +++-- lib/pages/detail/logotypes.dart | 3 ++- lib/pages/detail/polish_capital_graph.dart | 11 ++++----- lib/theme/colors.dart | 26 ++++++++++++++++++++++ lib/ui/menu_bottom_sheet.dart | 3 ++- lib/ui/social_media_list_view.dart | 5 +++-- lib/ui/web_view_dialog.dart | 3 ++- lib/ui/web_view_tab.dart | 3 ++- 10 files changed, 62 insertions(+), 27 deletions(-) create mode 100644 lib/theme/colors.dart diff --git a/lib/pages/detail/detail_content.dart b/lib/pages/detail/detail_content.dart index 92df742..7bb5469 100644 --- a/lib/pages/detail/detail_content.dart +++ b/lib/pages/detail/detail_content.dart @@ -3,6 +3,7 @@ import 'package:pola_flutter/models/company.dart'; import 'package:pola_flutter/models/search_result.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; import 'package:pola_flutter/theme/assets.gen.dart'; +import 'package:pola_flutter/theme/colors.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; import 'package:pola_flutter/theme/text_size.dart'; import 'logotypes.dart'; @@ -55,7 +56,7 @@ class DetailContent extends StatelessWidget { fontSize: TextSize.mediumTitle, fontWeight: FontWeight.w600, fontFamily: FontFamily.lato, - color: const Color(0xFF1C1B1F), + color: AppColors.textColor, ), ), const SizedBox(width: 8.0), @@ -65,7 +66,7 @@ class DetailContent extends StatelessWidget { fontSize: TextSize.newsTitle, fontWeight: FontWeight.w700, fontFamily: FontFamily.lato, - color: const Color(0xFF1C1B1F), + color: AppColors.textColor, ), ), ], @@ -77,9 +78,9 @@ class DetailContent extends StatelessWidget { borderRadius: BorderRadius.circular(10.0), child: LinearProgressIndicator( value: score / 100.0, - backgroundColor: const Color(0xFFF5DEDD), + backgroundColor: AppColors.buttonBackground, valueColor: - const AlwaysStoppedAnimation(Color(0xFFE1203E)), + const AlwaysStoppedAnimation(AppColors.defaultRed), minHeight: 12.0, ), ), @@ -87,7 +88,7 @@ class DetailContent extends StatelessWidget { const SizedBox(height: 17.0), Divider( thickness: 1.0, - color: const Color(0xFFF0F0F0), + color: AppColors.dividerColor, indent: 0, endIndent: 0, ), @@ -101,7 +102,7 @@ class DetailContent extends StatelessWidget { fontSize: TextSize.mediumTitle, fontWeight: FontWeight.w600, fontFamily: FontFamily.lato, - color: const Color(0xFF1C1B1F), + color: AppColors.textColor, ), ), ), @@ -135,7 +136,7 @@ class DetailContent extends StatelessWidget { const SizedBox(height: 22.0), Divider( thickness: 1.0, - color: const Color(0xFFF0F0F0), + color: AppColors.dividerColor, indent: 0, endIndent: 0, ), @@ -147,7 +148,7 @@ class DetailContent extends StatelessWidget { if (hasLogo) Divider( thickness: 1.0, - color: const Color(0xFFF0F0F0), + color: AppColors.dividerColor, indent: 0, endIndent: 0, ), @@ -160,7 +161,7 @@ class DetailContent extends StatelessWidget { if (hasLogo) Divider( thickness: 1.0, - color: const Color(0xFFF0F0F0), + color: AppColors.dividerColor, indent: 0, endIndent: 0, ), @@ -195,7 +196,7 @@ class _DetailItem extends StatelessWidget { fontSize: TextSize.description, fontWeight: FontWeight.w400, fontFamily: FontFamily.lato, - color: const Color(0xFF1C1B1F), + color: AppColors.textColor, ), softWrap: true, overflow: TextOverflow.visible, diff --git a/lib/pages/detail/expandandable_text.dart b/lib/pages/detail/expandandable_text.dart index 716272d..69be6ab 100644 --- a/lib/pages/detail/expandandable_text.dart +++ b/lib/pages/detail/expandandable_text.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/gestures.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; +import 'package:pola_flutter/theme/colors.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; class ExpandableText extends StatefulWidget { @@ -18,7 +19,7 @@ class _ExpandableTextState extends State { Widget build(BuildContext context) { final link = TextSpan( style: TextStyle( - color: Color(0xFF898989), + color: AppColors.inactiveColor, fontSize: 11.0, fontWeight: FontWeight.w700, fontFamily: FontFamily.lato, @@ -37,7 +38,7 @@ class _ExpandableTextState extends State { final textSpan = TextSpan( text: widget.text, style: TextStyle( - color: Color(0xFF1C1B1F), + color:AppColors.textColor, fontSize: 11.0, fontWeight: FontWeight.w400, fontFamily: FontFamily.lato, @@ -74,7 +75,7 @@ class _ExpandableTextState extends State { final end = textPainter.getOffsetBefore(pos.offset); final text = TextSpan( text: widget.text.substring(0, end), - style: TextStyle(color: Color(0xFF1C1B1F)), + style: TextStyle(color:AppColors.textColor), children: [link], ); @@ -85,7 +86,7 @@ class _ExpandableTextState extends State { return RichText( text: TextSpan( text: widget.text, - style: TextStyle(color: Color(0xFF1C1B1F)), + style: TextStyle(color:AppColors.textColor), children: [if (isExpanded) link], ), ); diff --git a/lib/pages/detail/friends_bar.dart b/lib/pages/detail/friends_bar.dart index df2b43a..cf8d6bf 100644 --- a/lib/pages/detail/friends_bar.dart +++ b/lib/pages/detail/friends_bar.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/theme/assets.gen.dart'; +import 'package:pola_flutter/theme/colors.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; import 'package:pola_flutter/theme/text_size.dart'; import 'package:pola_flutter/ui/web_view_dialog.dart'; @@ -24,7 +25,7 @@ class FriendsBar extends StatelessWidget { }, child: Container( height: 40.0, - color: const Color(0xFFF5DEDD), + color: AppColors.buttonBackground, alignment: Alignment.center, child: Row( children: [ @@ -40,7 +41,7 @@ class FriendsBar extends StatelessWidget { fontSize: TextSize.smallTitle, fontWeight: FontWeight.w700, fontFamily: FontFamily.lato, - color: Color(0xFFE1203E), + color:AppColors.defaultRed, ), textAlign: TextAlign.center, ), diff --git a/lib/pages/detail/logotypes.dart b/lib/pages/detail/logotypes.dart index d25521f..9010378 100644 --- a/lib/pages/detail/logotypes.dart +++ b/lib/pages/detail/logotypes.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; import 'package:pola_flutter/models/search_result.dart'; +import 'package:pola_flutter/theme/colors.dart'; import 'package:url_launcher/url_launcher.dart'; class Logotype { @@ -44,7 +45,7 @@ class Logotypes extends StatelessWidget { child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), - color: Color(0xFFF8F8F8), + color: AppColors.textFieldColor, boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.3), diff --git a/lib/pages/detail/polish_capital_graph.dart b/lib/pages/detail/polish_capital_graph.dart index 299615b..5547b38 100644 --- a/lib/pages/detail/polish_capital_graph.dart +++ b/lib/pages/detail/polish_capital_graph.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:pola_flutter/theme/colors.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; import 'package:syncfusion_flutter_gauges/gauges.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; @@ -28,7 +29,7 @@ class PolishCapitalGraph extends StatelessWidget { axisLineStyle: AxisLineStyle( thickness: thickness, cornerStyle: CornerStyle.bothCurve, - color: Color(0xFFF5DEDD), + color: AppColors.buttonBackground, thicknessUnit: GaugeSizeUnit.factor, ), pointers: [ @@ -37,7 +38,7 @@ class PolishCapitalGraph extends StatelessWidget { cornerStyle: CornerStyle.bothCurve, width: thickness, sizeUnit: GaugeSizeUnit.factor, - color: Color(0xFFE1203E), + color: AppColors.defaultRed, ), ], annotations: [ @@ -50,10 +51,10 @@ class PolishCapitalGraph extends StatelessWidget { fontSize: 26.0, fontWeight: FontWeight.w700, fontFamily: FontFamily.lato, - color: Color(0xFF1C1B1F), + color: AppColors.textColor), ), ), - ), + ], ), ], @@ -66,7 +67,7 @@ class PolishCapitalGraph extends StatelessWidget { style: TextStyle( fontSize: 11.0, fontWeight: FontWeight.w400, - color: Color(0xFF1C1B1F), + color: AppColors.textColor, fontFamily: FontFamily.lato, ), ), diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart new file mode 100644 index 0000000..cd53924 --- /dev/null +++ b/lib/theme/colors.dart @@ -0,0 +1,26 @@ +import 'package:flutter/widgets.dart'; + +class AppColors { + AppColors._(); + + /// Color: Default red + static const Color defaultRed = Color(0xFFE1203E); + + /// Color: Background for buttons and backgrounds + static const Color buttonBackground = Color(0xFFF5DEDD); + + /// Color: Text + static const Color textColor = Color(0xFF1C1B1F); + + /// Color: Inactive + static const Color inactiveColor = Color(0xFF898989); + + /// Color: Dividers + static const Color dividerColor = Color(0xFFF0F0F0); + + /// Color: Text fields + static const Color textFieldColor = Color(0xFFF8F8F8); + + /// Color: White (default) + static const Color whiteColor = Color(0xFFFFFFFF); +} diff --git a/lib/ui/menu_bottom_sheet.dart b/lib/ui/menu_bottom_sheet.dart index 40d9b71..3f7cb1d 100644 --- a/lib/ui/menu_bottom_sheet.dart +++ b/lib/ui/menu_bottom_sheet.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; +import 'package:pola_flutter/theme/colors.dart'; import 'package:pola_flutter/ui/social_media_list_view.dart'; import 'menu_item_list_view.dart'; @@ -37,7 +38,7 @@ class MenuBottomSheet extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 32.0), child: Container( height: 1, - color: const Color(0xFFF0F0F0), + color: AppColors.dividerColor, ), ), const SizedBox(height: 17), diff --git a/lib/ui/social_media_list_view.dart b/lib/ui/social_media_list_view.dart index fe3d752..0dbb005 100644 --- a/lib/ui/social_media_list_view.dart +++ b/lib/ui/social_media_list_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/analytics/analytics_about_row.dart'; import 'package:pola_flutter/analytics/pola_analytics.dart'; +import 'package:pola_flutter/theme/colors.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; import 'package:pola_flutter/theme/text_size.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -113,8 +114,8 @@ class SocialItemView extends StatelessWidget { padding: const EdgeInsets.symmetric(vertical: 10.0), child: ElevatedButton( style: ElevatedButton.styleFrom( - foregroundColor: const Color(0xFFE1203E), - backgroundColor: const Color(0xFFF5DEDD), + foregroundColor: AppColors.defaultRed, + backgroundColor: AppColors.buttonBackground, textStyle: const TextStyle(fontFamily: FontFamily.roboto), padding: const EdgeInsets.symmetric(horizontal: 24.0), ), diff --git a/lib/ui/web_view_dialog.dart b/lib/ui/web_view_dialog.dart index 14aa423..3d9287f 100644 --- a/lib/ui/web_view_dialog.dart +++ b/lib/ui/web_view_dialog.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/pages/web/web_view_page.dart'; +import 'package:pola_flutter/theme/colors.dart'; import 'package:pola_flutter/theme/text_size.dart'; class WebViewDialog extends StatelessWidget { @@ -39,7 +40,7 @@ class WebViewDialog extends StatelessWidget { style: TextStyle( fontSize: TextSize.newsTitle, fontWeight: FontWeight.bold, - color: Color(0xFF1C1B1F), + color: AppColors.textColor, ), ), ), diff --git a/lib/ui/web_view_tab.dart b/lib/ui/web_view_tab.dart index b1071d9..d7a530d 100644 --- a/lib/ui/web_view_tab.dart +++ b/lib/ui/web_view_tab.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pola_flutter/pages/web/web_view_page.dart'; +import 'package:pola_flutter/theme/colors.dart'; import 'package:pola_flutter/theme/fonts.gen.dart'; class WebViewTab extends StatelessWidget { @@ -18,7 +19,7 @@ class WebViewTab extends StatelessWidget { style: TextStyle( fontWeight: FontWeight.w700, fontFamily: FontFamily.lato, - color: Color(0xFF1C1B1F), + color: AppColors.textColor, ), ), ), From 180c486631c2b444182c4d701a78da7fec311873 Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Fri, 23 Aug 2024 14:44:48 +0200 Subject: [PATCH 26/40] Ekran Skanowania: Pasek Nawigacyjny (#116) * navigation bar implementation * fixes review * fixes reveiw * fixes review * fixes review * fixes review --- assets/menuPage/menu.svg | 8 ++++++++ lib/i18n/strings.g.dart | 16 ++++++++++++++-- lib/i18n/strings.i18n.json | 3 +++ lib/pages/scan/scan.dart | 27 +++++++++++++++------------ lib/theme/assets.gen.dart | 5 ++++- lib/theme/fonts.gen.dart | 3 +-- 6 files changed, 45 insertions(+), 17 deletions(-) create mode 100644 assets/menuPage/menu.svg diff --git a/assets/menuPage/menu.svg b/assets/menuPage/menu.svg new file mode 100644 index 0000000..e89a8f8 --- /dev/null +++ b/assets/menuPage/menu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 646cf14..5d5a61c 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 1 -/// Strings: 21 +/// Strings: 22 /// -/// Built on 2024-08-13 at 07:42 UTC +/// Built on 2024-08-21 at 08:34 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -149,6 +149,7 @@ class Translations implements BaseTranslations { // Translations late final _StringsMenuEn menu = _StringsMenuEn._(_root); late final _StringsCompanyScreenEn companyScreen = _StringsCompanyScreenEn._(_root); + late final _StringsScanEn scan = _StringsScanEn._(_root); } // Path: menu @@ -190,6 +191,16 @@ class _StringsCompanyScreenEn { String get polaFriends => 'Przyjaciele Poli'; } +// Path: scan +class _StringsScanEn { + _StringsScanEn._(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + String get scanning => 'Skanowanie'; +} + /// Flat map(s) containing all translations. /// Only for edge cases! For simple maps, use the map function of this library. @@ -217,6 +228,7 @@ extension on Translations { case 'companyScreen.points': return ({required Object score}) => '${score} pkt'; case 'companyScreen.companyFriend': return ' Ta firma jest przyjacielem Poli'; case 'companyScreen.polaFriends': return 'Przyjaciele Poli'; + case 'scan.scanning': return 'Skanowanie'; default: return null; } } diff --git a/lib/i18n/strings.i18n.json b/lib/i18n/strings.i18n.json index a1cec50..71b4726 100644 --- a/lib/i18n/strings.i18n.json +++ b/lib/i18n/strings.i18n.json @@ -23,5 +23,8 @@ "points":"$score pkt", "companyFriend": " Ta firma jest przyjacielem Poli", "polaFriends": "Przyjaciele Poli" + }, + "scan": { + "scanning": "Skanowanie" } } diff --git a/lib/pages/scan/scan.dart b/lib/pages/scan/scan.dart index 5d60086..5aa3051 100644 --- a/lib/pages/scan/scan.dart +++ b/lib/pages/scan/scan.dart @@ -8,6 +8,9 @@ import 'package:pola_flutter/pages/scan/scan_event.dart'; import 'package:pola_flutter/pages/scan/scan_state.dart'; import 'package:pola_flutter/i18n/strings.g.dart'; import 'package:pola_flutter/pages/scan/scan_vibration.dart'; +import 'package:pola_flutter/theme/assets.gen.dart'; +import 'package:pola_flutter/theme/colors.dart'; +import 'package:pola_flutter/theme/text_size.dart'; import 'package:pola_flutter/ui/menu_bottom_sheet.dart'; import 'package:pola_flutter/ui/web_view_dialog.dart'; import 'companies_list.dart'; @@ -25,6 +28,7 @@ class _MainPageState extends State { final PolaAnalytics _analytics = PolaAnalytics.instance(); ScrollController listScrollController = ScrollController(); + @override void initState() { super.initState(); @@ -37,15 +41,6 @@ class _MainPageState extends State { appBar: AppBar( backgroundColor: Colors.transparent, elevation: 0, - title: Center( - child: IconButton( - onPressed: () { - cameraController.toggleTorch(); - }, - icon: Image.asset("assets/ic_flash_on_white_48dp.png", - height: AppBar().preferredSize.height), - ), - ), leading: IconButton( onPressed: () { _analytics.aboutPolaOpened(); @@ -59,7 +54,7 @@ class _MainPageState extends State { }, ); }, - icon: Image.asset("assets/ic_launcher.png"), + icon: Assets.icLauncher.image(), ), actions: [ IconButton( @@ -73,9 +68,17 @@ class _MainPageState extends State { return MenuBottomSheet(analytics: _analytics); }); }, - icon: Image.asset("assets/menu.png"), - ) + icon: Assets.menuPage.menu.svg(), + ), ], + title: Text( + t.scan.scanning, + style: TextStyle( + fontSize: TextSize.newsTitle, + color: AppColors.whiteColor, + fontWeight: FontWeight.bold, + ), + ), ), body: Stack( children: [ diff --git a/lib/theme/assets.gen.dart b/lib/theme/assets.gen.dart index 3c91f5b..0e1595f 100644 --- a/lib/theme/assets.gen.dart +++ b/lib/theme/assets.gen.dart @@ -49,6 +49,9 @@ class $AssetsMenuPageGen { /// File path: assets/menuPage/info.svg SvgGenImage get info => const SvgGenImage('assets/menuPage/info.svg'); + /// File path: assets/menuPage/menu.svg + SvgGenImage get menu => const SvgGenImage('assets/menuPage/menu.svg'); + /// File path: assets/menuPage/star.svg SvgGenImage get star => const SvgGenImage('assets/menuPage/star.svg'); @@ -56,7 +59,7 @@ class $AssetsMenuPageGen { SvgGenImage get thumbs => const SvgGenImage('assets/menuPage/thumbs.svg'); /// List of all assets - List get values => [diversity, github, groups, handshake, info, star, thumbs]; + List get values => [diversity, github, groups, handshake, info, menu, star, thumbs]; } class Assets { diff --git a/lib/theme/fonts.gen.dart b/lib/theme/fonts.gen.dart index 71f2e54..305560d 100644 --- a/lib/theme/fonts.gen.dart +++ b/lib/theme/fonts.gen.dart @@ -1,7 +1,7 @@ /// GENERATED CODE - DO NOT MODIFY BY HAND /// ***************************************************** /// FlutterGen -/// ** *************************************************** +/// ***************************************************** // coverage:ignore-file // ignore_for_file: type=lint @@ -16,4 +16,3 @@ class FontFamily { /// Font family: Roboto static const String roboto = 'Roboto'; } - From 6f834157e14e3020e1671b80b3f8733320d962f4 Mon Sep 17 00:00:00 2001 From: D3bi7 <167427782+D3bi7@users.noreply.github.com> Date: Fri, 23 Aug 2024 14:47:30 +0200 Subject: [PATCH 27/40] Add Lato Semibold font (#98) Co-authored-by: Marcin Stepnowski --- assets/fonts/Lato/Lato-SemiBold.ttf | Bin 0 -> 668548 bytes pubspec.yaml | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 assets/fonts/Lato/Lato-SemiBold.ttf diff --git a/assets/fonts/Lato/Lato-SemiBold.ttf b/assets/fonts/Lato/Lato-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3b1bcccc3384aef84a68242e331e1018c8e141e0 GIT binary patch literal 668548 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