Flutter仿拟物风格UI插件gusto_neumorphic的使用

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

Flutter仿拟物风格UI插件gusto_neumorphic的使用

简介

flutter_neumorphic 是一个完整的、即用型的Neumorphic UI工具包,适用于Flutter应用。它提供了多种Neumorphic风格的小部件,帮助开发者快速构建现代感十足的应用界面。

示例与演示

安装

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_neumorphic: ^3.0.3

然后在你的 .dart 文件中导入:

import 'package:flutter_neumorphic/flutter_neumorphic.dart';

常用小部件

以下是 flutter_neumorphic 提供的一些常用小部件及其描述:

预览 小部件 描述
Container Neumorphic 主要的Neumorphic容器,根据光源和深度添加白色/黑色渐变
Button NeumorphicButton 用户交互时通过深度变化响应的按钮
Radio NeumorphicRadio 一组Neumorphic按钮,每次只能选择一个
Checkbox NeumorphicCheckbox 可选中/取消选中的按钮,选中时显示强调色

更多小部件请参考 Widgets 部分。

示例代码

以下是一个简单的示例,展示了如何使用 flutter_neumorphic 构建一个带有Neumorphic风格的主页面:

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return NeumorphicApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      themeMode: ThemeMode.light,
      theme: NeumorphicThemeData(
        baseColor: Color(0xFFFFFFFF),
        lightSource: LightSource.topLeft,
        depth: 10,
      ),
      darkTheme: NeumorphicThemeData(
        baseColor: Color(0xFF3E3E3E),
        lightSource: LightSource.topLeft,
        depth: 6,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: NeumorphicFloatingActionButton(
        child: Icon(Icons.add, size: 30),
        onPressed: () {},
      ),
      backgroundColor: NeumorphicTheme.baseColor(context),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            NeumorphicButton(
              onPressed: () {
                print("onClick");
              },
              style: NeumorphicStyle(
                shape: NeumorphicShape.flat,
                boxShape: NeumorphicBoxShape.circle(),
              ),
              padding: const EdgeInsets.all(12.0),
              child: Icon(
                Icons.favorite_border,
                color: _iconsColor(context),
              ),
            ),
            NeumorphicButton(
                margin: EdgeInsets.only(top: 12),
                onPressed: () {
                  NeumorphicTheme.of(context)?.themeMode =
                      NeumorphicTheme.isUsingDark(context)
                          ? ThemeMode.light
                          : ThemeMode.dark;
                },
                style: NeumorphicStyle(
                  shape: NeumorphicShape.flat,
                  boxShape: NeumorphicBoxShape.roundRect(BorderRadius.circular(8)),
                ),
                padding: const EdgeInsets.all(12.0),
                child: Text(
                  "Toggle Theme",
                  style: TextStyle(color: _textColor(context)),
                )),
            NeumorphicButton(
                margin: EdgeInsets.only(top: 12),
                onPressed: () {
                  // Navigate to full sample page
                },
                style: NeumorphicStyle(
                  shape: NeumorphicShape.flat,
                  boxShape: NeumorphicBoxShape.roundRect(BorderRadius.circular(8)),
                ),
                padding: const EdgeInsets.all(12.0),
                child: Text(
                  "Go to full sample",
                  style: TextStyle(color: _textColor(context)),
                )),
          ],
        ),
      ),
    );
  }

  Color _iconsColor(BuildContext context) {
    final theme = NeumorphicTheme.of(context);
    if (theme!.isUsingDark) {
      return theme.current!.accentColor;
    } else {
      return Colors.black;
    }
  }

  Color _textColor(BuildContext context) {
    if (NeumorphicTheme.isUsingDark(context)) {
      return Colors.white;
    } else {
      return Colors.black;
    }
  }
}

自定义形状与主题

flutter_neumorphic 还支持自定义形状和主题设置,具体可以参考 Custom ShapeNeumorphic Theme 部分。

总结

通过使用 flutter_neumorphic,你可以轻松地为你的Flutter应用添加现代感十足的Neumorphic风格。无论是按钮、复选框还是进度条,这个库都能提供丰富的组件支持,帮助你快速实现设计需求。


以上内容涵盖了 `flutter_neumorphic` 的安装、基本使用方法以及一些常用的组件示例,希望对你有所帮助!

更多关于Flutter仿拟物风格UI插件gusto_neumorphic的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter仿拟物风格UI插件gusto_neumorphic的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用gusto_neumorphic插件来创建仿拟物风格UI的示例代码。gusto_neumorphic是一个用于实现仿拟物(Neumorphism)设计的Flutter插件,它提供了一系列小部件来创建具有深度和立体感的界面元素。

首先,确保你已经在pubspec.yaml文件中添加了gusto_neumorphic依赖项:

dependencies:
  flutter:
    sdk: flutter
  gusto_neumorphic: ^x.y.z  # 请替换为最新版本号

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

接下来,我们来看一个完整的示例代码,展示如何使用gusto_neumorphic来创建一个简单的仿拟物风格UI:

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

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

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

class NeumorphicDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Neumorphic UI Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            NeumorphicButton(
              onPressed: () {},
              child: Text('Neumorphic Button'),
              style: NeumorphicStyle(
                depth: 5,
                intensity: 0.2,
                shape: NeumorphicShape.convex,
                color: NeumorphicColor(base: Colors.white, shadow: Colors.grey[200]!),
              ),
            ),
            SizedBox(height: 20),
            NeumorphicCard(
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Text(
                      'Neumorphic Card',
                      style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                    ),
                    SizedBox(height: 10),
                    Text(
                      'This is a neumorphic styled card. It has a soft, sunken look and feel.',
                      style: TextStyle(fontSize: 16),
                    ),
                  ],
                ),
              ),
              margin: EdgeInsets.all(16),
              style: NeumorphicStyle(
                depth: 10,
                intensity: 0.3,
                shape: NeumorphicShape.roundedRect,
                borderRadius: BorderRadius.circular(16),
                color: NeumorphicColor(base: Colors.white, shadow: Colors.grey[300]!),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个包含NeumorphicButtonNeumorphicCard的简单界面。NeumorphicButtonNeumorphicCard都使用了NeumorphicStyle来自定义它们的深度、强度、形状和颜色。

  • NeumorphicButton:一个具有仿拟物风格的按钮,点击时没有实际功能,但展示了如何设置按钮的样式。
  • NeumorphicCard:一个具有仿拟物风格的卡片,内部包含了一些文本,展示了如何设置卡片的样式,包括边距、圆角等。

你可以根据需要调整NeumorphicStyle的属性来创建不同的视觉效果。希望这个示例能帮你更好地理解如何在Flutter中使用gusto_neumorphic插件来创建仿拟物风格的UI。

回到顶部