BookInfoTab
unknown
dart
3 years ago
27 kB
6
Indexable
import 'package:base_architecture/core/extensions/widget_extensions.dart';
import 'package:base_architecture/data_layer/models/api_models/Dto/categories_selections.dart';
import 'package:base_architecture/data_layer/models/api_models/book_details_model.dart';
import 'package:base_architecture/data_layer/models/api_models/categories_model.dart';
import 'package:base_architecture/presentation/notifiers/bottom_nav_bar_notifier.dart/bottom_nav_bar_notifier.dart';
import 'package:base_architecture/presentation/notifiers/categories_notifier/categories_notifier.dart';
import 'package:base_architecture/presentation/notifiers/theme_notifier.dart';
import 'package:base_architecture/presentation/pages/more_category_page/more_category_page.dart';
import 'package:base_architecture/presentation/pages/following_page/pages_widgets/integrated_following_details_page.dart';
import 'package:base_architecture/presentation/pages/more_category_page/tags_more_category_page.dart';
import 'package:base_architecture/presentation/pages/notifications/widgets/more_text_widget.dart';
import 'package:base_architecture/presentation/props/book_info_props.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class BookInfoTab extends StatelessWidget {
const BookInfoTab({
Key? key,
required this.selectedIndex,
required this.props,
}) : super(key: key);
final int selectedIndex;
final BookInfoProps props;
@override
Widget build(BuildContext context) {
Size mediaQuery = MediaQuery.of(context).size;
final ThemeNotifier themeNotifier = Provider.of<ThemeNotifier>(
context,
listen: true,
);
final BottomNavBarNotifier bottomNavNotifier =
Provider.of<BottomNavBarNotifier>(
context,
listen: false,
);
final CategoriesNotifier categoriesNotifier =
Provider.of<CategoriesNotifier>(
context,
listen: false,
);
final Data book = props.bookInfo.data!.first;
bool language = context.locale == const Locale('en');
int readerId = book.readers!.first.id!;
int translatorId = book.translators!.first.id!;
int publisherId = book.publishers!.first.id!;
int categoryId = book.category!.id!;
int subCategoryId = book.subcategory!.id!;
int subSubCategoryId = book.subSubcategory!.id!;
String categoryName = language
? book.category!.nameEn! +
' ' +
book.subcategory!.nameEn! +
' ' +
book.subSubcategory!.nameEn!
: book.category!.nameAr! +
', ' +
book.subcategory!.nameAr! +
', ' +
book.subSubcategory!.nameAr!;
String? bookTag =
language ? book.tags!.first.nameEn! : book.tags!.first.nameAr!;
String readerName = language
? book.readers!.first.fullNameDecode!.first.firstNameEn! +
' ' +
book.readers!.first.fullNameDecode!.last.lastNameEn!
: book.readers!.first.fullNameDecode!.first.firstNameAr! +
' ' +
book.readers!.first.fullNameDecode!.last.lastNameAr!;
String publisherName = language
? book.publishers!.first.fullNameDecode!.first.firstNameEn! +
' ' +
book.publishers!.first.fullNameDecode!.last.lastNameEn!
: book.publishers!.first.fullNameDecode!.first.firstNameAr! +
' ' +
book.publishers!.first.fullNameDecode!.last.lastNameAr!;
String translatorName = language
? book.translators!.first.fullNameDecode!.first.firstNameEn! +
' ' +
book.translators!.first.fullNameDecode!.last.lastNameEn!
: book.translators!.first.fullNameDecode!.first.firstNameAr! +
' ' +
book.translators!.first.fullNameDecode!.last.lastNameAr!;
return Visibility(
child: Container(
width: mediaQuery.width,
padding: const EdgeInsets.only(top: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Visibility(
visible: !book.readers!.isEmpty,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
child: Text(
'reader'.tr() + ' ',
style: themeNotifier
.getTheme()
.textTheme
.headline2!
.copyWith(
fontSize: 16,
color: Colors.grey,
),
),
),
Expanded(
child: ListView.builder(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: book.readers!.length,
itemBuilder: (BuildContext context, int indexPath) =>
InkWell(
child: Text(
language
? book.readers![indexPath].fullNameDecode!.first
.firstNameEn! +
' ' +
book.readers![indexPath].fullNameDecode!.last
.lastNameEn! +
','
: book.readers![indexPath].fullNameDecode!.first
.firstNameAr! +
' ' +
book.readers![indexPath].fullNameDecode!.last
.lastNameAr! +
',',
style: themeNotifier
.getTheme()
.textTheme
.bodyText1!
.copyWith(
fontSize: 16,
color: themeNotifier.getTheme().canvasColor,
decoration: TextDecoration.underline,
decorationThickness: 1,
decorationColor:
themeNotifier.getTheme().canvasColor,
),
),
onTap: () async {
CategoriesSelections lastSelections =
CategoriesSelections(
type: categoriesNotifier.selections.type!,
id: categoriesNotifier.selections.id,
keyword: categoriesNotifier.selections.keyword,
);
await categoriesNotifier.setLastSelections(
lastSelections,
);
print(categoriesNotifier.lastSelectionType);
categoriesNotifier.selections.id =
book.readers![indexPath].id!;
categoriesNotifier.selections.type = 'readers';
categoriesNotifier.resetPageIndex();
categoriesNotifier.categories.clear();
await categoriesNotifier.getAllCategories(
categoriesNotifier.selections,
);
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) =>
IntegratedFollowingDetailsPage(
contributor: categoriesNotifier.contributor ??
ContributorCategories(),
contributorBooks:
categoriesNotifier.subcategoriesBooks,
backToContributor: false,
),
),
);
},
),
),
)
],
),
),
Visibility(
visible: !book.readers!.isEmpty,
child: const Divider(
color: Colors.grey,
).padding(padding: const EdgeInsets.symmetric(vertical: 3)),
),
Visibility(
visible: book.isbn != null,
child: Row(
children: <Widget>[
Text(
'International ISBN'.tr() + ' ',
style:
themeNotifier.getTheme().textTheme.headline2!.copyWith(
fontSize: 16,
color: Colors.grey,
),
),
Text(
book.isbn!,
overflow: TextOverflow.ellipsis,
style:
themeNotifier.getTheme().textTheme.headline2!.copyWith(
fontSize: 16,
color: Colors.grey,
),
),
],
),
),
Visibility(
visible: book.isbn != null,
child: const Divider(
color: Colors.grey,
).padding(padding: const EdgeInsets.symmetric(vertical: 3)),
),
Visibility(
visible: !book.translators!.isEmpty,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
child: Text(
'translator'.tr() + ' ',
style: themeNotifier
.getTheme()
.textTheme
.headline2!
.copyWith(
fontSize: 16,
color: Colors.grey,
),
),
),
Expanded(
child: ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: book.translators!.length,
itemBuilder: (BuildContext context, int indexPath) =>
InkWell(
child: Text(
language
? book.translators![indexPath].fullNameDecode!
.first.firstNameEn! +
' ' +
book.translators![indexPath].fullNameDecode!
.last.lastNameEn! +
','
: book.translators![indexPath].fullNameDecode!
.first.firstNameAr! +
' ' +
book.translators![indexPath].fullNameDecode!
.last.lastNameAr! +
',',
style: themeNotifier
.getTheme()
.textTheme
.bodyText1!
.copyWith(
fontSize: 16,
color: themeNotifier.getTheme().canvasColor,
decoration: TextDecoration.underline,
decorationThickness: 1,
decorationColor:
themeNotifier.getTheme().canvasColor,
),
),
onTap: () async {
CategoriesSelections lastSelections =
CategoriesSelections(
type: categoriesNotifier.selections.type!,
id: categoriesNotifier.selections.id,
keyword: categoriesNotifier.selections.keyword,
);
await categoriesNotifier.setLastSelections(
lastSelections,
);
categoriesNotifier.selections.id =
book.translators![indexPath].id!;
categoriesNotifier.selections.type = 'translators';
categoriesNotifier.resetPageIndex();
await categoriesNotifier.getAllCategories(
categoriesNotifier.selections,
);
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) =>
IntegratedFollowingDetailsPage(
contributor: categoriesNotifier.contributor ??
ContributorCategories(),
contributorBooks:
categoriesNotifier.subcategoriesBooks,
backToContributor: false,
),
),
);
},
),
),
)
],
),
),
Visibility(
visible: !book.translators!.isEmpty,
child: const Divider(
color: Colors.grey,
).padding(padding: const EdgeInsets.symmetric(vertical: 3)),
),
Visibility(
visible: !book.publishers!.isEmpty,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
child: Text(
'publishing house'.tr() + ' ',
style: themeNotifier
.getTheme()
.textTheme
.headline2!
.copyWith(
fontSize: 16,
color: Colors.grey,
),
),
),
Expanded(
child: ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: book.publishers!.length,
itemBuilder: (BuildContext context, int indexPath) =>
InkWell(
child: Text(
language
? book.publishers![indexPath].fullNameDecode!
.first.firstNameEn! +
' ' +
book.publishers![indexPath].fullNameDecode!
.last.lastNameEn! +
','
: book.publishers![indexPath].fullNameDecode!
.first.firstNameAr! +
' ' +
book.publishers![indexPath].fullNameDecode!
.last.lastNameAr! +
',',
style: themeNotifier
.getTheme()
.textTheme
.bodyText1!
.copyWith(
fontSize: 16,
color: themeNotifier.getTheme().canvasColor,
decoration: TextDecoration.underline,
decorationThickness: 1,
decorationColor:
themeNotifier.getTheme().canvasColor,
),
),
onTap: () async {
CategoriesSelections lastSelections =
CategoriesSelections(
type: categoriesNotifier.selections.type!,
id: categoriesNotifier.selections.id,
keyword: categoriesNotifier.selections.keyword,
);
await categoriesNotifier.setLastSelections(
lastSelections,
);
categoriesNotifier.selections.id =
book.publishers![indexPath].id;
categoriesNotifier.selections.type = 'publishers';
categoriesNotifier.resetPageIndex();
await categoriesNotifier.getAllCategories(
categoriesNotifier.selections,
);
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) =>
IntegratedFollowingDetailsPage(
contributor: categoriesNotifier.contributor ??
ContributorCategories(),
contributorBooks:
categoriesNotifier.subcategoriesBooks,
backToContributor: false,
),
),
);
},
),
),
)
],
),
),
Visibility(
visible: !book.publishers!.isEmpty,
child: const Divider(
color: Colors.grey,
).padding(padding: const EdgeInsets.symmetric(vertical: 3)),
),
RichText(
text: TextSpan(
text: 'Year of Publication'.tr() + ' ',
style: themeNotifier.getTheme().textTheme.headline2!.copyWith(
fontSize: 16,
color: Colors.grey,
),
children: <TextSpan>[
TextSpan(
text: book.publicationYear,
style:
themeNotifier.getTheme().textTheme.bodyText1!.copyWith(
fontSize: 16,
color: themeNotifier.getTheme().hoverColor,
),
),
],
),
overflow: TextOverflow.ellipsis,
),
const Divider(
color: Colors.grey,
).padding(padding: const EdgeInsets.symmetric(vertical: 3)),
InkWell(
onTap: () async {
print(subSubCategoryId);
categoriesNotifier.selections.type = 'category';
categoriesNotifier.selections.id = categoryId;
categoriesNotifier.selections.sub_id = subCategoryId;
categoriesNotifier.selections.sub_sub_id = subSubCategoryId;
categoriesNotifier.categories.clear();
categoriesNotifier.resetPageIndex();
categoriesNotifier
.getAllCategories(
categoriesNotifier.selections,
)
.then((value) => categoriesNotifier.setMoreCategoryIndex(
categoriesNotifier.subCategoriesTab.indexWhere(
(MainCategoriesTabs element) =>
element.id == book.subSubcategory!.id,
),
));
// "id":1,"sub_id":2,"sub_sub_id":15
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) => MoreCategoryPage(
categoryName: language
? book.subSubcategory!.nameEn!
: book.subSubcategory!.nameAr!,
moreBooks: categoriesNotifier.subcategoriesBooks,
),
),
);
// id":19,"sub_id":21,"sub_sub_id":28
// "id":19,"sub_id":null,"sub_sub_id":null
},
child: RichText(
text: TextSpan(
text: 'book category'.tr() + ' ',
style: themeNotifier.getTheme().textTheme.headline2!.copyWith(
fontSize: 16,
color: Colors.grey,
),
children: <TextSpan>[
TextSpan(
text: categoryName,
style: themeNotifier
.getTheme()
.textTheme
.bodyText1!
.copyWith(
fontSize: 16,
color: themeNotifier.getTheme().canvasColor,
decoration: TextDecoration.underline,
decorationThickness: 1,
decorationColor:
themeNotifier.getTheme().canvasColor,
),
),
],
),
overflow: TextOverflow.ellipsis,
),
),
const Divider(
color: Colors.grey,
).padding(padding: const EdgeInsets.symmetric(vertical: 3)),
Visibility(
visible: !book.tags!.isEmpty,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
child: Text(
'Tags'.tr() + ' ',
style: themeNotifier
.getTheme()
.textTheme
.headline2!
.copyWith(
fontSize: 16,
color: Colors.grey,
),
),
),
Expanded(
child: ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: book.tags!.length,
itemBuilder: (BuildContext context, int indexPath) =>
InkWell(
child: Text(
language
? book.tags![indexPath].nameEn!
: book.tags![indexPath].nameAr!,
style: themeNotifier
.getTheme()
.textTheme
.bodyText1!
.copyWith(
fontSize: 16,
color: themeNotifier.getTheme().canvasColor,
decoration: TextDecoration.underline,
decorationThickness: 1,
decorationColor:
themeNotifier.getTheme().canvasColor,
),
),
onTap: () async {
categoriesNotifier.selections.id =
book.tags![indexPath].id;
categoriesNotifier.selections.type = 'tag';
categoriesNotifier.resetPageIndex();
categoriesNotifier.categories.clear();
categoriesNotifier
.getAllCategories(categoriesNotifier.selections);
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) =>
TagsMoreCategoryPage(
categoryName: language
? book.tags![indexPath].nameEn!
: book.tags![indexPath].nameAr!,
moreBooks:
categoriesNotifier.subcategoriesBooks,
),
),
);
},
),
),
)
],
),
),
Visibility(
visible: !book.tags!.isEmpty,
child: const Divider(
color: Colors.grey,
).padding(padding: const EdgeInsets.symmetric(vertical: 3)),
),
ListTile(
contentPadding: const EdgeInsets.only(bottom: 10),
title: Padding(
padding: const EdgeInsets.only(bottom: 10.0),
child: Text(
'About the book'.tr(),
style: themeNotifier.getTheme().textTheme.headline2!.copyWith(
height: 1.5,
color: Colors.grey,
fontSize: 16,
),
),
),
subtitle: MoreTextWidget(
firstPart: 300,
text: book.description!,
textStyle:
themeNotifier.getTheme().textTheme.headline2!.copyWith(
height: 1.3,
color: themeNotifier.getTheme().hoverColor,
fontSize: 16,
),
),
)
],
),
),
maintainState: true,
visible: selectedIndex == 0,
);
}
}
Editor is loading...