Skip to content

Commit

Permalink
merge: pull request #103 from Solvro/feat/ui-improvements
Browse files Browse the repository at this point in the history
Add youtube and github icon [MOBILE 53]
  • Loading branch information
simon-the-shark authored Jun 21, 2024
2 parents 567c103 + 073ba92 commit a901eba
Show file tree
Hide file tree
Showing 13 changed files with 54 additions and 65 deletions.
Binary file modified assets/icons/ic_github.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/icons/ic_youtube.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 6 additions & 5 deletions lib/config/url_icons.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
abstract class UrlIconsConfig {
static const icons = {
"facebook": "assets/icons/ic_fb.png",
abstract class IconsConfig {
static const iconsPaths = {
"facebook": "assets/icons/ic_fb.png",
"instagram": "assets/icons/ic_insta.png",
"linkedin": "assets/icons/ic_linkedin.png",
"github": "assets/icons/ic_github.png",
"mailto:": "assets/icons/ic_email.png",
"youtu": "assets/icons/ic_youtube.png",
"github": "assets/icons/ic_github.png",
};
}
}
10 changes: 5 additions & 5 deletions lib/features/guide/widgets/about_us/models/about_us_details.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import '../../../../../api_base/directus_assets_url.dart';
import '../../../../../utils/url_icons.dart';

import '../../../../../utils/determine_icon.dart';
import '../../../../../utils/where_non_null_iterable.dart';
import '../repository/about_us_repository.dart';
import 'member_data.dart';
Expand All @@ -15,17 +16,16 @@ class AboutUsDetails {
return MemberData(
name: e.name,
imageUrl: e.photo?.filename_disk?.directusUrl,
socialLinks:
e.socialLinks.whereNonNull.map((e) => e.url).toList(),
socialLinks: e.socialLinks.whereNonNull.map((e) => e.url).toList(),
subtitle: e.subtitle,
);
}).toList();
}

