Flutter自定义UI组件插件nibite_ui_elements的使用

Flutter 自定义 UI 组件插件 nibite_ui_elements 的使用

描述

此插件帮助在 Flutter 中创建数据收集表单和导航页面。这是一个项目的早期版本,所以还有很多东西有待完善。

组件

Widgets

  • <code>NibiteSpinner</code> - 单个选择器字段
  • <code>NibiteProductStack</code> - 单个商品堆栈
  • <code>NibiteTextForm</code> - 单个文本表单
  • <code>NibiteDivider</code> - 单个分割线

使用

设置

要使用此插件,在 pubspec.yaml 文件中添加 nibite_ui_elements 作为依赖项。 无需特殊设置:只需安装依赖并使用即可。

dependencies:
  flutter:
    sdk: flutter
  nibite_ui_elements: ^0.0.8

基本使用

NibiteSpinner

import 'package:nibite_ui_elements/nibite_spinner.dart';
//...

int quantity = 0;

//...
NibiteSpinner(
  initialValue: 1,
  resultValue: (value) {
    setState(() {
      quantity = value;
    });
  },
),

NibiteProductStack

import 'package:nibite_ui_elements/nibite_product_stack.dart';
//...

NibiteProductStack(
  name: "Product's name",
  image: Image.network(
    'https://cdn.pixabay.com/photo/2017/07/28/14/23/macarons-2548810_1280.jpg',
    fit: BoxFit.cover,
  ),
  price: '\$ 12,34',
  onAddToCart: (GlobalKey cartKey) async {},
  onTap: () {},
),

NibiteTextForm

import 'package:nibite_ui_elements/nibite_text_form.dart';
//...

NibiteTextForm(
  prefixIcon: Icons.account_circle,
  labelText: 'Fieldname',
),

NibiteDivider

import 'package:nibite_ui_elements/nibite_divider.dart';
//...

NibiteDivider(
  labelText: 'Or',
),

示例代码

NibiteSpinner 示例

