flutter_ioe_sdk 1.0.0
flutter_ioe_sdk: ^1.0.0 copied to clipboard
Flutter ioe sdk
example/lib/main.dart
import 'package:audioplayers/audioplayers.dart';
import 'package:example/resources/app_dimens.dart';
import 'package:example/widgets/item_score_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_ioe_sdk/domain/model/reponse/stop_record_response_model.dart';
import 'package:flutter_ioe_sdk/manager/evaluate_pronunciation_record_callback.dart';
import 'package:flutter_ioe_sdk/manager/ftech_ioe_sdk_manager.dart';
import 'package:flutter_ioe_sdk/manager/init_sdk_callback.dart';
void main() {
FIOESdkManager.init();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: HomePage(),
);
}
}
class ButtonTestWidget extends StatelessWidget {
const ButtonTestWidget({super.key, required this.label, required this.onTapButton});
final String label;
final GestureTapCallback onTapButton;
@override
Widget build(BuildContext context) {
return InkWell(
onTap: onTapButton,
child: Ink(
color: Colors.black12,
padding: const EdgeInsets.symmetric(horizontal: AppDimens.dimen_16, vertical: AppDimens.dimen_8),
child: Text(label),
),
);
}
}
class HomePage extends HookWidget {
HomePage({super.key});
final AudioPlayer _audioPlayer = AudioPlayer();
@override
Widget build(BuildContext context) {
final stateRecord = useState(const StopRecordResponseModel());
final statusRecord = useState('');
FIOESdkManager.registerRecordingListener(IFtechRecordingCallback(
onStart: () {
statusRecord.value = 'Recording....';
stateRecord.value = const StopRecordResponseModel();
},
onRecording: () {},
onFail: (error) {
statusRecord.value = 'Fail: $error';
},
onComplete: (response) {
statusRecord.value = response.data?.minioLink ?? '';
stateRecord.value = response;
response.data?.scoreData?.wordsScoreDetail;
}));
return Scaffold(
appBar: AppBar(
backgroundColor: Theme
.of(context)
.colorScheme
.inversePrimary,
),
body: Stack(alignment: Alignment.center, children: [
Column(
children: <Widget>[
ButtonTestWidget(label: 'Click to Init', onTapButton:(){_initIOESdk(context);}),
const SizedBox(height: AppDimens.dimen_12),
ButtonTestWidget(label: 'Click to Start', onTapButton: _startRecord),
const SizedBox(height: AppDimens.dimen_12),
ButtonTestWidget(label: 'Click to Stop', onTapButton: _stopRecord),
const SizedBox(height: AppDimens.dimen_16),
Expanded(
child: Wrap(
alignment: WrapAlignment.center,
direction: Axis.horizontal,
children: _generateItemWord(stateRecord.value.data?.scoreData?.wordsScoreDetail),
)),
Expanded(
child: Column(
children: [
Wrap(
alignment: WrapAlignment.center,
direction: Axis.horizontal,
children: _generateItemIPAScore(stateRecord.value.data?.scoreData?.wordsScoreDetail),
),
const SizedBox(height: AppDimens.dimen_16),
ButtonTestWidget(label: 'Play', onTapButton: () {
_playAudioPronunciation(stateRecord.value.data?.minioLink);
})
],
)),
],
),
Align(child: Text(statusRecord.value))
]),
);
}
List<Widget> _generateItemIPAScore(List<WordsScoreDetail>? wordList) {
final listIpa = <PhonemesScoreDetail>[];
if (wordList == null || wordList.isEmpty) {
return [];
}
for (var word in wordList) {
word.phonemesScoreDetail?.forEach((ipa) {
listIpa.add(ipa);
});
}
return listIpa.map((itemIPA) => ItemScoreOfIPAPronunciation(ipaDetail: itemIPA)).toList();
}
List<Widget> _generateItemWord(List<WordsScoreDetail>? wordList) {
return wordList
?.map((word) =>
ItemScoreOfWordWidget(
wordsScore: word,
))
.toList() ??
[];
}
void _initIOESdk(BuildContext context) {
FIOESdkManager.initRecord(
'100067',
'0341311b733b965218182220a507a3bc',
InitSdkCallback(onSuccess: () {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
content: Text('init success'),
));
}, onError: (error) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text('init error $error'),
));
}));
}
void _startRecord() {
FIOESdkManager.startRecord(referenceText: 'start record', englishAccent: LanguageAccent.english);
}
void _stopRecord() {
FIOESdkManager.stopRecord();
}
void _playAudioPronunciation(String? urlSource) async {
if (urlSource == null || urlSource.isEmpty) return;
await _audioPlayer.play(UrlSource(urlSource));
}
}