Flutter 扫码应用:二维码展示和自动刷新
该项目使用 Flutter 开发了一个简单的扫码应用,包含以下功能:
项目结构
该项目包含以下目录:
- data: 暂无数据文件* ui: * qr_code.dart: 主页面,展示二维码和相关功能* service: * global.dart: 全局变量和方法* model: 暂无模型文件
代码示例
ui/qr_code.dartdartimport 'dart:async';
import 'package:dio/dio.dart';import 'package:flutter/material.dart';import 'package:muse_nepu_course/global.dart';import 'package:pretty_qr_code/pretty_qr_code.dart';import 'package:rive/rive.dart';import 'package:slide_countdown/slide_countdown.dart';
class QRCode extends StatefulWidget { @override _QRCodeState createState() => _QRCodeState();}
class _QRCodeState extends State { final streamDuration = StreamDuration(Duration(seconds: 50));
void initState() { super.initState(); Global().getqr(); }
String passtemp = '';
void refresh() { setState(() {}); }
@override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( backgroundColor: Global.home_currentcolor, //设置 actions: [ IconButton( icon: Icon(Icons.settings), onPressed: () { //弹窗一个文本框加上一个确认框 showDialog( context: context, builder: (context) { return AlertDialog( title: Text('修改你的一卡通密码
如果没有错误请不要修改'), content: TextField( onChanged: (value) { passtemp = value; }, ), actions: [ TextButton( child: Text('确认'), onPressed: () { Global.password = passtemp; Global.saveaccount(); Navigator.of(context).pop(); }, ) ], ); }); }, ), ], ), body: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('点击二维码可手动刷新
当前是' + Global.qrcode), Align( alignment: Alignment.topCenter, child: SlideCountdown( decoration: BoxDecoration( color: Global.home_currentcolor, borderRadius: BorderRadius.circular(10)), durationTitle: DurationTitle( days: '天', hours: '时', minutes: '分', seconds: '秒'), // This duration no effect if you customize stream duration streamDuration: streamDuration, onChanged: (Duration remaining) { print('剩余' + remaining.inSeconds.toString()); //这里可以获取到剩余时间 //如果剩余时间等于1,恢复倒计时为50s if (remaining.inSeconds <= 1) { streamDuration.change(Duration(seconds: 51)); Global().getqr().then((value) { setState(() {}); }); } }, ), ), Expanded( child: GestureDetector( onTap: () { print('被点击了'); Global().getqr().then((value) { streamDuration.change(Duration(seconds: 51)); setState(() {}); }); }, child: PrettyQr( typeNumber: 3, size: 200, data: Global.qrcodegetter(), errorCorrectLevel: QrErrorCorrectLevel.M, roundEdges: true, ), ), ), ], ), ), ); }}
service/global.dartdartimport 'dart:async';
import 'package:dio/dio.dart';import 'package:flutter/material.dart';
class Global { static String qrcode = ''; static String password = ''; static Color home_currentcolor = Colors.blue;
static Future getqr() async { // 获取二维码数据 // 这里需要根据具体需求进行修改 // 例如:从网络获取二维码数据 // try { // Dio dio = Dio(); // Response response = await dio.get('http://example.com/qrcode'); // qrcode = response.data['qrcode']; // } catch (e) { // print(e); // } }
static String qrcodegetter() { return qrcode; }
static void saveaccount() { // 保存账户信息 // 这里需要根据具体需求进行修改 // 例如:使用 SharedPreferences 或 Hive 等本地存储方案