Flutter iOS风格文本按钮插件cupertino_text_button的使用

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

Flutter iOS风格文本按钮插件cupertino_text_button的使用

一个看起来像Cupertino文本按钮的按钮!

示例

文本按钮

可以这样创建一个简单的文本按钮:

CupertinoTextButton(
    text: 'Apply',
    style: const TextStyle(fontSize: 20),
    onTap: () {
        // 在这里处理你的文本操作。
    },
),

对于文本按钮,你可以配置以下属性:

属性 类型 描述
text String 按钮标题
style TextStyle 标题的文本样式
textAlign TextAlign 按钮的文本对齐方式
textDirection TextDirection 文本渲染的方向
textOverflow TextOverflow 文本溢出处理
softWrap bool 是否在软换行处断行

图标按钮

可以这样创建一个简单的图标按钮:

CupertinoTextButton.icon(
    icon: Icons.chevron_left,
    size: 30,
    onTap: () {
        // 在这里处理你的图标操作。
    },
),

对于图标按钮,你可以配置以下属性:

属性 类型 描述
icon IconData 要显示的图标
size double 图标的大小
textDirection TextDirection 图标渲染的方向

公共属性

无论你创建的是文本按钮还是图标按钮,都可以指定这些属性:

属性 类型 描述
onTap Function 按钮点击事件处理器
onLongPress Function 长按事件处理器
color Color 正常状态下的前景色(未按下)
pressedColor Color 按下状态下的前景色
forwardDuration Duration 从颜色到按下颜色的动画时长
backwardDuration Duration 从按下颜色回到正常颜色的动画时长
curve Curve 动画曲线

主题

所有这些共享属性(除了onTaponLongPress),都可以通过CupertinoTextButtonTheme进行配置。你可以将它包裹在你的应用或其他任何父组件上,例如:

CupertinoTextButtonTheme(
    color: Colors.white,
    pressedColor: Colors.orange,
    /* forwardDuration, backwardDuration 和 curve 也可以在这里配置。 */
    child: Row(
        children: [
            CupertinoTextButton(
                text: 'First Option',
                style: const TextStyle(fontSize: 20),
                onTap: () {
                    // 在这里处理你的第一个操作。
                },
            ),
            CupertinoTextButton(
                text: 'Second Option',
                style: const TextStyle(fontSize: 20),
                onTap: () {
                    // 在这里处理你的第二个操作。
                },
            ),
        ],
    ),
)

这两个文本按钮将具有相同的颜色!

如果这些属性在按钮中未指定且未提供主题,则会使用默认值:

属性 默认值
color Colors.black
pressedColor Theme.primaryColor
forwardDuration const Duration(milliseconds: 20)
backwardDuration const Duration(milliseconds: 200)
curve Curves.fastOutSlowIn
  • Theme — 默认的Flutter主题。

完整示例

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

import 'package:cupertino_text_button/cupertino_text_button.dart';

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

const title = 'Cupertino Text Button Example';

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: title,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _noConfigurationCounter = 0;
  int _withoutThemeCounter = 0;
  int _withThemeCounter = 0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Padding(
        padding: const EdgeInsets.only(left: 20.0),
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                'Button without any configuration:',
                style: const TextStyle(fontSize: 17),
              ),
              CupertinoTextButton(
                text: 'You pressed this button $_noConfigurationCounter times',
                style: const TextStyle(fontSize: 20),
                onTap: () {
                  setState(() {
                    _noConfigurationCounter++;
                  });
                },
              ),
              const SizedBox(height: 40),
              Text(
                'Button without theme:',
                style: const TextStyle(fontSize: 17),
              ),
              CupertinoTextButton(
                color: Colors.purple,
                pressedColor: Colors.orange,
                text: 'You pressed this button $_withoutThemeCounter times',
                style: const TextStyle(fontSize: 20),
                onTap: () {
                  setState(() {
                    _withoutThemeCounter++;
                  });
                },
              ),
              const SizedBox(height: 40),
              Text(
                'Button with theme:',
                style: const TextStyle(fontSize: 17),
              ),
              CupertinoTextButtonTheme(
                color: Colors.red,
                pressedColor: Colors.lime,
                forwardDuration: Duration(seconds: 1),
                child: CupertinoTextButton(
                  text: 'You pressed this button $_withThemeCounter times',
                  style: const TextStyle(fontSize: 20),
                  onTap: () {
                    setState(() {
                      _withThemeCounter++;
                    });
                  },
                ),
              ),
              const SizedBox(height: 40),
              Text(
                'Icon buttons:',
                style: const TextStyle(fontSize: 17),
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  CupertinoTextButton.icon(
                    icon: Icons.add,
                    size: 50,
                    onTap: () {
                      debugPrint('First Icon button tapped!');
                    },
                  ),
                  const SizedBox(width: 20),
                  CupertinoTextButton.icon(
                    icon: CupertinoIcons.add_circled,
                    size: 50,
                    onTap: () {
                      debugPrint('Second Icon button tapped!');
                    },
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter iOS风格文本按钮插件cupertino_text_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter iOS风格文本按钮插件cupertino_text_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter中使用cupertino_text_button插件(实际上在Flutter的标准库中已经包含了Cupertino风格的文本按钮,无需额外插件)的示例代码。我们将创建一个简单的Flutter应用,展示如何使用CupertinoTextButton来实现iOS风格的文本按钮。

首先,确保你的Flutter环境已经设置好,并且你的pubspec.yaml文件中不需要额外的依赖(因为CupertinoTextButton是Flutter SDK的一部分)。

示例代码

main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      title: 'Cupertino Text Button Demo',
      theme: CupertinoThemeData(
        brightness: Brightness.light,
      ),
      home: CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          middle: Text('Cupertino Text Button Demo'),
        ),
        child: SafeArea(
          child: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                // 第一个 CupertinoTextButton
                CupertinoTextButton(
                  child: Text('Click Me'),
                  color: CupertinoColors.activeBlue,
                  onPressed: () {
                    // 按钮点击事件
                    _showAlert(context, 'Button 1 Clicked');
                  },
                ),
                SizedBox(height: 20),
                
                // 第二个 CupertinoTextButton,带禁用状态
                CupertinoTextButton(
                  child: Text('Disabled'),
                  color: CupertinoColors.inactiveGray,
                  onPressed: null, // 禁用按钮
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  void _showAlert(BuildContext context, String message) {
    CupertinoAlertDialog(
      title: Text('Alert'),
      content: Text(message),
      actions: <Widget>[
        CupertinoDialogAction(
          isDefaultAction: true,
          child: Text('OK'),
          onPressed: () {
            Navigator.of(context).pop();
          },
        ),
      ],
    ).show(context);
  }
}

解释

  1. CupertinoApp: 使用CupertinoApp作为应用的根组件,以启用Cupertino风格的主题。
  2. CupertinoPageScaffold: 提供iOS风格的页面结构,包括导航栏。
  3. CupertinoNavigationBar: iOS风格的导航栏。
  4. CupertinoTextButton: iOS风格的文本按钮。
    • child: 按钮显示的文本。
    • color: 按钮的颜色。
    • onPressed: 按钮点击时的回调。
  5. CupertinoAlertDialog: iOS风格的对话框,用于显示按钮点击后的提示信息。

运行应用

将上述代码保存为main.dart,然后在你的Flutter项目根目录下运行以下命令来启动应用:

flutter run

这个示例展示了如何在Flutter应用中创建和使用iOS风格的文本按钮,并处理按钮点击事件。希望这对你有所帮助!

回到顶部