og1_ui 0.0.24 copy "og1_ui: ^0.0.24" to clipboard
og1_ui: ^0.0.24 copied to clipboard

OG1 UI Widgets package project.

example/lib/main.dart

import 'package:awesome_icons/awesome_icons.dart';
import 'package:flutter/material.dart';
import 'package:og1_ui/og1_ui.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int currentIndex = 0;
  final _selection = ValueNotifier<dynamic>(null);
  bool displayDetails = false;
  late List<LanguageModel> supportedLanguages;
  late LanguageModel language;
  late List<CommodityModel> supportedCommodities;
  late CommodityModel commodity;
  late ThemeMode themeMode;

  List<LanguageModel> _languageList() {
    return const <LanguageModel>[
      LanguageModel(1, "🇦🇫", "فارسی", "fa", "IR"),
      LanguageModel(2, "🇺🇸", "English", "en", "US"),
      LanguageModel(3, "🇸🇦", "اَلْعَرَبِيَّةُ‎", "ar", "SA"),
      LanguageModel(4, "🇮🇳", "हिंदी", "hi", "IN"),
    ];
  }

  _onCommodityChange(comm) =>
      comm != null ? setState(() => commodity = comm) : true;

  List<CommodityModel> _commodityList() {
    return const <CommodityModel>[
      CommodityModel(1, "All", FontAwesomeIcons.ribbon, Colors.deepPurple),
      CommodityModel(2, "Water", Icons.water_drop_outlined, Colors.blue),
      CommodityModel(3, "Food", FontAwesomeIcons.pizzaSlice, Colors.deepOrange),
      CommodityModel(4, "Clothing", FontAwesomeIcons.tshirt, Colors.indigo),
      CommodityModel(5, "Housing", Icons.house_outlined, Colors.amber),
    ];
  }

  _onLanguageChange(lang) =>
      lang != null ? setState(() => language = lang) : true;

  @override
  void initState() {
    super.initState();
    supportedLanguages = _languageList();
    supportedCommodities = _commodityList();
    commodity = _commodityList()[0];
    language = _languageList()[2];
    themeMode = ThemeMode.dark;
  }

  @override
  Widget build(BuildContext context) {
    final List<TabModel> tabModels = [
      const TabModel('News Feed', Icon(Icons.water_damage)),
      const TabModel('Profile', Icon(Icons.account_circle)),
      const TabModel('Map', Icon(Icons.map)),
      const TabModel('Water', Icon(Icons.water_rounded)),
      const TabModel('Donations', Icon(Icons.analytics_rounded)),
      const TabModel('Menu', Icon(Icons.menu)),
    ];

    return MaterialApp(
        home: Og1Layout(
      appBar: Og1AppBar(
        actions: [
          Og1IconLauncher(
            width: 70,
            placeholderText: Text(
              "💸",
              style: TextStyle(
                color: commodity.color,
                fontSize: 20,
              ),
            ),
            url: 'https://www.google.com/',
          ),
          Og1IconLauncher(
            placeholderIcon: Icon(
              Icons.chat,
              color: commodity.color,
            ),
            url: 'https://www.google.com/',
          ),
          Og1CommodityPicker(
            supportedCommodities: supportedCommodities,
            commodity: commodity,
            onCommodityChange: _onCommodityChange,
            displayText: true,
          ),
          Og1ThemeModeSelector(
            themeMode: themeMode,
            height: 25,
            onChanged: ((value) => setState(() => themeMode = value)),
          ),
          Og1LanguagePicker(
            supportedLanguages: supportedLanguages,
            language: language,
            onLanguageChange: _onLanguageChange,
          ),
        ],
      ),
      body: Center(
        child: Og1MasterDetails(
            master: buildMaster(_dummyData(), (value) {
              _selection.value = value;
              displayDetails = value != null;
              setState(() {
                displayDetails = displayDetails;
              });
            }),
            details: buildDetails(_selection),
            displayDetails: displayDetails),
      ),
      currentIndex: currentIndex,
      tabs: tabModels,
      desktopLayout: true,
      onTap: (id) {
        setState(() {
          currentIndex = id;
        });
      },
    ));
  }

  Widget buildMaster(List<dynamic> items, ValueChanged<dynamic> onSelect) {
    return ListView.separated(
      separatorBuilder: (context, index) => const Divider(height: 0),
      itemCount: items.length,
      itemBuilder: (context, index) {
        final _item = items[index];
        return ListTile(
          leading: const Icon(Icons.person),
          title: Text(_item['name']),
          subtitle: Text(_item['email']),
          onTap: () => onSelect(_item),
        );
      },
    );
  }

  Widget buildDetails(ValueNotifier<dynamic> selection) {
    return ValueListenableBuilder<dynamic>(
      valueListenable: selection,
      builder: (context, item, child) {
        if (item == null) {
          return const Center(child: Text('No Contact Selected'));
        }
        return ContactDetails(contact: item);
      },
    );
  }

  List<dynamic> _dummyData() {
    return [
      {'name': 'John Doe', 'email': 'john@app.com'},
      {'name': 'Susan Smith', 'email': 'susan@gmail.com'},
      {'name': 'James Hatfield', 'email': 'james.hatfield@yahoo.com'},
      {'name': 'Steve Jobs', 'email': 'steve@apple.com'},
      {'name': 'Bill Gates', 'email': 'gates@microsoft.com'},
      {'name': 'Elon Musk', 'email': 'elon@tesla.com'},
      {'name': 'John Smith', 'email': 'smith77@me.com'},
    ];
  }
}

class ContactDetails extends StatelessWidget {
  final dynamic contact;

  const ContactDetails({
    Key? key,
    @required this.contact,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return ListView(
      children: [
        ListTile(
          leading: const Icon(Icons.person_outline),
          title: const Text('Name'),
          subtitle: Text(contact['name']),
        ),
        ListTile(
          leading: const Icon(Icons.email),
          title: const Text('Email'),
          subtitle: Text(contact['email']),
        ),
      ],
    );
  }
}
0
likes
120
pub points
0%
popularity

Publisher

unverified uploader

OG1 UI Widgets package project.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

cached_network_image, flutter, og1_system, percent_indicator

More

Packages that depend on og1_ui