riva_flutter 1.0.7 copy "riva_flutter: ^1.0.7" to clipboard
riva_flutter: ^1.0.7 copied to clipboard

The library shows device-specific speech recognition and speech-to-text conversion capabilities with Riva technology.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:model_viewer_plus/model_viewer_plus.dart';
import 'package:provider/provider.dart';
import 'package:riva_flutter/riva_shelf.dart';

import 'audio_model.dart';

void main() async {
  await FRivaManager.initSdk(host: '', languageTTS: LanguageSupport.vietnamese, voiceName: "huyennguyen");
  runApp(MultiProvider(
    providers: [ChangeNotifierProvider(create: (context) => AudioModel())],
    child: const MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Riva Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
      ),
      body: Center(
        child: Stack(children: [
          Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Consumer<AudioModel>(
                builder: (BuildContext context, AudioModel value, Widget? child) {
                  return Stack(
                    alignment: Alignment.bottomRight,
                    children: [
                      Container(
                          decoration: BoxDecoration(
                              borderRadius: BorderRadius.circular(8), color: Colors.lightBlueAccent.withAlpha(100)),
                          padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12),
                          margin: const EdgeInsets.all(16),
                          height: 150,
                          width: double.infinity,
                          child: SingleChildScrollView(child: Text(value.resultRecord))),
                      Padding(
                        padding: const EdgeInsets.all(8),
                        child: IconButton(onPressed: _startSpeak, icon: const Icon(Icons.volume_up_rounded)),
                      )
                    ],
                  );
                },
              ),
              Consumer<AudioModel>(
                builder: (BuildContext context, AudioModel value, Widget? child) {
                  return Center(
                    child: value.isRecording
                        ? const Text('Loading')
                        : TextButton(
                            onPressed: _startRecord,
                            style: ButtonStyle(
                              shape: MaterialStatePropertyAll(RoundedRectangleBorder(
                                  borderRadius: BorderRadius.circular(8),
                                  side: const BorderSide(color: Colors.lightBlue))),
                              minimumSize: const MaterialStatePropertyAll(Size(double.minPositive, 100)),
                              backgroundColor: const MaterialStatePropertyAll(Colors.lightBlue),
                            ),
                            child: const Text('Start record', style: TextStyle(color: Colors.white)),
                          ),
                  );
                },
              ),
            ],
          ),
        ]),
      ),
    );
  }

  void _startRecord() {
    FRivaManager.startSTT(
        onStart: () {
          context.read<AudioModel>().isRecording = true;
        },
        onSpeeching: (textSpeeching) {},
        onSuccess: (textRecognized) {
          context.read<AudioModel>().resultRecord = textRecognized;
          context.read<AudioModel>().isRecording = false;
        },
        onError: (error) {
          context.read<AudioModel>().resultRecord = error;
          context.read<AudioModel>().isRecording = false;
        },
        onComplete: () {
          context.read<AudioModel>().isRecording = false;
        });
  }

  bool _toggleSpeak = true;

  void _startSpeak() {
    var textOrigin = context.read<AudioModel>().resultRecord;
    // var textOrigin = 'Hiện tại đối tác đã up lên server test, tuy nhiên họ bảo nếu làm auto login sẽ không kịp thời gian, hiện tại đang để login thủ công trong game luôn. Tuy nhiên là nó lại bị lỗi này khi login bằng facebook thì có cách nào khắc phục đc k?';

    if (_toggleSpeak) {
      FRivaManager.startTTS(textOrigin: textOrigin);
    } else {
      FRivaManager.stopTTS();
    }
    _toggleSpeak = !_toggleSpeak;
  }
}
3
likes
85
points
1
downloads

Publisher

unverified uploader

Weekly Downloads

The library shows device-specific speech recognition and speech-to-text conversion capabilities with Riva technology.

Homepage
Repository (GitLab)

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

audio_session, cupertino_icons, flutter, flutter_sound, grpc, lottie, model_viewer_plus, protobuf, record

More

Packages that depend on riva_flutter