Untitled
unknown
dart
2 years ago
12 kB
7
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...