Flutter图标库插件ionicons的使用

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

Flutter图标库插件ionicons的使用

Ionicons

Pub Version GitHub License GitHub Issues

这个包包含了来自Ionicons v6.0.2的1332个图标。命名约定与CSS名称相同,所有连字符都替换为下划线。

使用方法

Ionicons提供了三种风格的图标:outline(轮廓)、filled(实心)和sharp(尖锐)。使用时需要先导入ionicons包:

import 'package:ionicons/ionicons.dart';

然后可以在代码中直接使用这些图标:

Icon(Ionicons.add) // 默认样式
Icon(Ionicons.add_outline) // 轮廓样式
Icon(Ionicons.add_sharp) // 尖锐样式

示例

你可以通过访问在线示例来查看Ionicons的实际效果。

完整示例代码

下面是一个完整的Flutter应用示例,展示了如何在应用中使用Ionicons图标库,并实现了一个简单的图标搜索功能:

import 'package:flutter/material.dart';
import 'package:ionicons/ionicons.dart';
import 'package:url_launcher/url_launcher_string.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Ionicons',
      theme: ThemeData(primarySwatch: Colors.blue),
      debugShowCheckedModeBanner: false,
      home: MyHomePage(),
    );
  }
}

/// Example page
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({Key? key}) : super(key: key) {
    _onTextChanged(''); // 触发搜索
  }

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Ionicons'),
          bottom: const TabBar(tabs: [
            Tab(text: 'Outline'),
            Tab(text: 'Filled'),
            Tab(text: 'Sharp'),
          ]),
          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: 'Search icons',
                  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/ez-connect/flutter-ionicons');
  }

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

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

  final _controller = ScrollController();

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

  @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),
            ),
          ],
        );
      }),
    );
  }
}

此示例代码创建了一个带有标签页的应用程序,用户可以在其中搜索并浏览不同风格的Ionicons图标。每个标签页显示一种风格的图标(Outline、Filled 和 Sharp),并且可以通过搜索框进行过滤。此外,还提供了跳转到GitHub和Pub页面的功能按钮。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用ionicons图标库的示例代码。ionicons 是一个流行的图标库,适用于移动和网页应用。

步骤 1: 添加依赖

首先,你需要在你的 pubspec.yaml 文件中添加 flutter_ionicons 依赖。确保你的 Flutter 环境已经配置好,并且你正在使用的 Flutter 版本是最新的。

dependencies:
  flutter:
    sdk: flutter
  flutter_ionicons: ^0.x.x  # 请检查最新版本号

然后运行 flutter pub get 来获取依赖。

步骤 2: 导入图标库

在你的 Dart 文件中导入 flutter_ionicons 包。

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

步骤 3: 使用图标

你可以使用 Ionicons 类来访问离子图标库中的图标。下面是一个简单的示例,展示如何在 Flutter 应用中使用离子图标。

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Ionicons Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Icon(
                Ionicons.add,
                size: 50,
                color: Colors.blue,
              ),
              SizedBox(height: 20),
              Icon(
                Ionicons.alert,
                size: 50,
                color: Colors.red,
              ),
              SizedBox(height: 20),
              Icon(
                Ionicons.arrow_back,
                size: 50,
                color: Colors.green,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

完整代码示例

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Ionicons Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Icon(
                Ionicons.add,
                size: 50,
                color: Colors.blue,
              ),
              SizedBox(height: 20),
              Icon(
                Ionicons.alert,
                size: 50,
                color: Colors.red,
              ),
              SizedBox(height: 20),
              Icon(
                Ionicons.arrow_back,
                size: 50,
                color: Colors.green,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 版本兼容性:确保你使用的 flutter_ionicons 版本与你的 Flutter SDK 版本兼容。
  2. 图标名称:你可以在离子图标的官方文档中找到所有可用的图标名称。确保你使用正确的图标名称。
  3. 样式调整:你可以根据需要调整图标的 sizecolor 属性。

这样,你就可以在 Flutter 应用中成功使用 ionicons 图标库了。希望这对你有所帮助!

回到顶部