xsdui 1.0.4 copy "xsdui: ^1.0.4" to clipboard
xsdui: ^1.0.4 copied to clipboard

outdated

For Server Driven UI to create a dynamic UI in your App. Parse JSON to Widget or Widget to JSON be easier

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:xsdui/xsdui.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Map<String, dynamic> jsonWidget = {
    "type": "wrap",
    "spacing": 10.0,
    "runSpacing": 10.0,
    "children": [
      {
        "type": "GestureDetector",
        "index": 0,
        "onPressed": {
          "type": "customFunctionWithParameters",
          "functionName": "ontap",
          "parameter": 0,
        },
        "child": {
          "type": "container",
          "padding": {
            "paddingType": "symmetric",
            "vertical": 7.0,
            "horizontal": 18.0,
          },
          "borderRadius": {
            "borderRadiusType": "circular",
            "radius": 8.0,
          },
          "border": {
            "color": "DCDDE1",
          },
          "child": {
            "type": "image",
            "imageType": "network",
            "width": 125.0,
            "height": 35.0,
            "link":
                "https://d19izmiuoyzsz.cloudfront.net/certificate/TsJgla0AWmYsKpxBVIDohLwIsZzks1ECUYuI9rGt.png",
          }
        },
      },
      {
        "type": "GestureDetector",
        "index": 1,
        "onPressed": {
          "type": "customFunctionWithParameters",
          "functionName": "ontap",
          "parameter": 1,
        },
        "child": {
          "type": "container",
          "padding": {
            "paddingType": "symmetric",
            "vertical": 7.0,
            "horizontal": 18.0,
          },
          "borderRadius": {
            "borderRadiusType": "circular",
            "radius": 8.0,
          },
          "border": {
            "color": "DCDDE1",
          },
          "child": {
            "type": "image",
            "imageType": "network",
            "width": 125.0,
            "height": 35.0,
            "link":
                "https://d19izmiuoyzsz.cloudfront.net/certificate/q9jM8dLivyuNdAUbcBwQITGPnUV4ZYYv5788k4GS.png",
          }
        },
      }
    ]
  };
  final List<String> syaratMendaftar = [
    'WNI berusia 18 tahun keatas.',
    'Tidak sedang menempuh pendidikan formal.',
    'Sedang mencari kerja, pekerja/buruh yang terkena PHK, atau pekerja/buruh yang membutuhkan peningkatan kompetensi kerja, seperti pekerja/buruh yang dirumahkan dan pekerja bukan penerima upah, termasuk pelaku usaha mikro & kecil.',
    'Bukan penerima bantuan sosial lainnya selama pandemi COVID-19.',
    'Bukan Pejabat Negara, Pimpinan dan Anggota DPRD, ASN, Prajurit TNI, Anggota Polri, Kepala Desa dan perangkat desa dan Direksi/Komisaris/Dewan Pengawas pada BUMN atau BUMD.',
    'Maksimal 2 NIK dalam 1 KK yang menjadi Penerima Kartu Prakerja.',
  ];

  int index = 0;
  List<int> listIndex = [];
  Map<String, Function> functionMap = {};
  Map<String, Function(dynamic)> functionMapWithParameter = {};
  Map<String, int> indexJson = {};

  void addFunction(Map<String, Function> newFunction) {
    functionMap.addEntries(newFunction.entries);
    XSdui.setFunctionMap(functionMap);
  }

  void addFunctionParameter(Map<String, Function(dynamic)> newFunction) {
    functionMapWithParameter.addEntries(newFunction.entries);
    XSdui.setFunctionMapWithParameter(functionMapWithParameter);
  }

  void changeIndex() {
    setState(() {
      index++;
      jsonWidget["children"][0]["child"]["border"]["color"] = "#6e4e8e";
    });
  }

  void addedValueFromJson(int value) {
    setState(() {
      listIndex.add(value);
    });
  }

  @override
  void initState() {
    addFunctionParameter({
      'ontap': (data) {
        final List<Map<String, dynamic>> list = jsonWidget["children"] ?? [];
        setState(() {
          index = data as int;
          list[list.indexWhere((e) => e["onPressed"]["parameter"] == index)]
              ["child"]["border"]["color"] = "#6e4e8e";
          list[list.indexWhere((e) => e["onPressed"]["parameter"] != index)]
              ["child"]["border"]["color"] = "#DCDDE1";
        });
      }
    });
    final leng = jsonWidget["children"]?.length ?? 0;
    for (int i = 0; i < leng; i++) {
      listIndex.add(i);
    }
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: XSdui.fromJson(
          context,
          json: jsonWidget,
        ),
      ),
    );
  }
}
1
likes
0
points
2
downloads

Publisher

unverified uploader

Weekly Downloads

For Server Driven UI to create a dynamic UI in your App. Parse JSON to Widget or Widget to JSON be easier

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

dio, equatable, expandable, flex_color_picker, flutter, flutter_bloc, freezed_annotation, shared_preferences, url_launcher

More

Packages that depend on xsdui