Уведомления о Flutter FCM + плагин преобразования текста в речь - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь создать приложение, которое будет читать уведомления из облачных сообщений Firebase. я отправляю уведомления с помощью программы узла и читаю ее во флаттере

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




void main(){runApp(MyApp());}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: ' Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {

  MyHomePage({Key key, this.title}) : super(key: key);


  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}


class _MyHomePageState extends State<MyHomePage> {
  FirebaseMessaging _firebaseMessaging  = new FirebaseMessaging();

  FlutterTts flutterTts = new FlutterTts();
  int _counter = 0;
  String notificationtext;

  void _incrementCounter() {
    setState(() {

      _counter++;
    });
  }
  @override

    void initState() {
      super.initState();
      _firebaseMessaging.subscribeToTopic("bavo");

      _firebaseMessaging.configure(

        onMessage : (Map<String,dynamic> message) {

          print('on message $message');

          setState((){
          _counter = _counter + 100;
          notificationtext = message.toString(); 
          });
        },
        onResume : (Map<String, dynamic> message) {
          print('on resume $message');
           setState((){
          _counter = _counter + 100;
          notificationtext = message.toString();
          });
        },
        onLaunch : (Map<String, dynamic> message) {
          print('on launch $message');
          setState((){
          _counter = _counter + 100;
          notificationtext = message.toString();
          });
        }, 
      );
      _firebaseMessaging.getToken().then((token){
        print(token);

      });
    }
  speak() async {
  flutterTts.speak(notificationtext);
  }

  @override
  Widget build(BuildContext context) {
    flutterTts.speak(notificationtext);
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Text(
              'You have pushed the button this many times:',
            ),
            new RaisedButton(
        onPressed: speak,
        child: new Text('Say Hello'),
          ),
            new Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: new FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: new Icon(Icons.add),
      ),
    );
  }
}

как вы можете видеть в onmessage, я установил переменную, равную datapayload сообщения, и я позволил ему играть с initstate (это перезагружает виджет, чтобы он выполнял код текста в речь, это было только для того, чтобы я работал найден)

моя проблема в том, как мне сделать так, чтобы, если переменная менялась, она воспроизводила текст с речью, даже если телефон выключен, теперь он сообщает, когда приложение открыто, и только тогда

надеюсь, что вы, ребята, можете мне помочь

1 Ответ

0 голосов
/ 26 сентября 2018

Я не уверен, как работает обмен сообщениями в firebase, но почему бы просто не запустить метод flutterTts.speak () внутри слушателя.

Или вы можете вызвать метод speak внутри слушателя.

Я не проверял это, но, возможно, стоит попробовать.

пример:

   onMessage : (Map<String,dynamic> message) {

      print('on message $message');

      setState((){
        _counter = _counter + 100;
        notificationtext = message.toString();
      });
      flutterTts.speak(message.toString());
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...