import 'package:flutter/material.dart';
import 'package:nibite_ui_elements/nibite_spinner.dart';

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

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

  [@override](/user/override)
  State<MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<MainApp> {
  int quantity = 1;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: Center(
          child: Column(
            children: [
              const Text('Nibite Spinner'),
              NibiteSpinner(
                initialValue: quantity,
                isRemovable: true,
                suffix: ' und.',
                style: const NibiteSpinnerStyle(
                  color: Colors.white,
                  buttonColor: Color(0xFF74BC99),
                  buttonTextColor: Colors.white,
                  buttonRemovableColor: Color(0xFFE24D51),
                  buttonRemovableTextColor: Colors.white,
                  boxShadow: [
                    BoxShadow(
                      color: Colors.black45,
                      spreadRadius: 1,
                      blurRadius: 2,
                    ),
                  ],
                ),
                resultValue: (value) {
                  setState(() {
                    quantity = value;
                  });
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

NibiteProductStack 示例

import 'package:flutter/material.dart';
import 'package:nibite_ui_elements/nibite_product_stack.dart';

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

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

  [@override](/user/override)
  State<MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<MainApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: Center(
          child: Column(
            children: [
              const Text('Nibite Product Stack'),
              Expanded(
                child: GridView.builder(
                  gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
                    crossAxisCount: 2,
                    mainAxisSpacing: 5,
                    crossAxisSpacing: 5,
                    childAspectRatio: 5 / 6,
                  ),
                  itemCount: 10,
                  itemBuilder: (_, index) {
                    return NibiteProductStack(
                      name: "Product$index's name",
                      image: Image.network(
                        'https://cdn.pixabay.com/photo/2017/07/28/14/23/macarons-2548810_1280.jpg',
                        fit: BoxFit.cover,
                      ),
                      price: '\$ 12,34',
                      onAddToCart: (GlobalKey cartKey) async {},
                      onTap: () {},
                      primaryColor: const Color(0xFF74BC99),
                      foregroundColor: Colors.white,
                    );
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

NibiteTextForm 示例

import 'package:flutter/material.dart';
import 'package:nibite_ui_elements/nibite_text_form.dart';

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

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

  [@override](/user/override)
  State<MainApp> createState() => _MainAppState();
}

class _MainAppState extends State<MainApp> {
  final _formGlobalKey = GlobalKey<FormState>();

  final userController = TextEditingController();
  String? userValitador(String? user) {
    if (user == null || user.isEmpty) {
      return 'Enter your username';
    }

    if (user.length < 3) return 'Enter a username with at least 3 characters';

    return null;
  }

  final passwordController = TextEditingController();
  String? passwordValidator(String? password) {
    if (password == null || password.isEmpty) {
      return 'Enter your password';
    }

    if (password.length < 6) {
      return 'Enter a password with at least 6 characters';
    }

    return null;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: Center(
          child: Column(
            children: [
              const Text('Nibite Text Form'),
              Form(
                key: _formGlobalKey,
                child: Column(
                  children: [
                    NibiteTextForm(
                      prefixIcon: Icons.account_circle,
                      labelText: 'Username',
                      validator: userValitador,
                      controller: userController,
                    ),
                    NibiteTextForm(
                      prefixIcon: Icons.lock,
                      labelText: 'Password',
                      isObscureText: true,
                      validator: passwordValidator,
                      controller: passwordController,
                    ),
                    ElevatedButton(
                      style: ElevatedButton.styleFrom(
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(18),
                        ),
                      ),
                      onPressed: () {},
                      child: const Text(
                        'Login',
                        style: TextStyle(
                          fontSize: 18,
                          fontWeight: FontWeight.bold,
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

NibiteDivider 与 NibiteTextForm 示例

import 'package:flutter/material.dart';
import 'package:nibite_ui_elements/nibite_divider.dart';
import 'package:nibite_ui_elements/nibite_text_form.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: Center(
          child: Column(
            children: [
              const Text('Nibite Divider with Text Form'),
              Column(
                children: [
                  const NibiteTextForm(
                    prefixIcon: Icons.account_circle,
                    labelText: 'Username',
                  ),
                  const NibiteTextForm(
                    prefixIcon: Icons.lock,
                    labelText: 'Password',
                    isObscureText: true,
                  ),
                  ElevatedButton(
                    style: ElevatedButton.styleFrom(
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(18),
                      ),
                    ),
                    onPressed: () {},
                    child: const Text(
                      'Login',
                      style: TextStyle(
                        fontSize: 18,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ),
                  const NibiteDivider(
                    labelText: 'Or',
                  ),
                  OutlinedButton(
                    style: OutlinedButton.styleFrom(
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(18),
                      ),
                      side: const BorderSide(
                        width: 2,
                      ),
                    ),
                    onPressed: () {},
                    child: const Text(
                      'Login with Social Account',
                      style: TextStyle(
                        fontSize: 18,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter自定义UI组件插件nibite_ui_elements的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义UI组件插件nibite_ui_elements的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


nibite_ui_elements 是一个用于 Flutter 的自定义 UI 组件插件,它提供了一些预先设计好的 UI 组件,可以帮助开发者快速构建美观且功能丰富的应用程序界面。以下是如何使用 nibite_ui_elements 插件的详细步骤:

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 nibite_ui_elements 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  nibite_ui_elements: ^1.0.0  # 请使用最新的版本号

然后,运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入 nibite_ui_elements 插件。

import 'package:nibite_ui_elements/nibite_ui_elements.dart';

3. 使用自定义组件

nibite_ui_elements 插件提供了多种自定义组件,你可以根据需要使用它们。以下是一些常见组件的使用示例:

3.1 自定义按钮

NibiteButton(
  onPressed: () {
    print('Button Pressed!');
  },
  text: 'Click Me',
  color: Colors.blue,
);

3.2 自定义卡片

NibiteCard(
  title: 'Card Title',
  subtitle: 'This is a custom card',
  imageUrl: 'https://example.com/image.png',
  onTap: () {
    print('Card Tapped!');
  },
);

3.3 自定义输入框

NibiteInputField(
  hintText: 'Enter your name',
  onChanged: (value) {
    print('Input: $value');
  },
);

3.4 自定义加载指示器

NibiteLoadingIndicator(
  size: 50.0,
  color: Colors.red,
);

4. 自定义主题

nibite_ui_elements 还允许你自定义应用的主题颜色、字体等。

NibiteTheme(
  primaryColor: Colors.green,
  accentColor: Colors.orange,
  textTheme: TextTheme(
    headline1: TextStyle(fontSize: 32.0, fontWeight: FontWeight.bold),
    bodyText1: TextStyle(fontSize: 16.0, color: Colors.black87),
  ),
  child: MyApp(),
);

5. 运行应用

确保你的应用能够正确运行,并且自定义组件能够按预期显示。

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Nibite UI Elements Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Nibite UI Elements'),
        ),
        body: Center(
          child: NibiteButton(
            onPressed: () {
              print('Button Pressed!');
            },
            text: 'Click Me',
            color: Colors.blue,
          ),
        ),
      ),
    );
  }
}
回到顶部