当前位置:网站首页>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.
边栏推荐
- [leetcode16] the sum of the nearest three numbers (double pointer)
- 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
- win10电脑系统里的视频不显示缩略图
- 2021robocom robot developer competition (Preliminary)
- 从0到1建设智能灰度数据体系:以vivo游戏中心为例
- [mathematical modeling] differential equation -- sustainable development of fishing industry
- Postman断言
- 用StopWatch 统计代码耗时
- Flink kakfa data read and write to Hudi
- Fiddler installed the certificate, or prompted that the certificate is invalid
猜你喜欢
【OSPF 和 ISIS 在多路访问网络中对掩码的要求】
flutter 实现一个有加载动画的按钮(loadingButton)
RTP gb28181 document testing tool
Cve-2019-11043 (PHP Remote Code Execution Vulnerability)
pix2pix:使用条件对抗网络的图像到图像转换
Review of double pointer problems
Microblogging hot search stock selection strategy
The underlying structure of five data types in redis
nacos-高可用seata之TC搭建(02)
Yyds dry inventory SSH Remote Connection introduction
随机推荐
[noip2009 popularization group] score line delimitation
Fiddler installed the certificate, or prompted that the certificate is invalid
趋势前沿 | 达摩院语音 AI 最新技术大全
Acwing week 58
行业专网对比公网,优势在哪儿?能满足什么特定要求?
Vite configures the development environment and production environment
[mathematical modeling] differential equation -- sustainable development of fishing industry
内核判断i2c地址上是否挂载外设
Lepton 无损压缩原理及性能分析
【LGR-109】洛谷 5 月月赛 II & Windy Round 6
Flody的应用
2021 RoboCom 世界机器人开发者大赛-本科组(复赛)
Tetris
Supreme Court, judgment standard of divorce cases
Bill Gates posted his 18-year-old resume and expected an annual salary of $12000 48 years ago
CUDA11.1在线安装
Postman test report
集合详解之 Collection + 面试题
The IPO of mesk Electronics was terminated: Henan assets, which was once intended to raise 800 million yuan, was a shareholder
Biscuits (examination version)