Untitled
unknown
dart
3 years ago
12 kB
10
Indexable
import 'dart:async';
import 'dart:convert';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:justbooks/app.dart';
import 'package:justbooks/configs/constants.dart';
import 'package:justbooks/miscs/app_colors.dart';
import 'package:justbooks/miscs/app_strings.dart';
import 'package:justbooks/providers/api_provider.dart';
import 'package:justbooks/providers/datastore_provider.dart';
import 'package:justbooks/widgets/bottom_nav_bar.dart';
import 'package:justbooks/widgets/card_content.dart';
import 'package:justbooks/widgets/card_header.dart';
import 'package:justbooks/widgets/wishlist_button.dart';
import 'package:provider/provider.dart';
import 'package:justbooks/pages/categories_page.dart';
import 'package:justbooks/pages/book_page.dart';
import 'package:justbooks/miscs/multi_select_widget.dart';
class CategoryPage extends StatefulWidget {
String categoryId;
final List<String> index;
List <String> indexTitle;
CategoryPage({required this.categoryId, required this.index, required this.indexTitle, Key? key}) : super(key: key);
@override
State<CategoryPage> createState() => _CategoryPageState();
}
class _CategoryPageState extends State<CategoryPage> {
late var booksProvider;
String? ImageUrl;
String? Author;
String? Title;
var bookData;
var imageUrl;
@override
void initState() {
//widget.indexTitle = widget.indexTitle;
super.initState();
//widget.indexTitle = widget.indexTitle;
}
Future categoryFetch() async {
var categoryDetails =
await Provider.of<JustbooksAPIProvider>(context, listen: false)
.getCategoryDetails(widget.categoryId.toString());
print("CATEGORY_PAGE:qwerty " + categoryDetails.toString());
Map categoryDetailsDecoded = json.decode(categoryDetails.toString());
print("PASS 1: " + categoryDetailsDecoded.runtimeType.toString());
bookData = categoryDetailsDecoded["successObject"];
print('BOOKS_DATA: ' + bookData[0]["image_url"].toString());
print("CATEGORY_PAGEqwe: " + bookData.toString());
imageUrl = bookData[0]["image_url"].toString();
print("IMAGE URL: " + bookData[1]["image_url"].toString());
print ("FINAL INDEX:" + widget.index.toString());
return bookData;
}
Map<String,int> genres =
{'Auto-Biography': 15,
'Arts And Crafts': 16,
'Bengali': 32,
'Books About India': 25,
'Business And Management': 8,
'Business And Marketing': 9,
'Classics': 2,
'Comics': 39,
'Cookery': 14,
'General': 1,
'Geo-Politics': 22,
'Gujarati': 85,
'Health And Fitness': 13,
'Hindi': 27,
'History': 17,
'Humour': 6,
'Indian Writing': 26,
'Kannada': 39,
'Kids': 36,
'Knowledge': 38,
'Malayalam': 31,
'Marathi': 33,
'Medical': 23,
'Music & Movies': 106,
'Mystery And Thrillers': 5,
'Parenting And Child Care': 11,
'Popular Science': 64,
'Pre-Teens': 35,
'Psychology': 21,
'R&D': 21,
'Reference': 128,
'Romance': 3,
'Science': 4,
'Self Help': 20,
'Spirituality': 12,
'Sports': 18,
'Tamil': 28,
'Technical': 146,
'Teens': 34,
'Telugu': 30,
'Toddlers': 37,
'Trade, Investment, Finance': 19,
'Travel': 10,
'Urdu': 44
};
List temp = [];
//List <String> widget.indexTitle = [];
//late List<String> widget.indexTitle = widget.categoryId.split(',');
void _showMultiSelect() async {
final List<String>? results = await showDialog(
context: context,
builder: (BuildContext context) {
return MultiSelect(items: genres.keys.toList());
},
);
// Update UI
if (results != null) {
setState(() {
widget.indexTitle = results;
temp = [];
print("SELECTED ITEMS: " + widget.indexTitle.toString());
for (var i = 0; i < widget.indexTitle.length; i++) {
temp.add(genres[widget.indexTitle[i]]);
}
print ("TEMP: " + temp.join(','));
widget.categoryId = temp.join(',').toString();
});
}
}
@override
Widget build(BuildContext context) {
print ("Index Titles: " + widget.indexTitle.join(','));
//widget.indexTitle = widget.indexTitle;
return Scaffold(
// appBar: AppBar(
// title: Text("Test Screen"),
// actions: <Widget>[
// ElevatedButton(
// onPressed: _showMultiSelect,
// child: const Text('Select Genres'),
// style: ElevatedButton.styleFrom(
// backgroundColor: Colors.white,
// foregroundColor: AppColors.customRed,
// ),
// ),
// ],
// ),
appBar: AppBar(
title: Text(
'Results',
style: TextStyle(
color: AppColors.customRed, fontWeight: FontWeight.bold),
),
elevation: 0.0,
backgroundColor: Color(0xFFF6F7F8),
leading: IconButton(
icon: Icon(
CupertinoIcons.back,
color: Colors.black,
),
onPressed: () {
print("On pressed go back...");
Navigator.of(context).pop();
},
)
),
body: Column (
children: <Widget> [
Row(
children:[
SizedBox(
width: 20,
),
TextButton(
onPressed: _showMultiSelect,
child: const Text('Select Genres', style: TextStyle(fontSize: 18)),
style: ElevatedButton.styleFrom(
// alignment: Alignment.topRight,
// backgroundColor: Colors.white,
foregroundColor: Colors.black,
),
),
Icon(
CupertinoIcons.chevron_down,
color: AppColors.customRed,
)
]
),
Wrap(
children: widget.indexTitle
.map((e) => Directionality(textDirection: TextDirection.rtl, child: Chip(
avatar: InkWell(
//backgroundColor: Colors.white,
// child: Icon(Icons.close,
// color: AppColors.customRed),
),
backgroundColor: Colors.white,
label: Text(e),
deleteIcon: Icon(Icons.close,
color: AppColors.customRed),
onDeleted: () {
setState(() {
widget.indexTitle.remove(e);
temp = [];
print("SELECTED ITEMS: " + widget.indexTitle.toString());
for (var i = 0; i < widget.indexTitle.length; i++) {
temp.add(genres[widget.indexTitle[i]]);
}
print ("TEMP: " + temp.join(','));
widget.categoryId = temp.join(',').toString();
});
},
)))
.toList(),
),
SizedBox(
height: 20,
),
Expanded(child:
FutureBuilder(
future: categoryFetch(),
builder: (context, snapshot) {
return GridView.builder(
padding: const EdgeInsets.all(10.0),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10.0,
mainAxisSpacing: 50.0),
itemBuilder: (context, index) {
if (snapshot.hasData) {
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return Container();
case ConnectionState.done:
return Column(children: [
GestureDetector(
onTap: () {
print("Clicked on a book in category_page");
Navigator.of(context).push(MaterialPageRoute(
builder: (builder) => BookPage(
titleId: bookData[index]["jb_info"]
["titleid"])));
}, // Image tapped
child:
Container (
height: 150,
width: 100,
decoration: const BoxDecoration(
boxShadow: [
BoxShadow(
blurRadius: 8.0,
),
],
),
child:
ClipRRect(
borderRadius: BorderRadius.circular(10.0),
child:
Image.network(
bookData[index]["image_url"].toString(),
fit:BoxFit.fill,
errorBuilder: (context, error, stackTrace) {
return
ClipRRect(
borderRadius: BorderRadius.circular(10.0),
child:
Image.asset(
"assets/Images/jb_icon.png", fit: BoxFit.fill,));
},
// fit: BoxFit.cover, // Fixes border issues
// width: 110.0,
// height: 110.0,
),
))
),
SizedBox(
height: 20,
),
Expanded(
flex: 10,
child: Text(
bookData[index]["jb_info"]["title"],
style: TextStyle (
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.black,
),
),
),
SizedBox(
height: 5,
),
Expanded(
flex: 15,
child: Text(
bookData[index]["jb_info"]["author"]["name"],
style: AppStrings.TEXT_STYLE_BOOK_AUTHOR
),
),
]);
}
} else if (snapshot.hasError) {
return Text(
"No Titles available" + snapshot.data.toString());
}
return Text("Loading...");
},
);
})
)
],
)
// ])
);
}
}
Editor is loading...