0

我是 Flutter 的新手,我目前有一个应用程序,它有一个从 api 获取其列表的网格视图。一些网格视图项目中有子节点,所以我想要实现的是设置一个点击函数来检查是否有子节点,如果这是真的;我想重新填充相同的网格视图,但只有子节点的成员。这可能在颤动中吗?

import 'package:bringam/network/Models/ProductGroupModel.dart';
import 'package:bringam/network/sharedpreferences/SharedPreferences.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';

class Product_Category extends StatefulWidget {
 @override
 _Product_CategoryState createState() => _Product_CategoryState();
}

class _Product_CategoryState extends State<Product_Category> {
Future<List<ProductGroupModel>> _getChildrenCategories(String tag) async {
List<ProductGroupModel> categories = [];
SharedPref sharedPref = SharedPref();
var cacheCategories =
    json.decode(await sharedPref.read('PRODUCT_CATEGORY'));
// FILTERING THE LIST STARTS
var filteredJson =
    cacheCategories.where((i) => i["ParentGroupId"] == tag).toList();
// FILTERING THE LIST ENDS

for (var u in filteredJson) {
  ProductGroupModel productCat = ProductGroupModel(
      u["Description"],
      u["IconURL"],
      u["ProductGroup"],
      u["ParentGroupId"],
      u["HasChildNode"],
      u["Order"]);
  categories.add(productCat);
}
print(categories);
return categories;
}

Future<List<ProductGroupModel>> _getCategories() async {
List<ProductGroupModel> categories = [];
SharedPref sharedPref = SharedPref();
var cacheCategories =
    json.decode(await sharedPref.read('PRODUCT_CATEGORY'));
if (cacheCategories.isEmpty) {
  var data = await http.get(
      
'PRIVATE API ENDPOINT PLEASE');
  var jsonData = json.decode(data.body);

  // FILTERING THE LIST STARTS
  var filteredJson =
      jsonData.where((i) => i["ParentGroupId"] == '0').toList();
  // FILTERING THE LIST ENDS

  for (var u in filteredJson) {
    ProductGroupModel productCat = ProductGroupModel(
        u["Description"],
        u["IconURL"],
        u["ProductGroup"],
        u["ParentGroupId"],
        u["HasChildNode"],
        u["Order"]);
    categories.add(productCat);
  }
 } else {
  // FILTERING THE LIST STARTS
  var filteredJson =
      cacheCategories.where((i) => i["ParentGroupId"] == '0').toList();
  // FILTERING THE LIST ENDS

  for (var u in filteredJson) {
    ProductGroupModel productCat = ProductGroupModel(
        u["Description"],
        u["IconURL"],
        u["ProductGroup"],
        u["ParentGroupId"],
        u["HasChildNode"],
        u["Order"]);
    categories.add(productCat);
  }
  return categories;
  }
 }

 @override
 Widget build(BuildContext context) {
 return FutureBuilder(
  future: _getCategories(),
  builder: (BuildContext context,
      AsyncSnapshot<List<ProductGroupModel>> snapshot) {
    if (snapshot.data == null) {
      return Center(
        child: CircularProgressIndicator(),
      );
    } else {
      return GridView.builder(
          itemCount: snapshot.data.length,
          gridDelegate:
              SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 
 2),
          itemBuilder: (BuildContext context, int index) {
            return Card(
              elevation: 0,
              color: Colors.transparent,
              child: Hero(
                tag: snapshot.data[index].ProductGroup,
                child: Material(
                  color: Colors.transparent,
                  child: InkWell(
                    onTap: () {
                      bool hasChild = snapshot.data[index].HasChildNode;
                      if (hasChild == true) {
                        setState(() {
                          _getChildrenCategories(
                              snapshot.data[index].ProductGroup);
                        });
                      } else {
                        Scaffold.of(context).showSnackBar(SnackBar(
                            content: new Text("Nothing found!"),
                            duration: const Duration(milliseconds: 500)));
                      }
                    },
                    child: GridTile(
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          CircleAvatar(
                            backgroundImage:
                                
NetworkImage(snapshot.data[index].IconURL),
                            radius: 75.0,
                          ),
                          Text(
                            snapshot.data[index].Description,
                            style: TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: 20.0,
                              color: Colors.white,
                            ),
                          ),
                        ],
                      ),
                    ),
                  ),
                ),
              ),
            );
          });
     }
   },
  );
 }
}


//THE MODEL CLASS
class ProductGroupModel {
final String Description;
final String IconURL;
final String ProductGroup;
final String ParentGroupId;
final bool HasChildNode;
final int Order;

ProductGroupModel(
 this.Description,
 this.IconURL,
 this.ProductGroup,
 this.ParentGroupId,
 this.HasChildNode,
 this.Order,
 );
}
4

0 回答 0