Flutter自定义字体插件musiqwik_font的使用

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

Flutter自定义字体插件musiqwik_font的使用

MusiQwik字体包

MusiQwik字体包是一个重新分发由Robert Allgeyer在2001年创建的音乐符号字体的Flutter插件。该字体包根据SIL Open Font许可证(OFL)重新分发,并提供了一些方便的工具以简化其在Flutter中的使用。

虽然MusiQwik字体适合创建简单的音乐符号,但并不适用于创建复杂的音乐符号如和弦或带束音符。不过,通过将项目堆叠在一起,你可能可以实现类似的效果(但我没有尝试过)。

开始使用

安装插件

首先,你需要在你的项目中安装musiqwik_font插件:

flutter pub add musiqwik_font

使用字体

你可以直接在TextStyle中使用MusiQwik字体:

Text(
  '=&=4Y=!==Y==Y==%F=G=X=!=%I=H=W===>V==:==.',
  style: TextStyle(
    fontFamily: 'MusiQwik',  // 设置字体为MusiQwik
    package: 'musiqwik_font',  // 指定插件包名
    fontSize: 48,  // 设置字体大小
  ),
),

这将产生以下效果:

此外,你可以使用MusiQwik的静态方法span()来返回任何命名项作为TextSpan。这对于在RichText小部件中使用字体非常有用。

RichText(
  text: TextSpan(
    children: [
      MusiQwik.barStart,
      MusiQwik.trebleClef,
      MusiQwik.keyD,
      MusiQwik.fourFourTime,
      MusiQwik.spacer,
      MusiQwik.trD4qrt,
      MusiQwik.spacer,
      MusiQwik.spacer,
      MusiQwik.trE4qrt,
      MusiQwik.spacer,
      MusiQwik.spacer,
      MusiQwik.trF4qrt,
      MusiQwik.spacer,
      MusiQwik.spacer,
      MusiQwik.trG4qrt,
      MusiQwik.spacer,
      MusiQwik.barEnd,
    ].map((obj) => obj.span()).toList(),
  ),
)

这将产生以下效果:

你也可以使用自定义字体大小:

return RichText(
  text: TextSpan(
      children: [
        MusiQwik.barStart,
        MusiQwik.trebleClef,
        MusiQwik.keyD,
        MusiQwik.fourFourTime,
        MusiQwik.spacer,
        MusiQwik.trD4qrt,
        MusiQwik.spacer,
        MusiQwik.spacer,
        MusiQwik.trE4qrt,
        MusiQwik.spacer,
        MusiQwik.spacer,
        MusiQwik.trF4qrt,
        MusiQwik.spacer,
        MusiQwik.spacer,
        MusiQwik.trG4qrt,
        MusiQwik.spacer,
        MusiQwik.barEnd,
      ].map((obj) => obj.span(customFontSize)).toList(),
  ),
);

这将产生以下效果:

静态名称约定

对于谱号和调号的名称应该是不言而喻的。对于音符的名称,如下所示:

  • trE4qrt: 高音谱表 E 第四八度四分音符
  • trCSharp4qrt: 高音谱表 C# 第四八度四分音符
  • baC4hlf: 低音谱表 C 第四八度二分音符

完整的便利名称列表可以在以下链接中找到:

https://pub.dev/documentation/musiqwik_font/latest/musiqwik_font/MusiQwik.html

许可证

该包的源代码根据MIT许可证授权。

资源许可证

该包包含MusiQwik字体,该字体根据Open Font许可证(OFL)分发。你可以根据OFL的条件使用、研究、修改和重新分发字体。完整的条款和条件可以在以下链接中查看:

https://github.com/tolland/flame_learn_sheet_music/blob/main/packages/musiqwik_font/LICENSE_OFL.txt

示例代码

以下是从官方示例代码中摘录的几个例子:

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

import 'examples/examples.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Widgetbook.material(
      addons: [
        AlignmentAddon(
          initialAlignment: Alignment.center,
        ),
        // DeviceFrameAddon(
        //   devices: [
        //     Devices.ios.iPhoneSE,
        //     Devices.ios.iPhone13,
        //   ],
        //   initialDevice: Devices.ios.iPhone13,
        //
        // ),
      ],
      directories: [
        WidgetbookComponent(
          name: 'Container',
          useCases: [
            WidgetbookUseCase(
              name: 'Glyph Table',
              builder: (context) => const Example6(),
            ),
            WidgetbookUseCase(
              name: 'Simple Example',
              builder: (context) => const Example1(),
            ),
            WidgetbookUseCase(
              name: 'Example 2',
              builder: (context) => Example2(
                customFontSize: context.knobs.double.slider(
                  label: 'Font Size',
                  min: 10,
                  max: 150,
                  initialValue: 65,
                  divisions: 10,
                ),
              ),
            ),
            WidgetbookUseCase(
              name: 'Example 3',
              builder: (context) => Example3(
                customFontSize: context.knobs.double.slider(
                  label: 'Font Size',
                  min: 10,
                  max: 150,
                  initialValue: 46,
                  divisions: 10,
                ),
              ),
            ),
            WidgetbookUseCase(
              name: 'Example 4',
              builder: (context) => const Example4(),
            ),
            WidgetbookUseCase(
              name: 'Example 5',
              builder: (context) => const Example5(),
            ),
            WidgetbookUseCase(
              name: 'Eigth Note - example 7',
              builder: (context) => const Example7(),
            ),
          ],
        ),
      ],
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中集成并使用自定义字体插件 musiqwik_font 的代码示例。这个示例将展示如何配置插件、加载自定义字体并在应用中应用这些字体。

1. 添加插件依赖

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

dependencies:
  flutter:
    sdk: flutter
  musiqwik_font: ^latest_version  # 请替换为最新版本号

2. 将自定义字体文件添加到项目中

将你的自定义字体文件(例如 CustomFont.ttf)添加到 assets 文件夹中。如果 assets 文件夹不存在,请创建一个。

项目结构示例:

your_flutter_project/
├── android/
├── ios/
├── lib/
├── assets/
│   └── fonts/
│       └── CustomFont.ttf
├── pubspec.yaml
└── ...

然后在 pubspec.yaml 中配置字体文件路径:

flutter:
  assets:
    - assets/fonts/CustomFont.ttf

3. 初始化插件并加载字体

在你的主文件(例如 main.dart)中,初始化 musiqwik_font 插件并加载自定义字体。

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    // 初始化并加载自定义字体
    _loadCustomFont();
  }

  void _loadCustomFont() async {
    try {
      // 加载自定义字体
      await MusiqwikFont.loadFont('CustomFont', 'assets/fonts/CustomFont.ttf');
      // 通知UI字体已加载
      setState(() {});
    } catch (e) {
      print('Error loading font: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Font Demo'),
      ),
      body: Center(
        child: Text(
          'Hello, this is a custom font text!',
          style: TextStyle(
            fontFamily: 'CustomFont', // 确保这里的family名称与加载时的一致
            fontSize: 24,
          ),
        ),
      ),
    );
  }
}

4. 运行应用

确保所有配置正确后,运行你的Flutter应用:

flutter run

你应该能看到应用中显示的是自定义字体。

注意事项

  1. 字体文件名和家族名称:确保在加载字体时使用的文件名和字体家族名称与实际的文件及字体信息一致。
  2. 异步加载:字体加载是异步操作,所以确保在字体加载完成后再更新UI。

通过上述步骤,你可以在Flutter项目中成功集成并使用 musiqwik_font 插件加载自定义字体。

回到顶部