view_ui_flutter 1.0.0 copy "view_ui_flutter: ^1.0.0" to clipboard
view_ui_flutter: ^1.0.0 copied to clipboard

A comprehensive Flutter UI widget library with consistent theming, responsive design, BLoC state management, and Material 3 support. Includes text, buttons, textfields, cards, dialogs, selectors, and more.

example/example.dart

// ignore_for_file: avoid_print

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:view_ui_flutter/bloc/menu/menu_bloc.dart';
import 'package:view_ui_flutter/data/shp_ui.dart';
import 'package:view_ui_flutter/theme/theme.dart';
import 'package:view_ui_flutter/widgets/widgets.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Initialize shared preferences for theme persistence
  final shp = ShpUi();
  await shp.initPrefs();

  // Initialize theme
  ThemeModel().initTheme();

  runApp(
    MultiBlocProvider(
      providers: [
        BlocProvider(create: (_) => MenuBloc(shp: shp)),
      ],
      child: const MyApp(),
    ),
  );
}

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

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<MenuBloc, MenuState>(
      builder: (context, state) {
        return MaterialApp(
          title: 'View UI Flutter Example',
          theme: ThemeModel().lightTheme,
          darkTheme: ThemeModel().darkTheme,
          themeMode: state.theme,
          home: const ExamplePage(),
        );
      },
    );
  }
}

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

  @override
  State<ExamplePage> createState() => _ExamplePageState();
}

class _ExamplePageState extends State<ExamplePage> {
  final _nameController = TextEditingController();
  final _emailController = TextEditingController();
  final _passwordController = TextEditingController();
  bool _obscurePassword = true;

  @override
  void dispose() {
    _nameController.dispose();
    _emailController.dispose();
    _passwordController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final isDarkMode = context.read<MenuBloc>().state.theme == ThemeMode.dark;

    return Scaffold(
      appBar: AppBar(
        title: TextWidget.titleMedium(texto: 'View UI Flutter Demo'),
        actions: [
          // Theme toggle button
          SelectorTema(
            iconChange: isDarkMode,
            onPressed: () {
              final newTheme = isDarkMode ? ThemeMode.light : ThemeMode.dark;
              context.read<MenuBloc>().add(OnCambiarThemeEvent(theme: newTheme));
            },
          ),
        ],
      ),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            // Text widgets showcase
            _buildSection('Text Widgets', [
              TextWidget.textSmall(texto: 'TextWidget.textSmall()'),
              TextWidget.textMedium(texto: 'TextWidget.textMedium()'),
              TextWidget.textLarge(texto: 'TextWidget.textLarge()'),
              TextWidget.titleSmall(texto: 'TextWidget.titleSmall()'),
              TextWidget.titleMedium(texto: 'TextWidget.titleMedium()'),
              TextWidget.headLineSmall(texto: 'TextWidget.headLineSmall()'),
            ]),

            const SizedBox(height: 24),

            // Button widgets showcase
            _buildSection('Button Widgets', [
              ButtonWidget.filled(
                titulo: 'Filled Button',
                onChanged: () => print('Filled pressed'),
              ),
              const SizedBox(height: 8),
              ButtonWidget.outlined(
                titulo: 'Outlined Button',
                onChanged: () => print('Outlined pressed'),
              ),
              const SizedBox(height: 8),
              ButtonWidget.iconFilled(
                icono: Icons.add,
                titulo: 'Icon Filled',
                onChanged: () => print('Icon filled pressed'),
              ),
              const SizedBox(height: 8),
              ButtonWidget.iconOutlined(
                icono: Icons.edit,
                titulo: 'Icon Outlined',
                onChanged: () => print('Icon outlined pressed'),
              ),
            ]),

            const SizedBox(height: 24),

            // TextField widgets showcase
            _buildSection('TextField Widgets', [
              TextfieldWidget.texto(
                labelTitulo: 'Name',
                controller: _nameController,
                hintText: 'Enter your name',
              ),
              const SizedBox(height: 12),
              TextfieldWidget.email(
                labelTitulo: 'Email',
                controller: _emailController,
                hintText: 'Enter your email',
              ),
              const SizedBox(height: 12),
              TextfieldWidget.contrasena(
                labelTitulo: 'Password',
                controller: _passwordController,
                hintText: 'Enter password',
                obscureText: _obscurePassword,
                habilitarSeleccionInteractiva: true,
                ontap: () {
                  setState(() {
                    _obscurePassword = !_obscurePassword;
                  });
                },
              ),
            ]),

            const SizedBox(height: 24),

            // Card widgets showcase
            _buildSection('Card Widgets', [
              TarjetaWidget.rounded(
                titulo: 'Rounded Card',
                descripcion1: 'This is a card description',
                imagenCentro: '',
                onTap: () => print('Card pressed'),
              ),
            ]),

            const SizedBox(height: 24),

            // Other widgets
            _buildSection('Other Widgets', [
              Row(
                children: [
                  TextWidget.textMedium(texto: 'Switch: '),
                  SwichWidget(
                    value: false,
                    onChanged: (value) => print('Switch: $value'),
                  ),
                ],
              ),
              const SizedBox(height: 12),
              CheckboxWidget(
                titulo: 'Checkbox with title',
                value: true,
                onChanged: (value) => print('Checkbox: $value'),
              ),
            ]),
          ],
        ),
      ),
    );
  }

  Widget _buildSection(String title, List<Widget> children) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        TextWidget.titleLarge(texto: title),
        const SizedBox(height: 12),
        ...children,
      ],
    );
  }
}
0
likes
120
points
208
downloads

Publisher

unverified uploader

Weekly Downloads

A comprehensive Flutter UI widget library with consistent theming, responsive design, BLoC state management, and Material 3 support. Includes text, buttons, textfields, cards, dialogs, selectors, and more.

Topics

#ui #widget #material-design #bloc #responsive

Documentation

API reference

License

unknown (license)

Dependencies

cupertino_icons, equatable, flex_color_scheme, flutter, flutter_adaptive_scaffold, flutter_bloc, flutter_fancy_tree_view, flutter_localizations, flutter_models_provider, font_awesome_flutter, go_router, google_fonts, intl, path_drawing, scrollable_positioned_list, shared_preferences, url_launcher, webview_flutter

More

Packages that depend on view_ui_flutter