第十回:如何使用 Button Widget

文章介绍了Flutter中的三种常用ButtonWidget——OutlinedButton,ElevatedButton和TextButton,包括它们的概念、使用方法和示例代码。这三种Button都有onPressed和child参数,分别用于设置按钮事件和显示内容,不同之处在于外观设计。提供的代码示例展示了如何在MaterialApp中使用这些Button。


我们在上一章回中介绍了CircleAvatar Widget,本章回中将介绍 Button这种Widget,闲话休提,让我们一起Talk Flutter吧。

概念介绍

关于Button相信大家都很熟悉,也就是我们常用的按钮。用户按下按钮后程序会触发某种事件。在Flutter中提供子多种Button Widget,我们选取常用的Button来给大家做介绍,它们是OutlinedButton,ElevatedButtonTextButton

使用方法

这三种Button都提供了onPressedchild两个命名参数,通过这这两个参数来给Button配置按钮被按下时的事件和按钮上显示的内容。这是它们的相同点,它们的
不同点在于Button的显示形态,通俗点讲就是Button的外观。详细如下:

  • OutlinedButton 它自带一个边框,边框中心默认为白色,Button上显示的文字默认为蓝色,我们称它为带边框的Button;
  • ElevatedButton 它自带背景,整个Button用默认的蓝色填充,Button上显示的文字默认为白色,我们称它为带填充的Button;
  • TextButton 它没有边框也没有填充,整个Button的背景是默认的白色,Button上的文字颜色默认为蓝色,我们称它为普通Button;

示例代码

   return MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(primaryColor: Colors.blue),

        // Navigator.push(context, SecondRouter,),
        home: Scaffold(
            appBar: AppBar(
              title: const Text("Title of Hello App"),
            ),
            body: Column(
              children: [
                titleSection,
                TextButton(
                  onPressed: () {},
                  child: const Text(
                    "This is Test Button",
                    style: TextStyle(
                      color: Colors.black87,
                      fontSize: 24,
                    ),
                  ),
                ),
                OutlinedButton(
                  onPressed: () {},
                  child: const Text("OutLineButton"),
                ),
                ElevatedButton(
                  onPressed: () {},
                  child: Text("ElevatedButton"),
                ),
              ],
            )
            ));

在上面的代码中,我们把这三个Button放到了MaterialApp的body中,其它的代码省略不写。编译并且运行该程序可以在屏幕上看到三个Button从上到下依次排列,我们
在这里就不演示程序的运行效果了,建议大家自己动手去实践。

注意:在上面的代码中没有给Button添加具体的事件内容,而是使用了空的方法给onPressed参数赋值,因此按下Button后程序不会触发事件,不过可以看到Button被点击时的动态效果,这个效果是Button自带的。

看官们,关于Button Widget的内容就介绍到这里,欢迎大家在评论区交流与讨论!

#ifndef MYPTHREAD_H #define MYPTHREAD_H #include <QObject> #include<QThread> #include<QDateTime> #include<QDebug> class mypthread : public QThread { Q_OBJECT public: explicit mypthread(QObject *parent = nullptr); signals: void mySignal(int n); public slots: void run(); void setFlag(int f); private: int flag; }; #endif // MYPTHREAD_H #include "mypthread.h" mypthread::mypthread(QObject *parent) : QThread(parent) { flag = 1; } void mypthread::setFlag(int f) { flag = f; } void mypthread::run() { while (flag) { QString currentTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); qDebug() << "线程中打印时间:" << currentTime; } } #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QThread> #include<QPushButton> #include<QLabel> #include"mypthread.h" namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = nullptr); ~Widget(); private: Ui::Widget *ui; mypthread *thread1; public slots: void button1clicked(); }; #endif // WIDGET_H #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); this->resize(400,400); thread1=new mypthread(this); QPushButton *button1=new QPushButton(this); button1->setText("登录"); button1->move(100,200); QPushButton *button2=new QPushButton(this); button2->setText("退出"); button2->move(300,200); QLabel*label1=new QLabel(this); label1->move(0,0); label1->resize(400,100); connect(button1,&QPushButton::clicked,thread1,&Widget::button1clicked); } Widget::~Widget() { delete ui; } void Widget::button1clicked() { thread1->start(); }
最新发布
09-16
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="Base.Widget.AppCompat.Spinner.Underlined" parent="@android:style/Widget.Material.Spinner.Underlined" /> <style name="Base.Theme.AppCompat" parent="@style/Base.V23.Theme.AppCompat" /> <style name="Base.Theme.AppCompat.Light" parent="@style/Base.V23.Theme.AppCompat.Light" /> <style name="Base.Widget.AppCompat.Button.Borderless.Colored" parent="@android:style/Widget.Material.Button.Borderless.Colored" /> <style name="Base.TextAppearance.AppCompat.Widget.ActionBar.Menu" parent="@android:style/TextAppearance.Material.Widget.ActionBar.Menu" /> <style name="Base.TextAppearance.AppCompat.Widget.Button.Inverse" parent="@android:style/WindowTitle" /> <style name="Base.Widget.AppCompat.Button.Colored" parent="@android:style/WindowTitleBackground" /> <style name="Base.Widget.AppCompat.RatingBar.Indicator" parent="@android:style/Widget.Material.RatingBar.Indicator" /> <style name="Base.Widget.AppCompat.RatingBar.Small" parent="@android:style/Widget.Material.RatingBar.Small" /> <style name="Base.V23.Theme.AppCompat" parent="@style/Base.V22.Theme.AppCompat"> <item name="actionBarItemBackground">?android:actionBarItemBackground</item> <item name="actionMenuTextAppearance">?android:actionMenuTextAppearance</item> <item name="actionMenuTextColor">?android:actionMenuTextColor</item> <item name="controlBackground">@drawable/abc_control_background_material</item> <item name="ratingBarStyleIndicator">?android:ratingBarStyleIndicator</item> <item name="ratingBarStyleSmall">?android:ratingBarStyleSmall</item> </style> <style name="Base.V23.Theme.AppCompat.Light" parent="@style/Base.V22.Theme.AppCompat.Light"> <item name="actionBarItemBackground">?android:actionBarItemBackground</item> <item name="actionMenuTextAppearance">?android:actionMenuTextAppearance</item> <item name="actionMenuTextColor">?android:actionMenuTextColor</item> <item name="controlBackground">@drawable/abc_control_background_material</item> <item name="ratingBarStyleIndicator">?android:ratingBarStyleIndicator</item> <item name="ratingBarStyleSmall">?android:ratingBarStyleSmall</item> </style> </resources>
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值