import 'package:oc_front/main.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:oc_front/widgets/catalog.dart'; import 'package:localstorage/localstorage.dart'; import 'package:oc_front/pages/abstract_page.dart'; import 'package:oc_front/models/resources/resources.dart'; import 'package:oc_front/core/sections/header/header.dart'; import 'package:oc_front/core/services/specialized_services/resource_service.dart'; class CatalogFactory implements AbstractFactory { @override GlobalKey getKey() { return key; } static GlobalKey key = GlobalKey(); @override void back(BuildContext context) { var s = (localStorage.getItem("search") ?? ""); if (s != "") { localStorage.setItem("search", s.split(",").sublist(1).join(",")); SearchConstants.set(s.split(",").sublist(1).join(",")); if ((localStorage.getItem("search") ?? "") == "") { SearchConstants.remove(); key.currentState?.widget.isSearch = true; key.currentState?.widget.items = []; HeaderConstants.headerKey.currentState?.setState(() {}); HeaderConstants.headerWidget?.setState(() {}); CatalogFactory.key.currentState?.setState(() {}); } else { CatalogFactory().search(context, false); } } else { SearchConstants.remove(); key.currentState?.widget.isSearch = true; key.currentState?.widget.items = []; HeaderConstants.headerKey.currentState?.setState(() {}); HeaderConstants.headerWidget?.setState(() {}); CatalogFactory.key.currentState?.setState(() {}); } } @override bool searchFill() { return (key.currentState?.widget.items.isEmpty ?? true) && (key.currentState?.widget.isSearch ?? true); } @override Widget factory(GoRouterState state, List args) { return CatalogPageWidget(); } @override String? getSearch() { if ((localStorage.getItem("search") ?? "") == "") { return null; } return localStorage.getItem("search")!.split(",")[0]; } @override void search(BuildContext context, bool special) { if (special) { return; } // T key.currentState?.widget.isSearch = true; var s = (localStorage.getItem("search") ?? ""); if (s != "") { if (SearchConstants.get() == null) { localStorage.setItem("search", s); } else if (s.split(",")[0] != SearchConstants.get()) { localStorage.setItem("search", "${SearchConstants.get()!},$s"); } } else if ((SearchConstants.get() ?? "") == "") { return; } else { localStorage.setItem("search", SearchConstants.get()!); } CatalogFactory.key.currentState?.widget.search.search(context, [ localStorage.getItem("search")!.split(",")[0] ], {}).then((value) { if (value.data == null) { key.currentState?.widget.items = []; } else { key.currentState?.widget.isSearch = false; key.currentState?.widget.items = [ ...value.data!.workflows, ...value.data!.processings, ...value.data!.datas, ...value.data!.storages, ...value.data!.computes,]; } HeaderConstants.headerKey.currentState?.setState(() {}); HeaderConstants.headerWidget?.setState(() {}); CatalogFactory.key.currentState?.setState(() {}); // ignore: invalid_use_of_protected_member }); } } // ignore: must_be_immutable class CatalogPageWidget extends StatefulWidget { double? itemWidth; bool isSearch = true; List items = []; final ResourceService search = ResourceService(); CatalogPageWidget ({ this.itemWidth, }): super(key: CatalogFactory.key); @override CatalogPageWidgetState createState() => CatalogPageWidgetState(); } class CatalogPageWidgetState extends State { @override Widget build(BuildContext context) { if (widget.items.isEmpty) { if (widget.isSearch) { return Container(); } return Container( width: getMainWidth(context), height: getMainHeight(context) - 50, color: Colors.grey.shade300, child: const Center(child: Text("NO RESOURCES FOUND", style: TextStyle(fontSize: 30, color: Colors.grey)) ), ); } return Column( children : [ SizedBox( width: getMainWidth(context), height: getMainHeight(context) - 50, child: SingleChildScrollView( child: CatalogWidget(items: CatalogFactory.key.currentState?.widget.items, itemWidth: widget.itemWidth) )), ] ); } }