Flutter材质与光影效果插件flutter_neumo的使用

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

Flutter材质与光影效果插件flutter_neumo的使用

flutter_neumo 是一个完整的、开箱即用的 Neumo UI 工具包,适用于 Flutter。它支持深色主题并完全可定制。

pub package

安装

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

dependencies:
  flutter_neumo: ^x.y.z

确保将 ^x.y.z 替换为最新版本号。

使用示例

下面是一个简单的示例,展示如何使用 flutter_neumo 插件来创建具有 Neumo 风格的应用程序。

示例代码

import 'package:flutter_neumo/flutter_neumo.dart';

import 'samples/sample_home.dart';

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

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

  // 这个小部件是你的应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return const NeumoApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      themeMode: ThemeMode.light,
      theme: NeumoThemeData(
        baseColor: Color(0xFFFFFFFF), // 白色作为基础颜色
        lightSource: LightSource.topLeft, // 光源从左上角
        depth: 10, // 深度为10
      ),
      darkTheme: NeumoThemeData(
        baseColor: Color(0xFF3E3E3E), // 深灰色作为基础颜色
        lightSource: LightSource.topLeft, // 光源从左上角
        depth: 6, // 深度为6
      ),
      home: MyHomePage(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: NeumoFloatingActionButton(
        child: const Icon(Icons.add, size: 30), // 加号图标
        onPressed: () {}, // 点击事件
      ),
      backgroundColor: NeumoTheme.baseColor(context), // 背景色
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            NeumoButton(
              onPressed: () {
                debugPrint("onClick"); // 打印点击事件
              },
              style: const NeumoStyle(
                shape: NeumoShape.flat, // 平面形状
                boxShape: NeumoBoxShape.circle(), // 圆形框
              ),
              padding: const EdgeInsets.all(12.0), // 内边距
              child: Icon(
                Icons.favorite_border, // 心形图标
                color: _iconsColor(context), // 图标颜色
              ),
            ),
            NeumoButton(
                margin: const EdgeInsets.only(top: 12), // 上边距
                onPressed: () {
                  NeumoTheme.of(context)?.themeMode = // 切换主题模式
                      NeumoTheme.isUsingDark(context)
                          ? ThemeMode.light
                          : ThemeMode.dark;
                },
                style: NeumoStyle(
                  shape: NeumoShape.flat, // 平面形状
                  boxShape: NeumoBoxShape.roundRect(BorderRadius.circular(8)), // 圆角矩形框
                ),
                padding: const EdgeInsets.all(12.0), // 内边距
                child: Text(
                  "Toggle Theme", // 文本
                  style: TextStyle(color: _textColor(context)), // 文本颜色
                )),
            NeumoButton(
                margin: const EdgeInsets.only(top: 12), // 上边距
                onPressed: () {
                  Navigator.of(context)
                      .pushReplacement(MaterialPageRoute(builder: (context) {
                    return const SamplesHome(); // 跳转到示例主页
                  }));
                },
                style: NeumoStyle(
                  shape: NeumoShape.flat, // 平面形状
                  boxShape: NeumoBoxShape.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 = NeumoTheme.of(context); // 获取当前主题
    if (theme?.isUsingDark ?? false) { // 如果使用深色主题
      return theme?.current?.accentColor ?? Colors.white; // 返回强调色或白色
    } else {
      return Colors.black; // 否则返回黑色
    }
  }

  Color _textColor(BuildContext context) {
    if (NeumoTheme.isUsingDark(context)) { // 如果使用深色主题
      return Colors.white; // 返回白色
    } else {
      return Colors.black; // 否则返回黑色
    }
  }
}

更多关于Flutter材质与光影效果插件flutter_neumo的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter材质与光影效果插件flutter_neumo的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_neumo插件来实现材质与光影效果的代码示例。flutter_neumo是一个用于创建具有深度和光影效果的材质设计的Flutter包。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_neumo: ^最新版本号 # 请替换为最新的版本号

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

接下来,我们来看一个具体的代码示例,展示如何使用flutter_neumo来创建一个具有光影效果的按钮:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Neumo Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Neumo Demo'),
        ),
        body: Center(
          child: NeumoButton(
            child: Text('Neumo Button'),
            onPressed: () {
              print('Button pressed!');
            },
            neumorphism: Neumorphism.depth(
              borderRadius: BorderRadius.circular(20),
              color: Colors.grey[300]!,
              lightSource: LightSource.topLeft,
              intensity: 0.2,
              blur: 10,
            ),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们定义了一个简单的Flutter应用,其中包含一个使用NeumoButton创建的按钮。NeumoButtonflutter_neumo包提供的一个具有光影效果的按钮组件。

neumorphism参数用于配置光影效果,其中包括:

  • borderRadius:按钮的圆角半径。
  • color:按钮的基础颜色。
  • lightSource:光源位置,这里设置为左上角。
  • intensity:光影效果的强度。
  • blur:模糊程度。

你可以根据需要调整这些参数以获得不同的视觉效果。

运行这个示例应用,你将看到一个具有深度和光影效果的按钮。通过调整neumorphism参数,你可以创建出各种不同的材质和光影效果,使你的Flutter应用更加生动和吸引人。

回到顶部