Flutter自定义组件集合插件use_widgets的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter自定义组件集合插件use_widgets的使用

通过使用use_widgets插件,您可以为您的应用添加各种美观的动画图标。本指南将向您展示如何在您的Flutter项目中集成并使用这些图标。

特性

动作图标

动作图标

警告图标

警告图标

内容图标

内容图标

加载图标

加载图标

媒体图标

媒体图标

导航图标

导航图标

通知图标

通知图标

社交媒体图标

社交媒体图标

其他图标

其他图标

开始使用

首先,在pubspec.yaml文件中添加依赖:

flutter pub add use_widgets

接下来,我们将提供一个简单的示例,展示如何使用其中一个动画图标。

示例代码

以下是一个完整的示例代码,展示了如何在您的Flutter应用中使用use_widgets插件中的动画图标。

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:use_widgets/use_widgets.dart';

void main() {
  runApp(
    MaterialApp(
      title: 'Use Widgets Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const HomePage(),
    ),
  );
}

const w = 50.0;
const h = 50.0;

// Flutter Hooks可以被StatefulWidget替换,如果您更喜欢使用StatefulWidget。
class HomePage extends HookWidget {
  const HomePage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    final val = useState(false);

    return Scaffold(
      backgroundColor: const Color(0xff202020),
      appBar: AppBar(
        backgroundColor: Colors.black,
        title: const Text(
          'Use Widgets',
          style: TextStyle(color: Colors.white),
        ),
        centerTitle: true,
      ),
      body: Center(
        child: SingleChildScrollView(
          child: Padding(
            padding: const EdgeInsets.all(12.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                const SizedBox(height: 20),
                const Title(title: 'Action'),
                const SizedBox(height: 20),
                Wrap(runSpacing: 30, children: [
                  Column(
                    children: [
                      const WidgetName(name: 'Bookmark'),
                      Bookmark(
                        marked: val.value,
                        color: Colors.white,
                        width: w,
                        height: h,
                        fit: BoxFit.cover,
                      ),
                    ],
                  ),
                  const SizedBox(width: 50),
                  Column(
                    children: [
                      const WidgetName(name: 'Heart'),
                      Heart(
                        hearted: val.value,
                        color: Colors.white,
                        width: w,
                        height: h,
                        fit: BoxFit.cover,
                      ),
                    ],
                  ),
                  // ... 其他图标 ...
                ]),
                
                const SizedBox(height: 50),
                const Title(title: 'Alerts'),
                const SizedBox(height: 20),
                const Wrap(
                  runSpacing: 30,
                  children: [
                    Column(
                      children: [
                        WidgetName(name: 'AlertCircle'),
                        AlertCircle(
                          color: Colors.white,
                          width: w,
                          height: h,
                          fit: BoxFit.cover,
                        ),
                      ],
                    ),
                    // ... 其他图标 ...
                  ],
                ),
                
                const SizedBox(height: 50),
                const Title(title: 'Content'),
                const SizedBox(height: 20),
                Wrap(
                  runSpacing: 30,
                  children: [
                    Column(
                      children: [
                        const WidgetName(name: 'Archive'),
                        Archive(
                          open: val.value,
                          color: Colors.white,
                          width: w,
                          height: h,
                          fit: BoxFit.cover,
                        ),
                      ],
                    ),
                    // ... 其他图标 ...
                  ],
                ),
                
                const SizedBox(height: 50),
                const Title(title: 'Loading'),
                const SizedBox(height: 20),
                const Wrap(runSpacing: 30, children: [
                  Column(
                    children: [
                      WidgetName(name: 'Infinity'),
                      Infinity(
                        color: Colors.white,
                        width: w,
                        height: h,
                        fit: BoxFit.cover,
                      ),
                    ],
                  ),
                  // ... 其他图标 ...
                ]),
                
                const SizedBox(height: 50),
                const Title(title: 'Media'),
                const SizedBox(height: 20),
                Wrap(
                  runSpacing: 30,
                  children: [
                    Column(
                      children: [
                        const WidgetName(name: 'MicrophoneV1'),
                        MicrophoneV1(
                          on: val.value,
                          color: Colors.white,
                          width: w,
                          height: h,
                          fit: BoxFit.cover,
                        ),
                      ],
                    ),
                    // ... 其他图标 ...
                  ],
                ),
                
                const SizedBox(height: 50),
                const Title(title: 'Notifications'),
                const SizedBox(height: 20),
                Wrap(runSpacing: 30, children: [
                  Column(
                    children: [
                      const WidgetName(name: 'NotificationV1'),
                      NotificationV1(
                        on: val.value,
                        color: Colors.white,
                        width: w,
                        height: h,
                        fit: BoxFit.cover,
                      ),
                    ],
                  ),
                  // ... 其他图标 ...
                ]),
                
                const SizedBox(height: 50),
                const Title(title: 'Navigation'),
                const SizedBox(height: 20),
                Wrap(runSpacing: 30, children: [
                  Column(
                    children: [
                      const WidgetName(name: 'BurgerMenu'),
                      BurgerMenu(
                        isOpen: val.value,
                        color: Colors.white,
                        width: w,
                        height: h,
                        fit: BoxFit.cover,
                      ),
                    ],
                  ),
                  // ... 其他图标 ...
                ]),
                
                const SizedBox(height: 50),
                const Title(title: 'Social Media'),
                const SizedBox(height: 20),
                Wrap(runSpacing: 30, children: [
                  Column(
                    children: [
                      const WidgetName(name: 'Behance'),
                      Behance(
                        focused: val.value,
                        color: Colors.white,
                        width: w,
                        height: h,
                        fit: BoxFit.cover,
                      ),
                    ],
                  ),
                  // ... 其他图标 ...
                ]),
                
                const SizedBox(height: 50),
                const Title(title: 'Other'),
                const SizedBox(height: 20),
                const Wrap(runSpacing: 30, children: [
                  Column(
                    children: [
                      WidgetName(name: 'Activity'),
                      Activity(
                        color: Colors.white,
                        width: w,
                        height: h,
                        fit: BoxFit.cover,
                      ),
                    ],
                  ),
                  // ... 其他图标 ...
                ]),
                
                const SizedBox(height: 240),
              ],
            ),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          val.value = !val.value;
        },
        tooltip: 'Toggle Value',
        child: Icon(val.value ? Icons.toggle_on : Icons.toggle_off),
      ),
    );
  }
}

