Flutter带进度边框按钮插件progress_border_button的使用
Flutter 带进度边框按钮插件 progress_border_button
的使用
概述
progress_border_button
是一个用于创建具有进度条边框按钮的 Flutter 包。它支持矩形和圆角矩形的边框样式。
使用方法
该插件非常简单易用,以下是一个完整的示例,展示了如何在 Flutter 应用中使用 progress_border_button
。
完整示例代码
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:progress_border_button/progress_border_button.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final int _duration = 10; // 进度持续时间(秒)
late GlobalKey _progressButtonKey;
[@override](/user/override)
void initState() {
_progressButtonKey = GlobalKey();
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ProgressBorderButton(
key: _progressButtonKey,
duration: _duration, // 设置进度持续时间
size: Size(200, 100), // 设置按钮大小
hasRadius: true, // 是否启用圆角
borderColor: const Color(0xFFFEDBFD), // 设置边框颜色
onTimeEnd: () {
print('on time end'); // 进度结束时的回调
},
childBuild: (context, double progress) {
int remainTime = _duration - (_duration * progress).toInt(); // 计算剩余时间
return Container(
width: 104,
height: 48,
alignment: AlignmentDirectional.center,
child: GestureDetector(
onTap: () {
print('tap button'); // 点击按钮时的回调
},
child: Container(
width: 94,
height: 40,
alignment: AlignmentDirectional.center,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('images/btn_action.png'), // 背景图片
fit: BoxFit.fill,
),
borderRadius: BorderRadius.circular(20), // 圆角半径
border: Border.all(color: const Color(0xFFFEDBFD), width: 3), // 边框宽度和颜色
color: const Color(0xFFEEBAFF), // 背景色
),
child: Text('${max(remainTime, 0)}', // 显示剩余时间
style: TextStyle(color: Colors.white, fontSize: 20, fontWeight: FontWeight.w500)),
),
),
);
},
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _start, // 启动进度按钮
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
void _start() {
ProgressBorderButtonState progressBorderButtonState = _progressButtonKey.currentState as ProgressBorderButtonState;
progressBorderButtonState.start(); // 开始进度
}
}
更多关于Flutter带进度边框按钮插件progress_border_button的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter带进度边框按钮插件progress_border_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,我可以为你提供一个关于如何在Flutter项目中使用progress_border_button
插件的代码示例。这个插件允许你创建一个带有进度边框的按钮,这在加载数据或执行长时间操作时非常有用。
首先,你需要在你的pubspec.yaml
文件中添加progress_border_button
依赖:
dependencies:
flutter:
sdk: flutter
progress_border_button: ^最新版本号 # 请替换为当前最新版本号
然后运行flutter pub get
来安装依赖。
接下来是一个完整的示例代码,展示了如何使用ProgressBorderButton
:
import 'package:flutter/material.dart';
import 'package:progress_border_button/progress_border_button.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool isLoading = false;
void handleButtonClick() async {
setState(() {
isLoading = true;
});
// 模拟一个异步操作,比如网络请求
await Future.delayed(Duration(seconds: 3));
setState(() {
isLoading = false;
});
// 操作完成后可以显示一个SnackBar或者做其他事情
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('操作完成!')));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Progress Border Button Demo'),
),
body: Center(
child: ProgressBorderButton(
width: 150,
height: 50,
borderRadius: 25,
buttonColor: Colors.blue,
progressColor: Colors.blueAccent,
loading: isLoading,
child: Text(
isLoading ? '加载中...' : '点击我',
style: TextStyle(color: Colors.white),
),
onPressed: () {
if (!isLoading) {
handleButtonClick();
}
},
),
),
);
}
}
在这个示例中:
- 我们定义了一个
MyHomePage
,它是一个有状态的Widget,用于管理按钮的加载状态。 handleButtonClick
方法模拟了一个异步操作(比如网络请求),并在操作完成后更新状态。ProgressBorderButton
被用来创建一个带进度边框的按钮。通过设置loading
属性来控制按钮的加载状态。- 当按钮处于加载状态时,显示“加载中…”文本;否则显示“点击我”文本。
onPressed
回调只有在按钮不处于加载状态时才会被触发。
这个示例展示了如何使用progress_border_button
插件来创建一个带有进度边框的按钮,并在异步操作完成时更新UI。希望这对你有所帮助!