Как я могу создать функцию, которая произносит слово при нажатии? - PullRequest
0 голосов
/ 07 марта 2020

У меня есть это приложение для детей со словарем, и я хотел бы знать, как я могу создать функцию, которая произносит слово, написанное на английском языке sh. Я видел, что у Google есть API переводчика Google, но не смог найти информацию о том, как его использовать. Ребята, вы знаете, как мне этого добиться?

class AnimalsScreen extends StatelessWidget {

final DocumentSnapshot animals;

AnimalsScreen(this.animals);

@override
Widget build(BuildContext context) {
return Column(
  children: <Widget>[
    Padding(
      padding: const EdgeInsets.all(10.0),
      child: Card(
        elevation: 7.0,
        shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(50)
        ),
        child: Column(
          children: <Widget>[
            Container(
                height: 350.0,
                width: 350.0,
                decoration: BoxDecoration(
                    image: DecorationImage(
                        image: NetworkImage(animals.data["image"]
                        ),
                        fit: BoxFit.fill),
                    borderRadius: BorderRadius.only(
                        topLeft: Radius.circular(50),
                        topRight: Radius.circular(50)))
            ),
            Container(
              height: 70.0,
              width: 300.0,
              child: Padding(
                  padding: const EdgeInsets.all(2.0),
                  child: Center(
                    child: AutoSizeText(animals.data["name"],
                      style: TextStyle(
                          fontFamily: 'Twiddlestix',
                          fontSize: 25,
                          fontWeight: FontWeight.bold),
                      textAlign: TextAlign.center,
                      minFontSize: 15,
                    ),
                  )
              ),


            ),

          ],

        ),
      ),
    ),

    ],
  );
 }
}

this is the word that would be pronnounced

Ответы [ 2 ]

0 голосов
/ 07 марта 2020

Просто посмотрите на этот пример, который я сделал, используя ваш пользовательский интерфейс. Я только что передал ему строку * stati c. Существует плагин с именем flutter_tts, может быть, это может работать для вас. Просто проверьте пример:

Ссылка для плагина: https://pub.dev/packages/flutter_tts

import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/material.dart';
import 'package:flutter_tts/flutter_tts.dart';

void main() => runApp(ApiCalling());

class ApiCalling extends StatefulWidget {
  @override
  _ApiCallingState createState() => _ApiCallingState();
}

enum TtsState { playing, stopped }

class _ApiCallingState extends State<ApiCalling> {
  bool showLoader = false;
  FlutterTts flutterTts;
  TtsState ttsState = TtsState.stopped;
  String _newVoiceText = 'CAT';
  double volume = 0.5;
  double pitch = 1.0;
  double rate = 0.5;

  @override
  void initState() {
    super.initState();
    flutterTts = FlutterTts();
    initSpeak();
  }

  initSpeak() {
    flutterTts.setStartHandler(() {
      setState(() {
        ttsState = TtsState.playing;
      });
    });

    flutterTts.setCompletionHandler(() {
      setState(() {
        ttsState = TtsState.stopped;
      });
      print('Speaking End');
    });

    flutterTts.setErrorHandler((msg) {
      setState(() {
        ttsState = TtsState.stopped;
      });
    });
  }

  @override
  void dispose() {
    super.dispose();
    flutterTts.stop();
  }

  Future _speak() async {
    await flutterTts.setVolume(volume);
    await flutterTts.setSpeechRate(rate);
    await flutterTts.setPitch(pitch);

    if (_newVoiceText != null) {
      if (_newVoiceText.isNotEmpty) {
        var result = await flutterTts.speak(_newVoiceText);
        if (result == 1) setState(() => ttsState = TtsState.playing);
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.all(10.0),
                child: GestureDetector(
                  onTap: () {
                    _speak();
                  },
                  child: Card(
                    elevation: 7.0,
                    shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(50)),
                    child: Column(
                      children: <Widget>[
                        Container(
                            height: 350.0,
                            width: 350.0,
                            decoration: BoxDecoration(
                                image: DecorationImage(
                                    image: AssetImage(
                                      'images/cat.jpg',
                                    ),
                                    fit: BoxFit.fill),
                                borderRadius: BorderRadius.only(
                                    topLeft: Radius.circular(50),
                                    topRight: Radius.circular(50)))),
                        Container(
                          height: 70.0,
                          width: 300.0,
                          child: Padding(
                              padding: const EdgeInsets.all(2.0),
                              child: Center(
                                child: AutoSizeText(
                                  'CAT',
                                  style: TextStyle(
                                      fontFamily: 'Twiddlestix',
                                      fontSize: 25,
                                      fontWeight: FontWeight.bold),
                                  textAlign: TextAlign.center,
                                  minFontSize: 15,
                                ),
                              )),
                        ),
                      ],
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Дайте мне знать, если он работает.

0 голосов
/ 07 марта 2020

Вы можете попробовать этот пакет, https://pub.dev/packages/text_to_speech_api или поискать любой другой текст в речь https://pub.dev/flutter/packages?q=text+to+speech. Я не пробовал ни один из них, но, похоже, работает. Надеюсь, это поможет!

...