Flutter样式管理插件awesome_styles的使用

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

Flutter样式管理插件awesome_styles的使用

自定义主题管理器为Flutter提供

此包为Flutter应用程序提供了可定制的主题管理解决方案。它使动态主题的设置和使用变得简单,并支持响应式设计,允许你从单一配置文件中管理颜色、文本样式、填充、阴影等。

特性

  • 响应式设计:根据设备大小(移动设备、平板电脑、桌面、电视)自动调整主题参数。
  • 可定制的主题:从JSON配置文件加载并应用主题。
  • 文本和颜色管理:轻松管理文本样式和颜色。
  • 按钮样式:预定义的按钮样式,支持不同状态和尺寸。
  • 阴影和半径自定义:对组件阴影和边框半径进行精细控制。

开始使用

1. 安装

在你的pubspec.yaml中添加包作为依赖:

dependencies:
  awesome_styles: ^1.0.0

然后,使用以下命令安装包:

flutter pub get
2. 配置

将主题配置文件theme.json放在项目的assets文件夹中。

示例 theme.json 文件:

[
  {
    "colors": {
      "primary": "#FF5733",
      "secondary": "#C70039",
      "background": "#FFFFFF",
      "foreground": "#000000"
    },
    "texts": {
      "size": {
        "tiny": [12, 14, 16, 18],
        "small": [14, 16, 18, 20],
        "medium": [16, 18, 20, 22],
        "large": [18, 20, 22, 24],
        "huge": [20, 22, 24, 26],
        "title": [24, 26, 28, 30],
        "biggest": [28, 30, 32, 34]
      }
    },
    "border": {
      "radius": {
        "small": [4, 6, 8, 10],
        "medium": [6, 8, 10, 12],
        "large": [8, 10, 12, 14]
      }
    },
    "padding": {
      "small": [4, 6, 8, 10],
      "medium": [6, 8, 10, 12],
      "large": [8, 10, 12, 14]
    },
    "shadows": {
      "small": [
        {
          "color": "#000000",
          "offset": [0, 1],
          "radius": 3,
          "spread": 0
        }
      ],
      "medium": [
        {
          "color": "#000000",
          "offset": [0, 2],
          "radius": 6,
          "spread": 1
        }
      ],
      "large": [
        {
          "color": "#000000",
          "offset": [0, 3],
          "radius": 9,
          "spread": 2
        }
      ]
    }
  }
]
3. 初始化

在你的main.dart中初始化主题:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Style.init();  // 加载assets/theme.json中的主题
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primaryColor: Style.colors.primary,
        textTheme: TextTheme(
          bodyText1: TextStyle(fontSize: Style.texts.medium(context)),
        ),
        buttonTheme: ButtonThemeData(
          buttonColor: Style.colors.primary,
        ),
      ),
      home: MyHomePage(),
    );
  }
}
4. 使用
访问颜色和文本样式
Text(
  'Hello World',
  style: TextStyle(
    fontSize: Style.texts.large(context),
    color: Style.colors.primary,
  ),
);
按钮样式
ElevatedButton(
  style: Style.buttons.primary(),
  onPressed: () {},
  child: Text('Primary Button'),
);
响应式半径和填充
Container(
  padding: Style.paddings.medium(context),
  decoration: BoxDecoration(
    borderRadius: Style.radius.medium(context),
  ),
  child: Text('Responsive Container'),
);

文档

有关可用选项和额外配置的详细信息,请参阅代码中的内联注释和提供的示例JSON文件。

示例

你可以在本仓库的example/目录中找到一个完整的示例。运行它使用:

flutter run example/lib/main.dart

更多关于Flutter样式管理插件awesome_styles的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter样式管理插件awesome_styles的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用awesome_styles插件进行样式管理的代码示例。awesome_styles是一个用于集中管理应用样式的Flutter插件,它允许你定义主题和样式,并在整个应用中重复使用。

首先,确保你已经将awesome_styles插件添加到了你的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  awesome_styles: ^最新版本号

然后,运行flutter pub get来安装插件。

1. 定义样式

创建一个新的Dart文件,例如styles.dart,来定义你的应用样式:

// styles.dart
import 'package:awesome_styles/awesome_styles.dart';
import 'package:flutter/material.dart';

// 定义一个主题
final AppTheme appTheme = AppTheme(
  light: LightThemeData(
    primaryColor: Colors.blue,
    secondaryColor: Colors.green,
    backgroundColor: Colors.white,
    textStyle: TextStyle(
      color: Colors.black,
      fontSize: 16,
    ),
    // 可以添加更多的样式定义
  ),
  dark: DarkThemeData(
    primaryColor: Colors.grey[800]!,
    secondaryColor: Colors.blueGrey[600]!,
    backgroundColor: Colors.black,
    textStyle: TextStyle(
      color: Colors.white,
      fontSize: 16,
    ),
    // 可以添加更多的样式定义
  ),
);

// 定义全局的样式
final GlobalStyles globalStyles = GlobalStyles(
  textStyle: TextStyle(
    fontFamily: 'Roboto',
    fontWeight: FontWeight.normal,
  ),
  buttonStyle: ButtonStyle(
    overlayColor: MaterialStateProperty.all(Colors.grey.withOpacity(0.2)),
  ),
  // 可以添加更多的全局样式定义
);

2. 应用样式

在你的main.dart或其他组件文件中,应用这些样式:

// main.dart
import 'package:flutter/material.dart';
import 'package:awesome_styles/awesome_styles.dart';
import 'styles.dart'; // 导入你定义的样式文件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData.from(
        colorScheme: ColorScheme.fromSwatch(
          primarySwatch: appTheme.light.primaryColor,
        ).copyWith(
          background: appTheme.light.backgroundColor,
        ),
        textTheme: TextTheme(
          bodyText1: appTheme.light.textStyle,
        ),
      ),
      darkTheme: ThemeData.from(
        colorScheme: ColorScheme.fromSwatch(
          primarySwatch: appTheme.dark.primaryColor,
        ).copyWith(
          background: appTheme.dark.backgroundColor,
        ),
        textTheme: TextTheme(
          bodyText1: appTheme.dark.textStyle,
        ),
      ),
      themeMode: ThemeMode.system, // 或者 ThemeMode.light / ThemeMode.dark
      home: MyHomePage(),
      // 使用 GlobalStylesWrapper 来应用全局样式
      builder: (context, child) => GlobalStylesWrapper(
        globalStyles: globalStyles,
        child: child,
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Text(
          'Hello, Flutter!',
          style: Theme.of(context).textTheme.bodyText1, // 使用主题中的文本样式
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        tooltip: 'Increment',
        child: Icon(Icons.add),
        // 使用全局按钮样式
        style: ButtonStyle(
          overlayColor: MaterialStateProperty.resolveWith<Color?>(
            (Set<MaterialState> states) {
              return globalStyles.buttonStyle.overlayColor?.resolve(states);
            },
          ),
        ),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

3. 运行应用

确保所有文件保存后,运行你的Flutter应用。现在,你的应用应该应用了你在styles.dart文件中定义的样式。

通过这种方式,你可以轻松地在整个Flutter应用中集中管理和复用样式,使得代码更加清晰和可维护。

回到顶部