import 'dart:math'; import 'package:flutter_windmill/views/windmill.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:record/record.dart'; import 'package:flutter/material.dart'; class HomePage extends StatefulWidget { const HomePage({super.key}); @override State createState() => _HomePageState(); } class _HomePageState extends State { final Record record = Record(); double radius = 0; // 旋转角度 @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( children: [ Text( "小风车", style: TextStyle(fontSize: 18), ), Text("用嘴巴吹小风车,用力吹转的越快!"), SizedBox( height: 300, width: 100, child: CustomPaint( size: const Size(100, 300), painter: Windmill( radians: radius, ), ), ), ], ), ), ); } @override void initState() { super.initState(); startRecord(); } @override void dispose() { super.dispose(); stopRecord(); } void startRecord() async { bool hasPermission = await record.hasPermission(); if (hasPermission) { await record.start(); record ..onStateChanged().listen((event) { // logger.v(event.toString()); }) ..onAmplitudeChanged(const Duration(milliseconds: 200)).listen((event) { double scale = 1 / event.current; final r = (scale * 0.1 * 2 * pi).abs(); radius += r; radius = radius > (2 * pi) ? radius - (2 * pi) : radius; // logger.v(radius.toString()); if (mounted) { setState(() {}); } }); } else { Fluttertoast.showToast(msg: '无录音权限'); } } void stopRecord() async { if (await record.isRecording()) record.dispose(); } }