如何在Flutter中实现类似Android的文字转语音按钮网格功能?
Flutter实现文字转语音网格按钮方案
当然可以!我帮你把Android里的文字转语音+网格按钮功能搬到Flutter里,下面是完整的实现步骤和代码:
1. 添加依赖
首先在你的pubspec.yaml文件中引入flutter_tts包(这是Flutter生态里常用的文字转语音插件):
dependencies: flutter: sdk: flutter flutter_tts: ^3.6.0 # 可以替换为最新版本
然后执行flutter pub get命令安装依赖。
2. 核心功能与布局实现
我们用StatefulWidget来管理TTS的生命周期,搭配GridView.count实现类似Android GridView的网格按钮布局,点击按钮即可触发文字朗读。
完整代码示例
import 'package:flutter/material.dart'; import 'package:flutter_tts/flutter_tts.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'TTS Grid Demo', theme: ThemeData(primarySwatch: Colors.blue), home: const TtsGridScreen(), ); } } class TtsGridScreen extends StatefulWidget { const TtsGridScreen({super.key}); @override State<TtsGridScreen> createState() => _TtsGridScreenState(); } class _TtsGridScreenState extends State<TtsGridScreen> { final FlutterTts _flutterTts = FlutterTts(); final List<String> _words = ["Flutter", "Dart", "React", "Java"]; bool _isTtsReady = false; @override void initState() { super.initState(); _initTextToSpeech(); } // 初始化TTS引擎 Future<void> _initTextToSpeech() async { await _flutterTts.setLanguage("en-US"); // 设置朗读语言为英文 await _flutterTts.setPitch(1.0); // 音调范围0.5-2.0,1.0为默认 await _flutterTts.setSpeechRate(0.6); // 语速范围0.1-2.0,数值越小越慢 setState(() { _isTtsReady = true; }); } // 触发朗读逻辑 Future<void> _readWord(String word) async { if (_isTtsReady) { await _flutterTts.speak(word); } } @override void dispose() { // 页面销毁时释放TTS资源,避免内存泄漏 _flutterTts.stop(); _flutterTts.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("文字转语音网格")), body: GridView.count( crossAxisCount: 2, // 每行显示2个按钮 padding: const EdgeInsets.all(16), crossAxisSpacing: 16, mainAxisSpacing: 16, children: _words.map((word) { return ElevatedButton( onPressed: () => _readWord(word), child: Text( word, style: const TextStyle(fontSize: 18), ), ); }).toList(), ), ); } }
额外说明
- 如果需要支持中文朗读,只需把
setLanguage的参数改为"zh-CN"即可 - 可以调整
crossAxisCount来修改每行的按钮数量,适配不同屏幕 - Android设备默认自带TTS引擎,若遇到无法朗读的情况,提醒用户检查系统TTS引擎是否正常
- 可以根据需求自定义按钮样式、朗读的音调/语速参数
内容的提问来源于stack exchange,提问作者Dev Ed




