Flutter图标库插件kmbal_ionicons的使用

Flutter图标库插件kmbal_ionicons的使用

Ionicons

版本信息 许可证信息 问题数量

该插件是ionicons包的一个分支。它包含了来自Ionicons v7.4.0的所有图标。命名约定与CSS名称相同,所有破折号都被替换为下划线。

使用方法

import 'package:kmbal_ionicons/kmbal_ionicons.dart';

// ...

Icon(Ionicons.add)
Icon(Ionicons.add_outline)
Icon(Ionicons.add_sharp)

示例代码

example/lib/main.dart

import 'package:flutter/material.dart';

import 'package:kmbal_ionicons/kmbal_ionicons.dart';
import 'package:url_launcher/url_launcher_string.dart';

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

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

  // 这个小部件是你的应用程序的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Ionicons',
      theme: ThemeData(primarySwatch: Colors.blue),
      debugShowCheckedModeBanner: false,
      home: MyHomePage(),
    );
  }
}

/// 示例页面
class MyHomePage extends StatelessWidget {
  final _outlineItems = ValueNotifier<List<MapEntry<String, String>>>([]);
  final _filledItems = ValueNotifier<List<MapEntry<String, String>>>([]);
  final _sharpItems = ValueNotifier<List<MapEntry<String, String>>>([]);

  MyHomePage({super.key}) {
    _onTextChanged(''); // 触发搜索
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Ionicons'),
          bottom: const TabBar(tabs: [
            Tab(text: '轮廓'),
            Tab(text: '填充'),
            Tab(text: '锐利'),
          ]),
          actions: [
            IconButton(
              onPressed: _onPressedGitHub,
              icon: const Icon(Ionicons.logo_github),
            ),
            TextButton(
              onPressed: _onPressedPub,
              child: const Text(
                'v0.2.1',
                style: TextStyle(color: Colors.white),
              ),
            ),
          ],
        ),
        body: Column(
          children: [
            Padding(
              padding: const EdgeInsets.symmetric(vertical: 16),
              child: TextField(
                autofocus: true,
                decoration: const InputDecoration(
                  hintText: '搜索图标',
                  prefixIcon: Padding(
                    padding: EdgeInsets.only(left: 32, right: 16),
                    child: Icon(Ionicons.search_outline),
                  ),
                ),
                onChanged: _onTextChanged,
              ),
            ),
            Expanded(
              child: TabBarView(
                children: [
                  ValueListenableBuilder<dynamic>(
                    valueListenable: _outlineItems,
                    builder: (context, value, child) => _ItemList(items: value),
                  ),
                  ValueListenableBuilder<dynamic>(
                    valueListenable: _filledItems,
                    builder: (context, value, child) => _ItemList(items: value),
                  ),
                  ValueListenableBuilder<dynamic>(
                    valueListenable: _sharpItems,
                    builder: (context, value, child) => _ItemList(items: value),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

  /// 处理搜索图标
  void _onTextChanged(String value) {
    final items = value.isEmpty
        ? ioniconsMapping.entries.toList()
        : ioniconsMapping.entries
            .where((e) => e.key.contains(value.toLowerCase()))
            .toList();

    _outlineItems.value =
        items.where((e) => e.key.endsWith('-outline')).toList();
    _filledItems.value = items
        .where((e) => !(e.key.endsWith('-outline') || e.key.endsWith('-sharp')))
        .toList();
    _sharpItems.value = items.where((e) => e.key.endsWith('-sharp')).toList();
  }

  /// 处理按下GitHub按钮
  void _onPressedGitHub() {
    launchUrlString('https://github.com/KMBAL/flutter-ionicons');
  }

  /// 处理按下Pub按钮
  void _onPressedPub() {
    launchUrlString('https://pub.dev/packages/kmbal_ionicons');
  }
}

/// 渲染图标列表
class _ItemList extends StatelessWidget {
  final List<MapEntry<String, String>> items;

  final _controller = ScrollController();

  _ItemList({super.key, required this.items});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return GridView.extent(
      controller: _controller,
      maxCrossAxisExtent: 86,
      childAspectRatio: 0.7,
      children: List.generate(items.length, (index) {
        final item = items[index];
        return Column(
          children: [
            Icon(IoniconsData(int.parse(item.value)), size: 64),
            const SizedBox(height: 8),
            Text(
              item.key,
              textAlign: TextAlign.center,
              style: const TextStyle(fontSize: 12),
            ),
          ],
        );
      }),
    );
  }
}

更多关于Flutter图标库插件kmbal_ionicons的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图标库插件kmbal_ionicons的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用kmbal_ionicons图标库插件的示例代码。kmbal_ionicons是一个Flutter包,它提供了对Ionicons图标的访问。

步骤 1: 添加依赖

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

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

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

步骤 2: 导入包

在你的Dart文件中导入kmbal_ionicons包:

import 'package:kmbal_ionicons/kmbal_ionicons.dart';

步骤 3: 使用图标

接下来,你可以在你的Flutter应用中使用这些图标。以下是一个简单的示例,展示如何在按钮和文本中使用Ionicons图标。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('kmbal_ionicons Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // 使用图标按钮
              IconButton(
                icon: Icon(KmbalIonicons.home),
                color: Colors.blue,
                onPressed: () {
                  print('Home icon pressed');
                },
              ),
              SizedBox(height: 20),
              // 使用图标文本
              Text(
                'Search',
                style: TextStyle(
                  fontSize: 24,
                  foreground: Paint()
                    ..shader = ui.Gradient.linear(
                      Offset.zero,
                      const Offset(1, 0),
                      [Colors.red, Colors.yellow],
                      [0.0, 1.0],
                    ),
                ),
                // 在文本前添加图标
                prefixIcon: Icon(KmbalIonicons.search),
              ),
              SizedBox(height: 20),
              // 使用带有图标的自定义按钮
              ElevatedButton(
                onPressed: () {
                  print('Settings icon button pressed');
                },
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Icon(KmbalIonicons.settings),
                    SizedBox(width: 10),
                    Text('Settings'),
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 图标名称:确保你使用的图标名称与kmbal_ionicons包中提供的名称相匹配。你可以在包的官方文档或源代码中查找可用的图标名称。
  2. 自定义样式:你可以根据需要调整图标的颜色、大小等样式属性。
  3. 依赖更新:定期检查并更新你的依赖项,以确保你使用的是最新版本的kmbal_ionicons包。

通过上述步骤,你就可以在Flutter应用中使用kmbal_ionicons图标库插件了。希望这对你有所帮助!

回到顶部