class Title extends StatelessWidget {
  final String title;
  const Title({required this.title, super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Text(
        title,
        style: const TextStyle(
          color: Colors.white,
          fontSize: 36,
          fontWeight: FontWeight.w300,
        ),
      ),
    );
  }
}

class WidgetName extends StatelessWidget {
  final String name;

  const WidgetName({required this.name, super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Text(
      name,
      style: const TextStyle(
        color: Colors.white,
        fontSize: 12,
        fontWeight: FontWeight.w300,
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用use_widgets插件来创建和使用自定义组件的示例。use_widgets是一个假定的插件名称,实际使用时你可能需要替换为具体的插件或手动创建自定义组件集合。以下示例将展示如何创建一个简单的自定义组件集合并在Flutter应用中使用它们。

1. 创建自定义组件集合

首先,我们创建一个包含多个自定义组件的Dart文件,例如custom_widgets.dart

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

// 自定义按钮组件
class CustomButton extends StatelessWidget {
  final String text;
  final VoidCallback onPressed;

  CustomButton({required this.text, required this.onPressed});

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: onPressed,
      child: Text(text),
      style: ButtonStyle(
        backgroundColor: MaterialStateProperty.all(Colors.blue),
        foregroundColor: MaterialStateProperty.all(Colors.white),
      ),
    );
  }
}

// 自定义文本组件
class CustomText extends StatelessWidget {
  final String text;
  final TextStyle? style;

  CustomText({required this.text, this.style});

  @override
  Widget build(BuildContext context) {
    return Text(
      text,
      style: style ?? TextStyle(fontSize: 20, color: Colors.black),
    );
  }
}

2. 在主应用中使用自定义组件

接下来,我们在主应用中导入并使用这些自定义组件。

// main.dart
import 'package:flutter/material.dart';
import 'custom_widgets.dart'; // 导入自定义组件集合

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  void _handleButtonClick() {
    print("Button clicked!");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Widgets Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            CustomText(text: 'Hello, Flutter!'), // 使用自定义文本组件
            SizedBox(height: 20),
            CustomButton(text: 'Click Me', onPressed: _handleButtonClick), // 使用自定义按钮组件
          ],
        ),
      ),
    );
  }
}

3. 运行应用

确保你的Flutter环境已经配置好,然后在项目根目录下运行以下命令来启动应用:

flutter run

这个示例展示了如何创建和使用自定义组件集合。在实际情况中,use_widgets插件可能会提供更多的预定义组件,你只需要按照文档导入并使用它们即可。上面的代码展示了如何手动创建和使用自定义组件的基本过程。

回到顶部