phosphor_flutter 2.1.0 copy "phosphor_flutter: ^2.1.0" to clipboard
phosphor_flutter: ^2.1.0 copied to clipboard

Implementation of Phosphoricons for Flutter. 772 icons and counting. Thin, Light, Regular, Bold, Fill.

example/lib/main.dart

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

import 'constants/all_icons.dart';

void main() {
  runApp(_MyApp());
}

class _MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Phosphor Icons Demo',
      home: IconsCatalog(),
    );
  }
}

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

  @override
  State<IconsCatalog> createState() => _IconsCatalogState();
}

class _IconsCatalogState extends State<IconsCatalog> {
  late List<PhosphorIconData> _icons;
  late List<String> _iconsNames;
  String _title = 'Icons Catalog - regular';

  @override
  void initState() {
    _icons = AllIcons.regularIcons.values.toList();
    _iconsNames = AllIcons.regularIcons.keys.toList();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(_title),
        leading: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Container(
            decoration: const BoxDecoration(
              image: DecorationImage(
                image: AssetImage(
                  'assets/images/phosphor-mark-tight-yellow.png',
                ),
                fit: BoxFit.fill,
              ),
            ),
          ),
        ),
        centerTitle: true,
        backgroundColor: const Color(0xff35313d),
        actions: [
          PopupMenuButton<PhosphorIconsStyle>(
            tooltip: 'Style',
            icon: Icon(PhosphorIcons.pencilLine(PhosphorIconsStyle.regular)),
            itemBuilder: (context) => PhosphorIconsStyle.values
                .map((style) => PopupMenuItem<PhosphorIconsStyle>(
                      value: style,
                      child: Row(
                        children: [
                          PhosphorIcon(
                            PhosphorIcons.pencilLine(style),
                            color: Colors.black,
                          ),
                          const SizedBox(width: 8),
                          Text(style.name),
                        ],
                      ),
                    ))
                .toList(),
            onSelected: (value) {
              final (icons, names) = switch (value) {
                PhosphorIconsStyle.regular => (
                    AllIcons.regularIcons.values.toList(),
                    AllIcons.regularIcons.keys.toList()
                  ),
                PhosphorIconsStyle.thin => (
                    AllIcons.thinIcons.values.toList(),
                    AllIcons.thinIcons.keys.toList()
                  ),
                PhosphorIconsStyle.light => (
                    AllIcons.lightIcons.values.toList(),
                    AllIcons.lightIcons.keys.toList()
                  ),
                PhosphorIconsStyle.bold => (
                    AllIcons.boldIcons.values.toList(),
                    AllIcons.boldIcons.keys.toList()
                  ),
                PhosphorIconsStyle.fill => (
                    AllIcons.fillIcons.values.toList(),
                    AllIcons.fillIcons.keys.toList()
                  ),
                PhosphorIconsStyle.duotone => (
                    AllIcons.duotoneIcons.values.toList(),
                    AllIcons.duotoneIcons.keys.toList()
                  ),
              };

              setState(() {
                _icons = icons;
                _iconsNames = names;
                _title = 'Icons Catalog - ${value.name}';
              });
            },
          ),
        ],
      ),
      body: GridView.builder(
        shrinkWrap: true,
        primary: true,
        gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3,
          crossAxisSpacing: 0,
          mainAxisSpacing: 0,
        ),
        itemCount: _icons.length,
        itemBuilder: (context, index) {
          return Padding(
            padding: const EdgeInsets.all(12.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                PhosphorIcon(
                  _icons[index],
                  size: 48,
                ),
                Text(
                  _iconsNames[index],
                  textAlign: TextAlign.center,
                ),
              ],
            ),
          );
        },
      ),
    );
  }
}
125
likes
150
points
22.2k
downloads
screenshot

Publisher

verified publisherphosphoricons.com

Weekly Downloads

Implementation of Phosphoricons for Flutter. 772 icons and counting. Thin, Light, Regular, Bold, Fill.

Homepage
Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on phosphor_flutter