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

outdated

OG1 UI Widgets package project.

example/lib/main.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;

  @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(
      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 Scaffold(
            appBar: AppBar(),
            body: 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 Scaffold(
      appBar: AppBar(
        title: const Text('Details'),
        centerTitle: false,
      ),
      body: 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
0
pub points
0%
popularity

Publisher

unverified uploader

OG1 UI Widgets package project.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

cached_network_image, flutter, og1_system, percent_indicator

More

Packages that depend on og1_ui