Flutter平台图标插件platform_icons的使用

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

Flutter平台图标插件platform_icons的使用

插件介绍

platform_icons 是一个结合了 MaterialIcons、CupertinoIcons 和 FluentUI 图标的 Flutter 插件。它可以根据你的应用运行的平台(Android、iOS 或 Web)自动选择合适的图标,使你的跨平台应用看起来像是专门为该平台构建的。

示例代码

下面是一个完整的示例代码,展示了如何在 Flutter 应用中使用 platform_icons 插件来显示不同平台的图标。

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

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

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: false,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  Color iconColor = Colors.black;
  double size = 24;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.white,
        elevation: 8,
        centerTitle: false,
        title: const Text(
          'PlatformIcons',
          style: TextStyle(color: Colors.black),
        ),
        actions: [
          PopupMenuButton(
              initialValue: iconColor,
              icon: Text(
                size.toString(),
                style: const TextStyle(
                    color: Colors.black, fontWeight: FontWeight.w700),
              ),
              onSelected: (item) {
                setState(() {
                  size = item;
                });
              },
              itemBuilder: (BuildContext context) =&gt; &lt;PopupMenuEntry&gt;[
                    const PopupMenuItem(
                      value: 116,
                      child: Text('116'),
                    ),
                    const PopupMenuItem(
                      value: 24,
                      child: Text('24'),
                    ),
                    const PopupMenuItem(
                      value: 32,
                      child: Text('32'),
                    ),
                    const PopupMenuItem(
                      value: 48,
                      child: Text('48'),
                    ),
                    const PopupMenuItem(
                      value: 68,
                      child: Text('68'),
                    ),
                  ]),
          PopupMenuButton(
              initialValue: iconColor,
              icon: Container(
                width: 20,
                height: 20,
                decoration: BoxDecoration(
                  color: iconColor,
                  shape: BoxShape.circle,
                ),
              ),
              onSelected: (item) {
                setState(() {
                  iconColor = item;
                });
              },
              itemBuilder: (BuildContext context) =&gt; &lt;PopupMenuEntry&gt;[
                    const PopupMenuItem(
                      value: Colors.orange,
                      child: Text('Orange'),
                    ),
                    const PopupMenuItem(
                      value: Colors.pink,
                      child: Text('Pink'),
                    ),
                    const PopupMenuItem(
                      value: Colors.green,
                      child: Text('Green'),
                    ),
                    const PopupMenuItem(
                      value: Colors.red,
                      child: Text('Red'),
                    ),
                    const PopupMenuItem(
                      value: Colors.blue,
                      child: Text('Blue'),
                    ),
                    const PopupMenuItem(
                      value: Colors.black,
                      child: Text('Black'),
                    ),
                  ])
        ],
        bottom: const PreferredSize(
            preferredSize: Size(double.infinity, 40),
            child: SizedBox(
              height: 40,
              child: Row(
                children: [
                  Spacer(),
                  SizedBox(
                    width: 92,
                    child: Center(
                        child: Tooltip(
                            message: 'This is used on Android, Linux and Web',
                            child: Text('Material'))),
                  ),
                  SizedBox(
                    width: 92,
                    child: Center(
                        child: Tooltip(
                            message: 'This is used on iOS, macOS',
                            child: Text('Cupertino'))),
                  ),
                  SizedBox(
                    width: 92,
                    child: Center(
                        child: Tooltip(
                            message: 'This is used on Windows',
                            child: Text('Fluent'))),
                  ),
                  SizedBox(width: 220),
                ],
              ),
            )),
      ),
      body: ListView.builder(
        itemBuilder: (context, index) =&gt; Container(
          padding: const EdgeInsets.all(20),
          color: index % 2 == 0 ? Colors.grey[200] : Colors.white,
          child: Row(
            children: [
              const Padding(
                padding: EdgeInsets.only(top: 5.0),
                child: Text(
                  'PlatformIcons.',
                  style: TextStyle(fontSize: 9, color: Colors.grey),
                ),
              ),
              Expanded(
                  child: Text(
                      PlatformIcons.values[index]
                          .toString()
                          .replaceAll('PlatformIcons.', ''),
                      style: const TextStyle(fontWeight: FontWeight.w700))),
              SizedBox(
                width: 92,
                child: Center(
                    child: Icon(
                  PlatformIcons.values[index].material,
                  color: iconColor,
                  size: size,
                )),
              ),
              SizedBox(
                width: 92,
                child: Center(
                    child: Icon(
                  PlatformIcons.values[index].cupertino,
                  color: iconColor,
                  size: size,
                )),
              ),
              SizedBox(
                width: 92,
                child: Center(
                    child: Icon(
                  PlatformIcons.values[index].fluent,
                  color: iconColor,
                  size: size,
                )),
              ),
            ],
          ),
        ),
        itemCount: PlatformIcons.values.length,
      ),
    );
  }
}

使用说明

  1. 导入插件:首先需要导入 platform_icons 插件。

    import 'package:platform_icons/platform_icons.dart';
    
  2. 创建应用实例:在 main 函数中创建并启动应用实例。

    void main() {
      runApp(const MyApp());
    }
    
  3. 定义主页面:在 HomePage 类中定义主页布局。

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      // 这个类是你的应用根节点
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            useMaterial3: false,
          ),
          home: const HomePage(),
        );
      }
    }
    
  4. 自定义状态管理:在 _HomePageState 类中定义状态管理逻辑。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用platform_icons插件的示例代码。platform_icons插件提供了一套跨平台的图标集,包括iOS和Android风格的系统图标。

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

dependencies:
  flutter:
    sdk: flutter
  platform_icons: ^2.0.0  # 请检查最新版本号

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

接下来,在你的Dart文件中使用这些图标。以下是一个完整的示例,展示如何在应用中使用platform_icons

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

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

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Platform Icons Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // iOS风格的图标
            IconButton(
              icon: PlatformIcons.ios_home,
              iconSize: 48,
              onPressed: () {
                print('iOS Home Icon Pressed');
              },
            ),
            SizedBox(height: 20),
            // Android风格的图标
            IconButton(
              icon: PlatformIcons.md_home,
              iconSize: 48,
              onPressed: () {
                print('Android Home Icon Pressed');
              },
            ),
            SizedBox(height: 20),
            // 统一的平台风格图标(自动选择iOS或Android风格)
            IconButton(
              icon: PlatformIcons.home,
              iconSize: 48,
              onPressed: () {
                print('Unified Home Icon Pressed');
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们展示了三种不同的方式来使用platform_icons

  1. iOS风格的图标:使用PlatformIcons.ios_home
  2. Android风格的图标:使用PlatformIcons.md_home
  3. 统一的平台风格图标:使用PlatformIcons.home,它会根据当前平台自动选择iOS或Android风格的图标。

运行这个应用,你会看到三个不同的按钮,每个按钮上都有一个不同风格的“家”图标。点击这些按钮时,控制台会输出相应的信息。

这个示例展示了如何使用platform_icons插件来在Flutter应用中实现跨平台一致的图标风格。希望这对你有所帮助!

回到顶部