Flutter平台自适应按钮插件platform_adaptive_buttons的使用

Flutter平台自适应按钮插件platform_adaptive_buttons的使用

本文将详细介绍如何在Flutter项目中使用platform_adaptive_buttons插件来创建适应不同平台风格的按钮。

开始使用

只需像平常一样创建按钮,并在其后添加.adaptive()方法即可。此插件支持以下类型的按钮:

  • ElevatedButton
  • TextButton
  • OutlinedButton
  • FilledButton

示例代码

ElevatedButton(
    onPressed: () {},
    child: const Text('Tap me!'),
).adaptive(context);

完整示例

下面是一个完整的示例,展示了如何使用platform_adaptive_buttons插件来创建适应不同平台风格的按钮。

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MainScreen(),
    );
  }
}

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

  [@override](/user/override)
  State<MainScreen> createState() => _MainScreenState();
}

class _MainScreenState extends State<MainScreen> {
  TargetPlatform? overridePlatform;
  bool useMaterial3 = true;
  bool isDisabled = false;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Theme(
      data: Theme.of(context).copyWith(
        platform: overridePlatform,
        useMaterial3: useMaterial3,
      ),
      child: Builder(builder: (context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text('Adaptive Button Example'),
          ),
          floatingActionButton: Column(
            mainAxisSize: MainAxisSize.min,
            crossAxisAlignment: CrossAxisAlignment.end,
            children: [
              FloatingActionButton.extended(
                onPressed: () {
                  setState(() {
                    isDisabled = !isDisabled;
                  });
                },
                label: Text(isDisabled ? '启用' : '禁用'),
              ),
              const SizedBox(height: 16),
              // 切换 Material 2 和 Material 3
              FloatingActionButton.extended(
                onPressed: () {
                  setState(() {
                    useMaterial3 = !useMaterial3;
                  });
                },
                label: Text(useMaterial3 ? '切换到 Material 2' : '切换到 Material 3'),
              ),
              const SizedBox(height: 16),
              FloatingActionButton.extended(
                onPressed: () {
                  setState(() {
                    overridePlatform = overridePlatform == TargetPlatform.iOS
                        ? null
                        : TargetPlatform.iOS;
                  });
                },
                label: Text(
                    '切换到 ${overridePlatform == TargetPlatform.iOS ? 'Android' : 'iOS'}'),
              ),
            ],
          ),
          body: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 16.0),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: [
                FilledButton(
                  onPressed: isDisabled ? null : () {},
                  child: const Text('填充按钮'),
                ).adaptive(context),
                const SizedBox(height: 16),
                FilledButton.tonal(
                  onPressed: isDisabled ? null : () {},
                  child: const Text('填充按钮(调色板)'),
                ).adaptive(context),
                const SizedBox(height: 16),
                OutlinedButton(
                  onPressed: isDisabled ? null : () {},
                  child: const Text('边框按钮'),
                ).adaptive(context),
                const SizedBox(height: 16),
                TextButton(
                  onPressed: isDisabled ? null : () {},
                  child: const Text('文本按钮'),
                ).adaptive(context),
                const SizedBox(height: 16),
                ElevatedButton(
                  onPressed: isDisabled ? null : () {},
                  child: const Text('提升按钮'),
                ).adaptive(context),
              ],
            ),
          ),
        );
      }),
    );
  }
}

更多关于Flutter平台自适应按钮插件platform_adaptive_buttons的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter平台自适应按钮插件platform_adaptive_buttons的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


platform_adaptive_buttons 是一个 Flutter 插件,旨在帮助开发者创建跨平台的自适应按钮。它可以根据运行平台(iOS 或 Android)自动调整按钮的外观和行为,使其符合各自平台的 UI 设计规范。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 platform_adaptive_buttons 依赖:

dependencies:
  flutter:
    sdk: flutter
  platform_adaptive_buttons: ^1.0.0  # 请使用最新版本

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

使用插件

platform_adaptive_buttons 提供了多个自适应按钮组件,例如 PlatformAdaptiveButtonPlatformAdaptiveTextButtonPlatformAdaptiveOutlinedButton 等。这些组件会根据运行平台自动调整样式。

1. PlatformAdaptiveButton

PlatformAdaptiveButton 是一个自适应按钮,它在 iOS 上表现为 CupertinoButton,在 Android 上表现为 ElevatedButton

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Platform Adaptive Buttons'),
        ),
        body: Center(
          child: PlatformAdaptiveButton(
            onPressed: () {
              print('Button Pressed');
            },
            child: Text('Click Me'),
          ),
        ),
      ),
    );
  }
}

void main() => runApp(MyApp());

2. PlatformAdaptiveTextButton

PlatformAdaptiveTextButton 是一个自适应文本按钮,它在 iOS 上表现为 CupertinoButton,在 Android 上表现为 TextButton

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Platform Adaptive Buttons'),
        ),
        body: Center(
          child: PlatformAdaptiveTextButton(
            onPressed: () {
              print('Text Button Pressed');
            },
            child: Text('Click Me'),
          ),
        ),
      ),
    );
  }
}

void main() => runApp(MyApp());

3. PlatformAdaptiveOutlinedButton

PlatformAdaptiveOutlinedButton 是一个自适应轮廓按钮,它在 iOS 上表现为 CupertinoButton,在 Android 上表现为 OutlinedButton

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Platform Adaptive Buttons'),
        ),
        body: Center(
          child: PlatformAdaptiveOutlinedButton(
            onPressed: () {
              print('Outlined Button Pressed');
            },
            child: Text('Click Me'),
          ),
        ),
      ),
    );
  }
}

void main() => runApp(MyApp());

自定义样式

你可以通过传递额外的参数来进一步自定义按钮的样式。例如,PlatformAdaptiveButton 可以接受 colorpaddingshape 等参数。

PlatformAdaptiveButton(
  onPressed: () {
    print('Custom Button Pressed');
  },
  child: Text('Click Me'),
  color: Colors.blue,
  padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
  shape: RoundedRectangleBorder(
    borderRadius: BorderRadius.circular(8),
  ),
);
回到顶部