List<UrlIconsUtilModel> getSocialIcons() {
List<UrlIconsModel> getSocialIcons() {
return aboutUs?.solvroSocialLinks.whereNonNull
.map(
(e) => UrlIconsUtilModel(url: e.url),
(e) => UrlIconsModel(url: e.url),
)
.toList() ??
[];
Expand Down
34 changes: 18 additions & 16 deletions lib/features/guide/widgets/about_us/models/member_data.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import 'package:flutter/foundation.dart';

import '../../../../../utils/url_icons.dart';
import '../../../../../utils/determine_icon.dart';

@immutable
class MemberData {
final List<String> socialLinks;
final String? name;
final String? subtitle;
final List<UrlIconsUtilModel> links;
final List<UrlIconsModel> links;
final String? imageUrl;

MemberData({
Expand All @@ -17,25 +17,27 @@ class MemberData {
required this.imageUrl,
}) : links = _determineLinksIcons(socialLinks);

static List<UrlIconsUtilModel> _determineLinksIcons(List<String> urls) {
return urls.map((url) => UrlIconsUtilModel(url: url)).toList();
}

static List<UrlIconsModel> _determineLinksIcons(List<String> urls) {
return urls.map((url) => UrlIconsModel(url: url)).toList();
}

@override
bool operator == (Object other) {
bool operator ==(Object other) {
if (identical(this, other)) return true;

return other is MemberData &&
listEquals(other.socialLinks, socialLinks) &&
other.name == name &&
other.subtitle == subtitle &&
listEquals(other.links, links) &&
other.imageUrl == imageUrl;
listEquals(other.socialLinks, socialLinks) &&
other.name == name &&
other.subtitle == subtitle &&
listEquals(other.links, links) &&
other.imageUrl == imageUrl;
}


@override
int get hashCode => socialLinks.hashCode ^ name.hashCode ^ subtitle.hashCode ^ links.hashCode ^ imageUrl.hashCode;

int get hashCode =>
socialLinks.hashCode ^
name.hashCode ^
subtitle.hashCode ^
links.hashCode ^
imageUrl.hashCode;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import 'package:flutter/material.dart';

import '../../../../../config/ui_config.dart';
import '../../../../../theme/app_theme.dart';
import '../../../../../utils/determine_icon.dart';
import '../../../../../utils/launch_url_util.dart';
import '../../../../../utils/url_icons.dart';

class LinksSection extends StatelessWidget {
const LinksSection({super.key, required this.links});

final List<UrlIconsUtilModel> links;
final List<UrlIconsModel> links;

@override
Widget build(BuildContext context) {
Expand Down
5 changes: 3 additions & 2 deletions lib/features/guide/widgets/about_us/widgets/team_section.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ import 'package:flutter/material.dart';
import '../../../../../api_base/directus_assets_url.dart';
import '../../../../../config/ui_config.dart';
import '../../../../../theme/app_theme.dart';
import '../../../../../utils/determine_icon.dart';
import '../../../../../utils/launch_url_util.dart';
import '../../../../../utils/url_icons.dart';

import '../../../../../widgets/my_cached_image.dart';
import '../models/member_data.dart';

Expand Down Expand Up @@ -87,7 +88,7 @@ class _Description extends StatelessWidget {
{required this.name, required this.subtitle, required this.links});
final String name;
final String subtitle;
final List<UrlIconsUtilModel> links;
final List<UrlIconsModel> links;

@override
Widget build(BuildContext context) {
Expand Down
24 changes: 2 additions & 22 deletions lib/features/study_circle_details/models/contact_section_data.dart
Original file line number Diff line number Diff line change
@@ -1,32 +1,12 @@
import 'package:collection/collection.dart';

import '../../../config/ui_config.dart';
import '../../../utils/determine_icon.dart';

class ContactSectionData {
String iconUrl;
String? text;
String? url;

static const _icons = {
"facebook": "assets/icons/ic_fb.png",
"instagram": "assets/icons/ic_insta.png",
"linkedin": "assets/icons/ic_linkedin.png",
"mailto:": "assets/icons/ic_email.png",
};

ContactSectionData({
required this.text,
required this.url,
}) : iconUrl = _determineIcon(url);

static String _determineIcon(String? url) {
return url != null
? _icons.entries
.firstWhereOrNull(
(e) => url.contains(e.key),
)
?.value ??
DetailsScreenConfig.defaultIconUrl
: DetailsScreenConfig.defaultIconUrl;
}
}) : iconUrl = url.determineIcon();
}
5 changes: 3 additions & 2 deletions lib/features/study_circle_details/study_circle_details.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import '../../api_base/directus_assets_url.dart';
import '../../config/ui_config.dart';
import '../../theme/app_theme.dart';
import '../../utils/context_extensions.dart';
import '../../utils/url_icons.dart';
import '../../utils/determine_icon.dart';

import '../../utils/where_non_null_iterable.dart';
import '../../widgets/loading_widgets/shimmer_loading.dart';
import '../../widgets/my_error_widget.dart';
Expand Down Expand Up @@ -64,7 +65,7 @@ class _CircleDetailsDataView extends ConsumerWidget {
const SizedBox(height: DetailsScreenConfig.spacerHeight),
ContactSection(
list: value?.links.whereNonNull
.map((a) => UrlIconsUtilModel(
.map((a) => UrlIconsModel(
text: a.name,
url: a.link,
))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ import 'package:flutter/gestures.dart';

import '../../../theme/app_theme.dart';
import '../../../utils/context_extensions.dart';
import '../../../utils/determine_icon.dart';
import '../../../utils/launch_url_util.dart';
import '../../../utils/url_icons.dart';
import '../../../widgets/my_icon.dart';

class ContactSection extends StatelessWidget {
const ContactSection({super.key, required this.list});

final List<UrlIconsUtilModel> list;
final List<UrlIconsModel> list;

@override
Widget build(BuildContext context) {
Expand Down
20 changes: 11 additions & 9 deletions lib/utils/url_icons.dart → lib/utils/determine_icon.dart
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';

import '../config/ui_config.dart';
import '../config/url_icons.dart';

@immutable
class UrlIconsUtilModel {
class UrlIconsModel {
final String iconUrl;
final String? text;
final String? url;

UrlIconsUtilModel({
UrlIconsModel({
String? text,
this.url,
}) : iconUrl = _determineIcon(url),
}) : iconUrl = url.determineIcon(),
text = text ?? url;
}

static String _determineIcon(String? url) {
return url != null
? UrlIconsConfig.icons.entries
extension IconDeterminer on String? {
String determineIcon() {
return this != null
? IconsConfig.iconsPaths.entries
.firstWhereOrNull(
(e) => url.contains(e.key),
(e) => this!.contains(e.key),
)
?.value ??
DetailsScreenConfig.defaultIconUrl
: DetailsScreenConfig.defaultIconUrl;
}
}
}
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ flutter:
- assets/icons/ic_insta.png
- assets/icons/ic_linkedin.png
- assets/icons/ic_web.png
- assets/icons/ic_youtube.png
- assets/icons/ic_github.png

# An image asset can refer to one or more resolution-specific "variants", see
Expand Down
1 change: 1 addition & 0 deletions topwr.iml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/.idea" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/.pub" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Dart SDK" level="project" />
Expand Down

0 comments on commit a901eba

Please # to comment.