flutter, how to compare the argument passed (id) equal an element.id ? using getx package

Viewed 33

I have Categories, and each category contains multiple and different subcategories. I passed the Id of Categories to the other screen.

First Screen:

onTap: (() => Get.to(const CategoryDetails(), arguments: {
"id":" ${categoriesController.cat!.elementAt(i).sId.toString()} ", })),

ArgumentController

import 'package:get/get.dart';

class ArgumentController extends GetxController {
  String? id;

  @override
  void onInit() {
    id = Get.arguments['id'];
    super.onInit();
  }
}

View File

class _CategoryDetailsState extends State<CategoryDetails> {
  int selectedCategoryIndex = 0;
  CategoriesController categoriesController = Get.put(CategoriesController());

  @override
  void initState() {
    super.initState();
    categoriesController.getCategoriesFromApi();
  }

  @override
  Widget build(BuildContext context) {
    ArgumentController controller = Get.put(ArgumentController());
    debugPrint(controller.id);
    return Scaffold(
      appBar: AppBar(
        title: const Text("Category Details"),
      ),
      body: Column(
        children: [
          Text("${controller.id}"),
          const Text("data"),
          ListView.builder(itemBuilder: (context, index) {
            return Column(
              children: [
                Text(categoriesController.cat!
                    .elementAt(index)
                    .subcategories!
                    .elementAt(selectedCategoryIndex)
                    .name
                    .toString()),
              ],
            );
          })
        ],
      ),
    );
  }
}

Controller file:

import 'dart:convert';
import 'dart:io';
import 'package:get/get.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http;
import '../model/categoriesmodel.dart' as categories_model;

class CategoriesController extends GetxController {
  Iterable<categories_model.Response>? cat;
  var isDataLoading = false.obs;

  getCategoriesFromApi() async {
    try {
      isDataLoading(true);
      http.Response response = await http.post(
          Uri.tryParse('-----')!,
          headers: {
            HttpHeaders.authorizationHeader: '-------',
          });

      if (response.statusCode == 200) {
        var result = jsonDecode(response.body);
        cat = categories_model.Categories.fromJson(result).response;
      } else {}
    } catch (e) {
      debugPrint("Error while getting Data $e");
    } finally {
      isDataLoading(false);
    }
  }
}

Categoriesmodel file

class Categories {
  String? status;
  List<Response>? response;

  Categories({this.status, this.response});

  Categories.fromJson(Map<String, dynamic> json) {
    status = json['status'];
    if (json['response'] != null) {
      response = <Response>[];
      json['response'].forEach((v) {
        response!.add(Response.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['status'] = status;
    if (response != null) {
      data['response'] = response!.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Response {
  String? sId;
  String? name;
  bool? isForAccessories;
  String? slug;
  List<void>? liveTranslations;
  String? icon;
  String? logo;
  int? itemsCount;
  String? lang;
  List<Subcategories>? subcategories;

  Response(
      {this.sId,
      this.name,
      this.isForAccessories,
      this.slug,
      this.liveTranslations,
      this.icon,
      this.logo,
      this.itemsCount,
      this.lang,
      this.subcategories});

  Response.fromJson(Map<String, dynamic> json) {
    sId = json['_id'];
    name = json['name'];
    isForAccessories = json['isForAccessories'];
    slug = json['slug'];
    // if (json['liveTranslations'] != null) {
    //   liveTranslations = <Null>[];
    //   json['liveTranslations'].forEach((v) {
    //     liveTranslations!.add(Null.fromJson(v));
    //   });
    // }
    icon = json['icon'];
    logo = json['logo'];
    itemsCount = json['itemsCount'];
    lang = json['lang'];
    if (json['subcategories'] != null) {
      subcategories = <Subcategories>[];
      json['subcategories'].forEach((v) {
        subcategories!.add(Subcategories.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['_id'] = sId;
    data['name'] = name;
    data['isForAccessories'] = isForAccessories;
    data['slug'] = slug;
    // if (liveTranslations != null) {
    //   data['liveTranslations'] =
    //       liveTranslations!.map((v) => v.toJson()).toList();
    // }
    data['icon'] = icon;
    data['logo'] = logo;
    data['itemsCount'] = itemsCount;
    data['lang'] = lang;
    if (subcategories != null) {
      data['subcategories'] =
          subcategories!.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Subcategories {
  String? sId;
  String? name;
  bool? isForAccessories;
  String? slug;
  List<void>? liveTranslations;
  int? itemsCount;
  String? lang;

  Subcategories(
      {this.sId,
      this.name,
      this.isForAccessories,
      this.slug,
      this.liveTranslations,
      this.itemsCount,
      this.lang});

  Subcategories.fromJson(Map<String, dynamic> json) {
    sId = json['_id'];
    name = json['name'];
    isForAccessories = json['isForAccessories'];
    slug = json['slug'];
    // if (json['liveTranslations'] != null) {
    //   liveTranslations = <Null>[];
    //   json['liveTranslations'].forEach((v) {
    //     liveTranslations!.add(Null.fromJson(v));
    //   });
    // }
    itemsCount = json['itemsCount'];
    lang = json['lang'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['_id'] = sId;
    data['name'] = name;
    data['isForAccessories'] = isForAccessories;
    data['slug'] = slug;
    // if (liveTranslations != null) {
    //   data['liveTranslations'] =
    //       liveTranslations!.map((v) => v.toJson()).toList();
    // }
    data['itemsCount'] = itemsCount;
    data['lang'] = lang;
    return data;
  }
}

The problem is in selectedCategoryIndex, how to express that selectedCategoryIndex == categoriesController.Where((element) => element.sid == the argument passed);

note that it's not acceptable categoriesController.Where..

1 Answers

I just assumed your question to be what I think and posting this solution.

selectedCategoryIndex ==
      categoriesController.cat.singleWhere((element) => element.id == id).sId;
Related