abhi_diablo

Listview code

Oct 9th, 2020 (edited)
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 23.20 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_svg/svg.dart';
  3. import 'dart:convert';
  4. import 'package:http/http.dart' as http;
  5. import 'ItemListViewScreen.dart';
  6. import 'SideDrawerScreen.dart';
  7. import 'Utils/Constants.dart';
  8. import 'Utils/SharedPrefrence.dart';
  9. import 'Utils/Urls.dart';
  10.  
  11.  
  12. ///CategoryItem model class
  13. CategoryItemModel categoryItemModelFromJson(String str) =>
  14.     CategoryItemModel.fromJson(json.decode(str));
  15.  
  16. String categoryItemModelToJson(CategoryItemModel data) =>
  17.     json.encode(data.toJson());
  18.  
  19. class CategoryItemModel {
  20.   CategoryItemModel({
  21.     this.success,
  22.     this.message,
  23.     this.data,
  24.   });
  25.  
  26.   bool success;
  27.   String message;
  28.   Data data;
  29.  
  30.   factory CategoryItemModel.fromJson(Map<String, dynamic> json) =>
  31.       CategoryItemModel(
  32.         success: json["success"],
  33.         message: json["message"],
  34.         data: Data.fromJson(json["data"]),
  35.       );
  36.  
  37.   Map<String, dynamic> toJson() => {
  38.     "success": success,
  39.     "message": message,
  40.     "data": data.toJson(),
  41.   };
  42. }
  43.  
  44. class Data {
  45.   Data({
  46.     this.customTags,
  47.     this.userTags,
  48.   });
  49.  
  50.   List<CustomTag> customTags;
  51.   List<UserTag> userTags;
  52.  
  53.   factory Data.fromJson(Map<String, dynamic> json) => Data(
  54.     customTags: List<CustomTag>.from(
  55.         json["custom_tags"].map((x) => CustomTag.fromJson(x))),
  56.     userTags: List<UserTag>.from(
  57.         json["user_tags"].map((x) => UserTag.fromJson(x))),
  58.   );
  59.  
  60.   Map<String, dynamic> toJson() => {
  61.     "custom_tags": List<dynamic>.from(customTags.map((x) => x.toJson())),
  62.     "user_tags": List<dynamic>.from(userTags.map((x) => x.toJson())),
  63.   };
  64. }
  65.  
  66. class CustomTag {
  67.   CustomTag({
  68.     this.id,
  69.     this.userId,
  70.     this.name,
  71.     this.deletedAt,
  72.     this.createdAt,
  73.     this.updatedAt,
  74.   });
  75.  
  76.   int id;
  77.   int userId;
  78.   String name;
  79.   dynamic deletedAt;
  80.   DateTime createdAt;
  81.   DateTime updatedAt;
  82.  
  83.   factory CustomTag.fromJson(Map<String, dynamic> json) => CustomTag(
  84.     id: json["id"],
  85.     userId: json["user_id"],
  86.     name: json["name"],
  87.     deletedAt: json["deleted_at"],
  88.     createdAt: DateTime.parse(json["created_at"]),
  89.     updatedAt: DateTime.parse(json["updated_at"]),
  90.   );
  91.  
  92.   Map<String, dynamic> toJson() => {
  93.     "id": id,
  94.     "user_id": userId,
  95.     "name": name,
  96.     "deleted_at": deletedAt,
  97.     "created_at": createdAt.toIso8601String(),
  98.     "updated_at": updatedAt.toIso8601String(),
  99.   };
  100. }
  101.  
  102. class UserTag {
  103.   UserTag({
  104.     this.id,
  105.     this.name,
  106.     this.slug,
  107.     this.icon,
  108.     this.thumbs,
  109.     this.createdAt,
  110.     this.updatedAt,
  111.     this.tags,
  112.     this.translated,
  113.   });
  114.  
  115.   int id;
  116.   String name;
  117.   String slug;
  118.   String icon;
  119.   ThumbsClass thumbs;
  120.   DateTime createdAt;
  121.   DateTime updatedAt;
  122.   List<Tag> tags;
  123.   dynamic translated;
  124.  
  125.   factory UserTag.fromJson(Map<String, dynamic> json) => UserTag(
  126.     id: json["id"],
  127.     name: json["name"],
  128.     slug: json["slug"],
  129.     icon: json["icon"],
  130.     thumbs: ThumbsClass.fromJson(json["thumbs"]),
  131.     createdAt: DateTime.parse(json["created_at"]),
  132.     updatedAt: DateTime.parse(json["updated_at"]),
  133.     tags: List<Tag>.from(json["tags"].map((x) => Tag.fromJson(x))),
  134.     translated: json["translated"],
  135.   );
  136.  
  137.   Map<String, dynamic> toJson() => {
  138.     "id": id,
  139.     "name": name,
  140.     "slug": slug,
  141.     "icon": icon,
  142.     "thumbs": thumbs.toJson(),
  143.     "created_at": createdAt.toIso8601String(),
  144.     "updated_at": updatedAt.toIso8601String(),
  145.     "tags": List<dynamic>.from(tags.map((x) => x.toJson())),
  146.     "translated": translated,
  147.   };
  148. }
  149.  
  150. class Tag {
  151.   Tag({
  152.     this.id,
  153.     this.slug,
  154.     this.name,
  155.     this.icon,
  156.     this.thumbs,
  157.     this.tagCategoryId,
  158.     this.createdAt,
  159.     this.updatedAt,
  160.     this.flyerItemsCount,
  161.     this.translated,
  162.   });
  163.  
  164.   int id;
  165.   String slug;
  166.   String name;
  167.   String icon;
  168.   dynamic thumbs;
  169.   int tagCategoryId;
  170.   DateTime createdAt;
  171.   DateTime updatedAt;
  172.   int flyerItemsCount;
  173.   dynamic translated;
  174.  
  175.   factory Tag.fromJson(Map<String, dynamic> json) => Tag(
  176.     id: json["id"],
  177.     slug: json["slug"],
  178.     name: json["name"],
  179.     icon: json["icon"],
  180.     thumbs: json["thumbs"],
  181.     tagCategoryId: json["tag_category_id"],
  182.     createdAt: DateTime.parse(json["created_at"]),
  183.     updatedAt: DateTime.parse(json["updated_at"]),
  184.     flyerItemsCount: json["flyer_items_count"],
  185.     translated: json["translated"],
  186.   );
  187.  
  188.   Map<String, dynamic> toJson() => {
  189.     "id": id,
  190.     "slug": slug,
  191.     "name": name,
  192.     "icon": icon,
  193.     "thumbs": thumbs,
  194.     "tag_category_id": tagCategoryId,
  195.     "created_at": createdAt.toIso8601String(),
  196.     "updated_at": updatedAt.toIso8601String(),
  197.     "flyer_items_count": flyerItemsCount,
  198.     "translated": translated,
  199.   };
  200. }
  201.  
  202. class ThumbsClass {
  203.   ThumbsClass({
  204.     this.lg,
  205.     this.md,
  206.     this.sm,
  207.     this.xs,
  208.   });
  209.  
  210.   String lg;
  211.   String md;
  212.   String sm;
  213.   String xs;
  214.  
  215.   factory ThumbsClass.fromJson(Map<String, dynamic> json) => ThumbsClass(
  216.     lg: json["lg"],
  217.     md: json["md"],
  218.     sm: json["sm"],
  219.     xs: json["xs"],
  220.   );
  221.  
  222.   Map<String, dynamic> toJson() => {
  223.     "lg": lg,
  224.     "md": md,
  225.     "sm": sm,
  226.     "xs": xs,
  227.   };
  228. }
  229. ///End of CategoryItem model class
  230.  
  231. ///Listview Design
  232. class DashboardItemListScreen extends StatefulWidget {
  233.   @override
  234.   _DashboardItemListScreenState createState() =>
  235.       _DashboardItemListScreenState();
  236. }
  237.  
  238. class _DashboardItemListScreenState extends State<DashboardItemListScreen> {
  239.   bool _isChecked = false;
  240.   List<bool> inputs = new List<bool>();
  241.   String userToken;
  242.   final _scaffoldKey = GlobalKey<ScaffoldState>();
  243.  
  244.   // List<CategoryItemModel> categoryItemModel = [];
  245.   CategoryItemModel categoryItemModel;
  246.  
  247.   @override
  248.   void initState() {
  249.     // TODO: implement initState
  250.     super.initState();
  251.     Future token = SharedPrefrence().getToken();
  252.     token.then((data) async {
  253.       userToken = data;
  254.       getCategoryLists();
  255.     });
  256.  
  257.     // getCategoryLists();
  258.  
  259.     setState(() {
  260.       for (int i = 0; i < 4; i++) {
  261.         inputs.add(false);
  262.       }
  263.     });
  264.   }
  265.  
  266.   void ItemChange(bool val, int index) {
  267.     setState(() {
  268.       inputs[index] = val;
  269.     });
  270.   }
  271.  
  272.   @override
  273.   Widget build(BuildContext context) {
  274.     return Scaffold(
  275.       key: _scaffoldKey,
  276.       resizeToAvoidBottomInset: false,
  277.       drawer: SideDraweScreen(),
  278.       appBar: AppBar(
  279.         iconTheme: new IconThemeData(color: Color.fromRGBO(34, 83, 148, 1)),
  280.         title: appbarLogo(),
  281.         backgroundColor: Colors.white,
  282.         actions: [
  283.           Padding(
  284.             padding: const EdgeInsets.all(8.0),
  285.             child: Icon(
  286.               Icons.shopping_cart,
  287.               color: Colors.blue[800],
  288.             ),
  289.           )
  290.         ],
  291.       ),
  292.       body: SingleChildScrollView(
  293.         child: Column(
  294.           crossAxisAlignment: CrossAxisAlignment.start,
  295.           children: [
  296.             Expanded(
  297.               flex: 0,
  298.               child: Container(
  299.                 height: 30,
  300.                 child: Row(
  301.                   mainAxisAlignment: MainAxisAlignment.spaceBetween,
  302.                   children: [
  303.                     Padding(
  304.                       padding: const EdgeInsets.all(8.0),
  305.                       child: Text(
  306.                         "Select All",
  307.                         softWrap: true,
  308.                         style: TextStyle(color: Colors.blue[500], fontSize: 15),
  309.                       ),
  310.                     ),
  311.                     Padding(
  312.                       padding: const EdgeInsets.all(8.0),
  313.                       child: Icon(
  314.                         Icons.delete,
  315.                         color: Colors.blue[500],
  316.                         size: 20,
  317.                       ),
  318.                     ),
  319.                   ],
  320.                 ),
  321.               ),
  322.             ),
  323.             Expanded(
  324.               flex: 0,
  325.               child: Padding(
  326.                 padding: const EdgeInsets.all(8.0),
  327.                 child: Text(
  328.                   "Shopping List",
  329.                   softWrap: true,
  330.                   style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
  331.                 ),
  332.               ),
  333.             ),
  334.             Expanded(flex: 0, child: Categories()),
  335.           ],
  336.         ),
  337.       ),
  338.       floatingActionButton: new FloatingActionButton(
  339.         onPressed: () {
  340.           PopupCategory(context);
  341.         },
  342.         child: const Icon(
  343.           Icons.add,
  344.         ),
  345.       ),
  346.     );
  347.   }
  348.  
  349.   Widget appbarLogo() {
  350.     return SvgPicture.asset("assets/images/flyerbin_logo.svg",height: 40,);
  351.   }
  352.  
  353.   Widget Categories() {
  354.     Size size = MediaQuery.of(context).size;
  355.     return categoryItemModel == null
  356.         ? Center(child: CircularProgressIndicator())
  357.         : Container(
  358.             child: Column(
  359.               children: [
  360.                 Expanded(
  361.                   flex: 0,
  362.                   child: Padding(
  363.                     padding: const EdgeInsets.all(2),
  364.                     child: Card(
  365.                       child: Row(
  366.                         mainAxisAlignment: MainAxisAlignment.spaceBetween,
  367.                         children: [
  368.                           Expanded(
  369.                             flex: 0,
  370.                             child: Container(
  371.                               width: 220,
  372.                               child: CheckboxListTile(
  373.                                 controlAffinity: ListTileControlAffinity.leading,
  374.                                 title: _isChecked !=false ? Text('Tee', style: TextStyle(decoration: TextDecoration.lineThrough)):Text("Tee"),
  375.                                 value: _isChecked,
  376.                                 onChanged: (bool value) {
  377.                                   setState(() {
  378.                                     _isChecked = value;
  379.                                   });
  380.                                 },
  381.                               ),
  382.                             ),
  383.                           ),
  384.                           Expanded(
  385.                               flex: 0,
  386.                               child: Padding(
  387.                                 padding: const EdgeInsets.all(8.0),
  388.                                 child: Icon(
  389.                                   Icons.cancel,
  390.                                   size: 20,
  391.                                   color: Colors.blueGrey,
  392.                                 ),
  393.                               ))
  394.                         ],
  395.                       ),
  396.                     ),
  397.                   ),
  398.                 ),
  399.                 ListView.builder(
  400.                   shrinkWrap: true,
  401.                   physics: NeverScrollableScrollPhysics(),
  402.                   itemBuilder: (context, index) {
  403.                     return Padding(
  404.                       padding: EdgeInsets.all(2),
  405.                       child: Column(
  406.                         crossAxisAlignment: CrossAxisAlignment.start,
  407.                         children: <Widget>[
  408.                           Padding(
  409.                             padding: const EdgeInsets.all(8.0),
  410.                             child: Text(
  411.                               '${categoryItemModel.data.userTags[index].name}',
  412.                               style: TextStyle(
  413.                                   fontSize: 15, fontWeight: FontWeight.bold),
  414.                             ),
  415.                           ),
  416.                           ListView.builder(
  417.                             shrinkWrap: true,
  418.                             physics: ClampingScrollPhysics(),
  419.                             itemBuilder: (context, index1) {
  420.                               return Card(
  421.                                 child: Row(
  422.                                   mainAxisAlignment: MainAxisAlignment.spaceBetween,
  423.                                   children: [
  424.                                     Expanded(
  425.                                       flex: 0,
  426.                                       child: Container(
  427.                                         width: 220,
  428.                                         child: CheckboxListTile(
  429.                                           controlAffinity:
  430.                                               ListTileControlAffinity.leading,
  431.                                           title: _isChecked !=false ? Text('${categoryItemModel.data.userTags[index].tags[index1].name}', style: TextStyle(decoration: TextDecoration.lineThrough)):Text(
  432.                                             '${categoryItemModel.data.userTags[index].tags[index1].name}',
  433.                                             style: TextStyle(fontSize: 13),
  434.                                           ),
  435.                                           value: inputs[index1],
  436.                                           onChanged: (bool value) {
  437.                                             ItemChange(value, index1);
  438.                                             setState(() {
  439.                                               _isChecked = value;
  440.                                             });
  441.                                           },
  442.                                         ),
  443.                                       ),
  444.                                     ),
  445.                                     Expanded(
  446.                                       flex: 0,
  447.                                       child: Row(
  448.                                         crossAxisAlignment:
  449.                                             CrossAxisAlignment.center,
  450.                                         mainAxisAlignment:
  451.                                             MainAxisAlignment.spaceEvenly,
  452.                                         children: [
  453.                                           Expanded(
  454.                                               flex: 0,
  455.                                               child: GestureDetector(
  456.                                                 onTap: (){
  457.                                                   Navigator.push(
  458.                                                     context,
  459.                                                     MaterialPageRoute(
  460.                                                       builder: (context) => ItemListViewScreen(),
  461.                                                     ),
  462.                                                   );
  463.                                                 },
  464.                                                 child: Padding(
  465.                                                   padding: const EdgeInsets.all(8.0),
  466.                                                   child: Text(
  467.                                                     '${categoryItemModel.data.userTags[index].tags[index1].flyerItemsCount}'   + " Deals",
  468.                                                     softWrap: true,
  469.                                                     style:
  470.                                                         TextStyle(color: Colors.blue),
  471.                                                   ),
  472.                                                 ),
  473.                                               )),
  474.                                           Expanded(
  475.                                               flex: 0,
  476.                                               child: Padding(
  477.                                                 padding: const EdgeInsets.all(8.0),
  478.                                                 child: Icon(
  479.                                                   Icons.arrow_forward_ios,
  480.                                                   size: 20,
  481.                                                   color: Colors.blueGrey,
  482.                                                 ),
  483.                                               )),
  484.                                         ],
  485.                                       ),
  486.                                     )
  487.                                   ],
  488.                                 ),
  489.                               );
  490.                             },
  491.                             itemCount: categoryItemModel.data.userTags[index].tags.length, // this is a hardcoded value
  492.                           ),
  493.                         ],
  494.                       ),
  495.                     );
  496.                   },
  497.                   itemCount: categoryItemModel.data.userTags.length, // this is a hardcoded value
  498.                 ),
  499.               ],
  500.             ),
  501.           );
  502.   }
  503.  
  504.   Future<void> PopupCategory(BuildContext context) async {
  505.     await showDialog(
  506.         context: context,
  507.         builder: (BuildContext context) {
  508.           return Dialog(
  509.             shape: RoundedRectangleBorder(
  510.                 borderRadius: BorderRadius.circular(8.0)), //this right here
  511.             child: Container(
  512.               height: 365,
  513.               child: Padding(
  514.                 padding: const EdgeInsets.all(12.0),
  515.                 child: Column(
  516.                   mainAxisSize: MainAxisSize.max,
  517.                   children: [
  518.                     Row(
  519.                       mainAxisAlignment: MainAxisAlignment.spaceBetween,
  520.                       crossAxisAlignment: CrossAxisAlignment.start,
  521.                       children: [
  522.                         Row(
  523.                           mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  524.                           children: [
  525.                             Icon(
  526.                               Icons.cancel,
  527.                               color: Colors.blueGrey,
  528.                               size: 20,
  529.                             ),
  530.                             Text(
  531.                               "Recommended",
  532.                               style: TextStyle(fontSize: 15),
  533.                             )
  534.                           ],
  535.                         ),
  536.                         Row(
  537.                           mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  538.                           children: [
  539.                             Icon(
  540.                               Icons.check_circle,
  541.                               color: Colors.blue,
  542.                               size: 20,
  543.                             ),
  544.                             Text(
  545.                               "Done",
  546.                               style: TextStyle(fontSize: 14),
  547.                             )
  548.                           ],
  549.                         ),
  550.                       ],
  551.                     ),
  552.                     Divider(
  553.                       thickness: 0.8,
  554.                     ),
  555.                     Container(
  556.                       child: GridView.count(
  557.                         crossAxisCount: 4,
  558.                         childAspectRatio: MediaQuery.of(context).size.width /
  559.                             (MediaQuery.of(context).size.height / 1.2),
  560.                         crossAxisSpacing: 5.0,
  561.                         mainAxisSpacing: 5.0,
  562.                         shrinkWrap: true,
  563.                         physics: ScrollPhysics(),
  564.                         children: List.generate(10, (index) {
  565.                           return SingleChildScrollView(
  566.                             child: Column(
  567.                               children: [
  568.                                 Expanded(
  569.                                   flex: 0,
  570.                                   child: GestureDetector(
  571.                                     onTap: () {},
  572.                                     child: Container(
  573.                                       height: 90,
  574.                                       child: Column(
  575.                                         mainAxisAlignment:
  576.                                             MainAxisAlignment.spaceEvenly,
  577.                                         crossAxisAlignment:
  578.                                             CrossAxisAlignment.start,
  579.                                         children: <Widget>[
  580.                                           Expanded(
  581.                                             flex: 0,
  582.                                             child: CircleAvatar(
  583.                                               radius: 23,
  584.                                               backgroundImage: NetworkImage(
  585.                                                   'https://images.unsplash.com/photo-1523205771623-e0faa4d2813d?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=89719a0d55dd05e2deae4120227e6efc&auto=format&fit=crop&w=1953&q=80'),
  586.                                             ),
  587.                                           ),
  588.                                           Expanded(
  589.                                             flex: 0,
  590.                                             child: Padding(
  591.                                               padding:
  592.                                                   const EdgeInsets.all(4.0),
  593.                                               child: Text(
  594.                                                 "product $index",
  595.                                                 style: TextStyle(
  596.                                                     fontWeight: FontWeight.w400,
  597.                                                     fontSize: 12),
  598.                                               ),
  599.                                             ),
  600.                                           ),
  601.                                         ],
  602.                                       ),
  603.                                     ),
  604.                                   ),
  605.                                 ),
  606.                               ],
  607.                             ),
  608.                           );
  609.                         }),
  610.                       ),
  611.                     ),
  612.                     Expanded(
  613.                       flex: 0,
  614.                       child: Padding(
  615.                         padding: const EdgeInsets.all(2),
  616.                         child: Container(
  617.                           height: 35,
  618.                           width: 300,
  619.                           child: TextField(
  620.                             decoration: InputDecoration(
  621.                                 border: OutlineInputBorder(),
  622.                                 fillColor: Colors.blueGrey[200],
  623.                                 labelStyle: TextStyle(fontSize: 12),
  624.                                 contentPadding: EdgeInsets.all(5),
  625.                                 hintText: 'Search Here',
  626.                                 prefixIcon: Icon(
  627.                                   Icons.search,
  628.                                   color: Colors.blueGrey,
  629.                                 )),
  630.                           ),
  631.                         ),
  632.                       ),
  633.                     ),
  634.                   ],
  635.                 ),
  636.               ),
  637.             ),
  638.           );
  639.         });
  640.   }
  641.  
  642.   Future<void> getCategoryLists() async {
  643.     var response = await http.get(
  644.         "${Urls.baseUrl}${Urls.userList}?latitude=${Constants.latitude}&longitude=${Constants.longitude}&radius=100&locale=en",
  645.         headers: {
  646.           "Content-Type": "application/json",
  647.           "Authorization": "Bearer ${userToken}",
  648.           "Accept": "application/json"
  649.         });
  650.     print(response.statusCode);
  651.     print("response shopprefernce " + response.body.toString());
  652.     if (response.statusCode == 200) {
  653.       categoryItemModel = categoryItemModelFromJson(response.body);
  654.     } else {
  655.       final snackBar = SnackBar(content: Text("Cannot connect server,make sure you have internet Connection,Please Try again"));
  656.       _scaffoldKey.currentState.showSnackBar(snackBar);
  657.     }
  658.   }
  659. }
  660.  
  661.  
  662.  
Add Comment
Please, Sign In to add comment