import 'package:flutter/material.dart'; /// SampleModel class is the base of the Sample browser /// It contains the category, control, theme information class SampleModel extends Listenable { /// Contains the category, control, theme information SampleModel() { // searchControlItems = []; // sampleList = []; // searchResults = []; // searchSampleItems = []; // categoryList = SampleModel._categoryList; // controlList = SampleModel._controlList; // routes = SampleModel._routes; // searchControlItems.addAll(controlList); // for (int index = 0; index < controlList.length; index++) { // if (controlList[index].sampleList != null) { // for (int i = 0; i < controlList[index].sampleList!.length; i++) { // searchSampleItems.add(controlList[index].sampleList![i]); // } // } else if (controlList[index].childList != null) { // for (int i = 0; i < controlList[index].childList!.length; i++) { // for (int j = 0; // j < controlList[index].childList![i].subItems!.length; // j++) { // if (controlList[index].childList![i].subItems![j].type != 'child') { // searchSampleItems // .add(controlList[index].childList![i].subItems![j]); // } else { // //ignore: prefer_foreach // for (final SubItem sample // in controlList[index].childList![i].subItems![j].subItems) { // searchSampleItems.add(sample); // } // } // } // } // } else { // for (int i = 0; i < controlList[index].subItems!.length; i++) { // for (int j = 0; // j < controlList[index].subItems![i].subItems.length; // j++) { // for (int k = 0; // k < controlList[index].subItems![i].subItems[j].subItems.length; // k++) { // searchSampleItems // .add(controlList[index].subItems![i].subItems[j].subItems[k]); // } // } // } // } // } } /// Used to create the instance of [SampleModel] static SampleModel instance = SampleModel(); /// Contains the output widget of sample /// appropriate key and output widget mapped //final Map sampleWidget = getSampleWidget(); //ignore:prefer_final_fields // static List _controlList = []; // //ignore:prefer_final_fields // static List _categoryList = []; // /// Holds the category list // late List categoryList; // /// Holds the sorted control list // late List controlList; // /// Holds the searched control list // late List searchControlItems; // ///List of all the samples // late List sampleList; // /// To handle search // late List searchSampleItems; // /// To handle search // late List searchResults; /// holds theme based current palette color Color backgroundColor = const Color.fromRGBO(0, 116, 227, 1); /// holds light theme current palette color Color paletteColor = const Color.fromRGBO(0, 116, 227, 1); /// holds current palette color /// on toggling the palette colors before or after apply settings Color currentPrimaryColor = const Color.fromRGBO(0, 116, 227, 1); /// holds the current theme data late ThemeData themeData; /// Holds theme baased color of web outputcontainer Color textColor = const Color.fromRGBO(51, 51, 51, 1); /// Holds theme based drawer text color Color drawerTextIconColor = Colors.black; /// Holds theme based bottom sheet color Color bottomSheetBackgroundColor = Colors.white; /// Holds theme based card color Color cardThemeColor = Colors.white; /// Holds theme based web page background color Color webBackgroundColor = const Color.fromRGBO(246, 246, 246, 1); /// Holds theme based color of icon Color webIconColor = const Color.fromRGBO(0, 0, 0, 0.54); /// Holds theme based input container color Color webInputColor = const Color.fromRGBO(242, 242, 242, 1); /// Holds theme based web outputcontainer color Color webOutputContainerColor = Colors.white; /// Holds the theme based card's color Color cardColor = Colors.white; /// Holds the theme based divider color Color dividerColor = const Color.fromRGBO(204, 204, 204, 1); /// Holds the old browser window's height and width Size? oldWindowSize; /// Holds the current browser window's height and width late Size currentWindowSize; //static List _routes = []; /// List of navigation routes text and appropriate subitem //late List? routes; /// Holds the current visible sample, only for web late dynamic currentRenderSample; /// Holds the current rendered sample's key, only for web late String? currentSampleKey; /// Contains the light theme pallete colors late List? paletteColors; /// Contains the pallete's border colors late List? paletteBorderColors; /// Contains dark theme theme palatte colors late List? darkPaletteColors; /// Holds current theme data ThemeData? currentThemeData; /// Holds current pallete color Color currentPaletteColor = const Color.fromRGBO(0, 116, 227, 1); /// holds the index to finding the current theme /// In mobile sb - system 0, light 1, dark 2 int selectedThemeIndex = 0; /// Holds the information of isCardView or not bool isCardView = true; /// Holds the information of isMobileResolution or not /// To render the appbar and search bar based on it late bool isMobileResolution; /// Holds the current system theme late ThemeData systemTheme; /// Editing controller which used in the search text field TextEditingController editingController = TextEditingController(); /// Key of the property panel widget late GlobalKey propertyPanelKey; /// Holds the information of to be maximize or not bool needToMaximize = false; ///Storing state of current output container late dynamic outputContainerState; ///Storing state of web output container //late SampleOutputContainerState webOutputContainerState; ///check whether application is running on web/linuxOS/windowsOS/macOS bool isWebFullView = false; ///Check whether application is running on a mobile device bool isMobile = false; ///Check whether application is running on the web browser bool isWeb = false; ///Check whether application is running on the desktop bool isDesktop = false; ///Check whether application is running on the Android mobile device bool isAndroid = false; ///Check whether application is running on the Windows desktop OS bool isWindows = false; ///Check whether application is running on the iOS mobile device bool isIOS = false; ///Check whether application is running on the Linux desktop OS bool isLinux = false; ///Check whether application is running on the macOS desktop bool isMacOS = false; /// This controls to open / hide the property panel bool isPropertyPanelOpened = true; /// holds the current route of sample. //late SampleRoute currentSampleRoute; /// holds the collection of all sample routes. //static List sampleRoutes = []; /// Switching between light, dark, system themes void changeTheme(ThemeData _themeData) { themeData = _themeData; switch (_themeData.brightness) { case Brightness.dark: { dividerColor = const Color.fromRGBO(61, 61, 61, 1); cardColor = const Color.fromRGBO(48, 48, 48, 1); webIconColor = const Color.fromRGBO(255, 255, 255, 0.65); webOutputContainerColor = const Color.fromRGBO(23, 23, 23, 1); webInputColor = const Color.fromRGBO(44, 44, 44, 1); webBackgroundColor = const Color.fromRGBO(33, 33, 33, 1); drawerTextIconColor = Colors.white; bottomSheetBackgroundColor = const Color.fromRGBO(34, 39, 51, 1); textColor = const Color.fromRGBO(242, 242, 242, 1); cardThemeColor = const Color.fromRGBO(33, 33, 33, 1); break; } default: { dividerColor = const Color.fromRGBO(204, 204, 204, 1); cardColor = Colors.white; webIconColor = const Color.fromRGBO(0, 0, 0, 0.54); webOutputContainerColor = Colors.white; webInputColor = const Color.fromRGBO(242, 242, 242, 1); webBackgroundColor = const Color.fromRGBO(246, 246, 246, 1); drawerTextIconColor = Colors.black; bottomSheetBackgroundColor = Colors.white; textColor = const Color.fromRGBO(51, 51, 51, 1); cardThemeColor = Colors.white; break; } } } //ignore: prefer_collection_literals final Set _listeners = Set(); @override /// [listener] will be invoked when the model changes. void addListener(VoidCallback listener) { _listeners.add(listener); } @override /// [listener] will no longer be invoked when the model changes. void removeListener(VoidCallback listener) { _listeners.remove(listener); } /// Should be called only by [Model] when the model has changed. @protected void notifyListeners() { _listeners.toList().forEach((VoidCallback listener) => listener()); } } /// Base class of the sample's stateful widget class abstract class SampleView extends StatefulWidget { /// base class constructor of sample's stateful widget class const SampleView({Key? key}) : super(key: key); } /// Base class of the sample's state class abstract class SampleViewState extends State { /// Holds the SampleModel information late SampleModel model; /// Holds the information of current page is card view or not late bool isCardView; @override void initState() { model = SampleModel.instance; isCardView = model.isCardView && !model.isWebFullView; super.initState(); } @override /// Must call super. void dispose() { model.isCardView = true; super.dispose(); } /// Get the settings panel content. Widget? buildSettings(BuildContext context) { return null; } }