Untitled

 avatar
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...