当前位置:网站首页>Fluent implements a loadingbutton with loading animation
Fluent implements a loadingbutton with loading animation
2022-07-06 05:10:00 【Bright as water】
Preface
Today I share a button that loads animation again , I hope I can help you , Just replace the loading icon . The renderings are as follows :
One 、loading Component code
import "dart:math" as math;
import 'package:flutter/material.dart';
class HBLoadingButton extends StatefulWidget {
bool loading;
String title;
Function callback;
bool isActive; // Is it active
// Button height
double? height = 40.0;
HBLoadingButton(this.loading, this.title, this.callback, {this.height, this.isActive = true});
@override
_HBLoadingButtonState createState() => _HBLoadingButtonState();
}
class _HBLoadingButtonState extends State<HBLoadingButton> with SingleTickerProviderStateMixin {
AnimationController? _controller;
@override
void initState() {
_controller = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 100 * 15),
)..repeat();
}
@override
void dispose() {
_controller?.dispose();
super.dispose();
}
Widget _btn() {
return Container(
decoration: widget.isActive
? BoxDecoration(
color: Color(0xFF006CFF),
borderRadius: BorderRadius.circular(8.0),
)
: BoxDecoration(
color: Color(0x1F0C0C1C),
borderRadius: BorderRadius.circular(8.0),
),
height: widget.height,
child: TextButton(
style: ButtonStyle(
foregroundColor: MaterialStateProperty.all(Color(0xFF006CFF)),
),
child: Text(
widget.title,
style: widget.isActive
? const TextStyle(fontSize: 16.0, color: Color(0xFFFFFFFF))
: const TextStyle(fontSize: 16.0, color: Color(0x800C0C1C)),
),
onPressed: () {
widget.callback();
},
),
);
}
Widget _loadingBtn() {
Widget icon = Image.asset(
"lib/common/assets/ic_loading_more_white.png",
width: 16,
height: 16,
);
if (_controller != null) {
icon = AnimatedBuilder(
animation: _controller!,
builder: (_, Widget? child) {
return Transform.rotate(
angle: _controller!.value * 2 * math.pi,
child: child,
);
},
child: icon,
);
}
return Container(
decoration: BoxDecoration(
color: Color(0xFF006CFF),
borderRadius: BorderRadius.circular(8.0),
),
height: widget.height,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
" Loading ...",
style: TextStyle(color: Color(0xFFFFFFFF), fontSize: 14.0),
),
Container(
margin: const EdgeInsets.only(left: 6.0),
child: icon,
),
],
),
);
}
@override
Widget build(BuildContext context) {
return widget.loading ? _loadingBtn() : _btn();
}
}
Two 、 Use the code
import 'package:flutter/material.dart';
import 'package:flutter_hotsmeta/module/beginner_guide/page/hb_loading_button.dart';
class HBLoadingPage extends StatefulWidget {
const HBLoadingPage({Key? key}) : super(key: key);
@override
State<HBLoadingPage> createState() => _HBLoadingPageState();
}
class _HBLoadingPageState extends State<HBLoadingPage> {
bool requesting = false;
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: Text(" Test load button "),
),
body: _buildMainWidget(context),
);
}
_buildMainWidget(BuildContext context) {
return Center(
child: SizedBox(
width: 291.0,
height: 40.0,
child: HBLoadingButton(
requesting,
" determine ",
_beforeConfirm,
),
),
);
}
_beforeConfirm() {
setState(() {
requesting = true;
});
Future.delayed(const Duration(milliseconds: 5000), () {
setState(() {
requesting = false;
});
});
}
}
END.
边栏推荐
- Nacos TC setup of highly available Seata (02)
- Fuzzy -- basic application method of AFL
- Mongodb basic knowledge summary
- The web project imported the MySQL driver jar package but failed to load it into the driver
- [leetcode16] the sum of the nearest three numbers (double pointer)
- Ad20 is set with through-hole direct connection copper sheet, and the bonding pad is cross connected
- Rce code and Command Execution Vulnerability
- Drive development - the first helloddk
- 2021 RoboCom 世界机器人开发者大赛-本科组(复赛)
- Summary of redis AOF and RDB knowledge points
猜你喜欢
Nacos - TC Construction of High available seata (02)
SQL injection vulnerability (MSSQL injection)
Postman管理测试用例
Application of Flody
Can the feelings of Xi'an version of "Coca Cola" and Bingfeng beverage rush for IPO continue?
Summary of redis basic knowledge points
yolov5 tensorrt加速
Idea one key guide package
Postman断言
Postman Association
随机推荐
ORM aggregate query and native database operation
C# AES对字符串进行加密
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
[NOIP2009 普及组] 分数线划定
Biscuits (examination version)
Fuzzy -- basic application method of AFL
驱动开发——HelloWDM驱动
Huawei equipment is configured with OSPF and BFD linkage
Mongodb basic knowledge summary
Please wait while Jenkins is getting ready to work
Acwing week 58
The IPO of mesk Electronics was terminated: Henan assets, which was once intended to raise 800 million yuan, was a shareholder
2021 robocom world robot developer competition - undergraduate group (semi-finals)
Some common skills on unity inspector are generally used for editor extension or others
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
MySQL time processing
[buuctf.reverse] 159_[watevrCTF 2019]Watshell
Three.js学习-光照和阴影(了解向)
比尔·盖茨晒18岁个人简历,48年前期望年薪1.2万美元
Idea one key guide package