showIconPicker function

Future<IconData?> showIconPicker({
  1. required AppModel app,
  2. required BuildContext context,
  3. IconData? defaultIcon,
})

Implementation

Future<IconData?> showIconPicker(
    {required AppModel app,
    required BuildContext context,
    IconData? defaultIcon}) async {
  var selectedIcon = defaultIcon;

  await showDialog(
      context: context,
      builder: (_) => AlertDialog(
            title: h3(app, context, 'Pick an Icon'),
            content: Container(
              width: 320,
              height: 400,
              alignment: Alignment.center,
              child: GridView.builder(
                gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
                    maxCrossAxisExtent: 120,
                    childAspectRatio: 1 / 1,
                    crossAxisSpacing: 10,
                    mainAxisSpacing: 10),
                itemCount: allIcons.length,
                itemBuilder: (_, index) => Container(
                    width: 200,
                    height: 200,
                    child: ListView(
                      shrinkWrap: true,
                      physics: ScrollPhysics(),
                      children: [
                        Center(
                            child: IconButton(
                          color: selectedIcon == allIcons[index].iconData
                              ? Colors.blue
                              : Colors.green,
                          iconSize: 30,
                          icon: Icon(
                            allIcons[index].iconData,
                          ),
                          onPressed: () {
                            selectedIcon = allIcons[index].iconData;
                            Navigator.of(context).pop();
                          },
                        )),
                        Center(
                            child:
                                smallText(app, context, allIcons[index].name)),
                      ],
                    )),
              ),
            ),
            actions: [
              button(app, context, label: 'Close', onPressed: () {
                Navigator.of(context).pop();
              }),
            ],
          ));

  return selectedIcon;
}