如何通过firebase(ios)与Flatter进行实时聊天
我为每个订单的用户和供应商之间的颤振应用程序制作了聊天模块,但在真正的iPhone中,我需要返回,然后打开聊天屏幕才能看到新消息,而不是实时的 如何将其转换为实时信息,以便用户或供应商无需返回,然后重新打开聊天页面以查看新消息 这是我的密码 用户聊天屏幕如何通过firebase(ios)与Flatter进行实时聊天,firebase,firebase-realtime-database,flutter,dart,chat,Firebase,Firebase Realtime Database,Flutter,Dart,Chat,我为每个订单的用户和供应商之间的颤振应用程序制作了聊天模块,但在真正的iPhone中,我需要返回,然后打开聊天屏幕才能看到新消息,而不是实时的 如何将其转换为实时信息,以便用户或供应商无需返回,然后重新打开聊天页面以查看新消息 这是我的密码 用户聊天屏幕 import 'dart:async'; import 'dart:io'; import 'dart:math'; import 'dart:convert'; import 'dart:async' show Future; import
import 'dart:async';
import 'dart:io';
import 'dart:math';
import 'dart:convert';
import 'dart:async' show Future;
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:intl/intl.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'chat_model.dart';
import 'chatmessage.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:uuid/uuid.dart';
import 'package:keyboard_actions/keyboard_actions.dart';
class ChatPage extends StatefulWidget {
final String _userName;
final String _id;
final String _userid;
final String _orderNo;
final String vendorId;
//widget.vendorId
ChatPage(
this._userName, this._id, this._userid, this._orderNo, this.vendorId);
StreamSubscription _subscriptionTodo;
@override
_ChatPageState createState() => new _ChatPageState();
}
class _ChatPageState extends State<ChatPage> {
static var databaseReference = FirebaseDatabase.instance.reference();
var v_id;
var vendor_id;
var user_id;
var vendor_name, vendor_token;
final TextEditingController _chatController = new TextEditingController();
final List<ChatMessage> _messages = <ChatMessage>[];
List<ChatModel> list_messages = List<ChatModel>();
DateTime now = DateTime.now();
FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
var chat_id_fr;
Future onSelectNotification(String payload) {
debugPrint("payload : $payload");
showDialog(
context: context,
builder: (_) => new AlertDialog(
title: new Text('Notification'),
content: new Text('$payload'),
),
);
}
@override
void initState() {
vendor_id = widget.vendorId;
user_id = widget._userid;
print(vendor_id + "ssssss");
getDetails();
getchat();
flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
var android = new AndroidInitializationSettings('@mipmap/ic_launcher');
var iOS = new IOSInitializationSettings();
var initSetttings = new InitializationSettings(android, iOS);
flutterLocalNotificationsPlugin.initialize(initSetttings,
onSelectNotification: onSelectNotification);
//_firebaseMessaging.setAutoInitEnabled(enabled)
_firebaseMessaging.configure(
onLaunch: (Map<String, dynamic> message) {
print('onLaunch called');
showNotification("", "");
},
onResume: (Map<String, dynamic> message) {
print('onResume called');
showNotification("", "");
},
onMessage: (Map<String, dynamic> message) {
print('onMessage called' + message.toString());
Map msg_ = message['notification'];
String body = msg_['body'];
String title = msg_['title'];
setState(() {
ChatMessage message = new ChatMessage(
text: body.toString(),
vendor: "vendor",
vendor_name: "",
);
print("msg===" + body.toString());
print("msg===" + body.toString());
_messages.insert(0, message);
showNotification(body, title);
});
},
);
_firebaseMessaging.subscribeToTopic('all');
_firebaseMessaging.requestNotificationPermissions(IosNotificationSettings(
sound: true,
badge: true,
alert: true,
));
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print('Hello');
});
_firebaseMessaging.getToken().then((token) {});
}
showNotification(String body, String title) async {
var android = new AndroidNotificationDetails(
'channel id', 'channel NAME', 'CHANNEL DESCRIPTION',
priority: Priority.High, importance: Importance.Max);
var iOS = new IOSNotificationDetails();
var platform = new NotificationDetails(android, iOS);
await flutterLocalNotificationsPlugin
.show(0, 'New Message', '$body', platform, payload: '$body');
}
Future<String> getDetails() async {
FirebaseDatabase.instance
.reference()
.child("vendor")
.child(vendor_id)
.once()
.then((DataSnapshot snapshot) {
Map value = snapshot.value;
var vendor_id_fr = value['id'];
vendor_name = value['name'];
vendor_token = value['token'];
//Map<String, dynamic> data = map['Data'];
print("name " + vendor_name);
print("id " + vendor_id);
print("token " + vendor_token);
});
return vendor_id.toString();
}
Future<String> getchat() async {
FirebaseDatabase.instance
.reference()
.child("chat")
.child(widget._orderNo)
.once()
.then((DataSnapshot snapshot) {
Map value_ = snapshot.value;
value_.forEach((key, value) {
Map value_1 = value;
chat_id_fr = value_1['chat_id'];
var vendor_msg_fr = value_1['msg'];
var user_id_ = value_['user_id'];
var vendor_id_ = value_['vendor_id'];
ChatModel chatModel = new ChatModel.fromJson(value);
list_messages.add(chatModel);
list_messages.sort((x, y) => x.chat_id_fr.compareTo(y.chat_id_fr));
});
var list_data = list_messages.toString();
print(list_data.toString());
// list_messages=list_messages.reversed.toList();
int dfd = list_messages.length;
for (int i = 0; i <= list_messages.length; i++) {
dfd = dfd - 1;
/* var value = list_messages.reduce((curr, next) => curr.chat_id_fr > next.chat_id_fr ? curr : next);
var value1 = list_messages.reduce((curr, next) => curr.chat_id_fr > next.chat_id_fr ? curr : next);
*/
if (list_messages
.elementAt(dfd)
.for_value
.toString()
.contains("user")) {
setState(() {
ChatMessage message = new ChatMessage(
text: list_messages.elementAt(dfd).msg,
vendor: "user",
vendor_name: vendor_name);
_messages.add(message);
});
} else {
setState(() {
ChatMessage message = new ChatMessage(
text: list_messages.elementAt(dfd).msg.toString(),
vendor: "vendor",
vendor_name: vendor_name,
);
_messages.add(message);
//list_messages.reversed.toList();
});
}
}
});
return vendor_id.toString();
}
Future<http.Response> postRequest(String msg) async {
var url = 'https://fcm.googleapis.com/fcm/send';
Map<String, dynamic> jsonMap = {
'notification': {'body': '$msg', 'title': 'New Massage'},
'to':
'fPgRVKZY56Q:APA91bHEMQy1EKHbPUraCn2tCp2th6Oah5Xx_N7b-6wLiHWjjYG7WCaRmjwstR8_YaNukwA_mwZHuCpQoYKuXL7nQBMGPH3kw58vHth7FkXuyn-keW0JnNUZhDzlgV2RA9HraeW2M4R0',
};
Map<String, dynamic> jsonMap1 = {
'notification': {'body': '$msg', 'title': 'New Massage'},
'to': '$vendor_token',
};
//encode Map to JSON
var body = json.encode(jsonMap1);
var response = await http.post(url,
headers: {
"Content-Type": "application/json",
"Authorization":
"key=AAAAt08dld0:APA91bEY6Dtrb1x1SlAprnEYeSEUdCT0D0oq9qzlkLJDIJdB0-hVIbdKL_L6CysecmOb46gjD3lyZMKl5aGH4rY1daFYA838VMnS7SzumelXie3Vps7s8MkILRgz7Kj0QQ65Dp0uZLI6"
},
body: body);
print("${response.statusCode}" + "=response=");
print("${response.body}" + "=response=");
return response;
}
void _handleSubmit(String text) {
_chatController.clear();
String formattedDate = DateFormat('kk:mm:ss').format(now).toString();
var uuid = new Uuid();
var rondm_no;
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
rondm_no = uuid.v1().toString() + 'user_id';
}
// chat_id_fr = 0;
if (_messages.length == 0) {
databaseReference
.child("chat")
.child(widget._orderNo)
.child('$rondm_no')
.update({
'vendor_id': vendor_id.toString(),
'user_id': user_id.toString(),
'msg': text.toString(),
'chat_id': 0,
'for_value': 'user',
});
setState(() {
ChatMessage message = new ChatMessage(
text: text.toString(),
vendor: "user",
vendor_name: "",
);
postRequest(text.toString());
print("msg===" + text.toString());
print("msg===" + text.toString());
_messages.insert(0, message);
});
} else {
for (var i = 0; i < _messages.length; i++) {
int chat_id_fr = i + 1;
databaseReference
.child("chat")
.child(widget._orderNo)
.child('$rondm_no')
.update({
'vendor_id': vendor_id.toString(),
'user_id': user_id.toString(),
'msg': text.toString(),
'chat_id': chat_id_fr,
'for_value': 'user',
});
}
setState(() {
ChatMessage message = new ChatMessage(
text: text.toString(),
vendor: "user",
vendor_name: "",
);
postRequest(text.toString());
print("msg===" + text.toString());
print("msg===" + text.toString());
_messages.insert(0, message);
});
}
}
Widget _chatEnvironment() {
return IconTheme(
data: new IconThemeData(color: Color(0xFF7872c0)),
child: new Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
child: new Row(
children: <Widget>[
new Flexible(
child: new TextField(
decoration: new InputDecoration.collapsed(
hintText: "Starts typing ..."),
controller: _chatController,
onSubmitted: _handleSubmit,
),
),
new Container(
margin: const EdgeInsets.symmetric(horizontal: 4.0),
child: new IconButton(
icon: new Icon(Icons.send),
onPressed: () => _handleSubmit(_chatController.text),
),
)
],
),
),
);
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("المحادثة"), //Conversation
backgroundColor: Color(0xFF7872c0),
),
body: new Column(
children: <Widget>[
new Flexible(
child: ListView.builder(
padding: new EdgeInsets.all(8.0),
reverse: true,
itemBuilder: (_, int index) => _messages[index],
itemCount: _messages.length,
),
),
new Divider(
height: 1.0,
),
new Container(
decoration: new BoxDecoration(
color: Theme.of(context).cardColor,
),
child: _chatEnvironment(),
)
],
));
}
}
import 'dart:async';
import 'dart:math';
import 'dart:async';
import 'dart:io';
import 'dart:math';
import 'dart:convert';
import 'dart:async' show Future;
import 'package:firebase_database/firebase_database.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:koni_app/Pages/UsersPages/MyOrders/Chat.dart';
import 'package:koni_app/Pages/UsersPages/MyOrders/chat_model.dart';
import 'package:koni_app/Pages/UsersPages/MyOrders/chatmessage.dart';
import 'package:http/http.dart' as http;
import 'MyOrders/Vendorchatmessage.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:uuid/uuid.dart';
import 'package:keyboard_actions/keyboard_actions.dart';
import 'MyOrders/vendorchat_model.dart';
class VendorAdminChatPage extends StatefulWidget {
final String _userName;
final String _id;
final String _userid;
final String orderNo;
final String vendorId;
VendorAdminChatPage(this._userName, this._id, this._userid, this.orderNo,this.vendorId);
StreamSubscription _subscriptionTodo;
/*
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Color(0xFF7872c0),
title: Text("تواصل مع الادارة "),
),
body: Center(
child: Text('here the UserAdminChat page it will be '),
),
);
}
*/
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _VendorChatPageState();
}
}
class _VendorChatPageState extends State<VendorAdminChatPage> {
static var databaseReference = FirebaseDatabase.instance.reference();
var v_id;
var vendor_id;
var user_id;
var user_name, user_token;
final TextEditingController _chatController = new TextEditingController();
final List<Vendorchatmessage> _messages = <Vendorchatmessage>[];
FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
List<VendorChatModel> list_messages = List<VendorChatModel>();
DateTime now = DateTime.now();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
int chat_id_fr;
Future onSelectNotification(String payload) {
debugPrint("payload : $payload");
showDialog(
context: context,
builder: (_) => new AlertDialog(
title: new Text('Notification'),
content: new Text('$payload'),
),
);
}
@override
void initState() {
vendor_id = widget.vendorId;
user_id = widget._userid;
user_id = widget._userid;
// var user_Id = widget._userid;
print("sssss" + user_id);
getDetails();
getchat();
flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
var android = new AndroidInitializationSettings('@mipmap/ic_launcher');
var iOS = new IOSInitializationSettings();
var initSetttings = new InitializationSettings(android, iOS);
flutterLocalNotificationsPlugin.initialize(initSetttings,
onSelectNotification: onSelectNotification);
_firebaseMessaging.configure(
onLaunch: (Map<String, dynamic> message) {
print('onLaunch called');
showNotification("", "");
},
onResume: (Map<String, dynamic> message) {
print('onResume called');
showNotification("", "");
},
onMessage: (Map<String, dynamic> message) {
print('onMessage called' + message.toString());
Map msg_ = message['notification'];
String body = msg_['body'];
String title = msg_['title'];
setState(() {
showNotification(body, title);
Vendorchatmessage message = new Vendorchatmessage(
text: body.toString(),
vendor: "user",
vendor_name: "",
);
print("msg===" + body.toString());
print("msg===" + body.toString());
_messages.insert(0, message);
});
},
);
_firebaseMessaging.subscribeToTopic('all');
_firebaseMessaging.requestNotificationPermissions(IosNotificationSettings(
sound: true,
badge: true,
alert: true,
));
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print('Hello');
});
_firebaseMessaging.getToken().then((token) {});
}
showNotification(String body, String title) async {
var android = new AndroidNotificationDetails(
'channel id', 'channel NAME', 'CHANNEL DESCRIPTION',
priority: Priority.High, importance: Importance.Max);
var iOS = new IOSNotificationDetails();
var platform = new NotificationDetails(android, iOS);
await flutterLocalNotificationsPlugin
.show(0, 'New Message', '$body', platform, payload: '$body');
}
Future<String> getDetails() async {
FirebaseDatabase.instance
.reference()
.child("user")
.child(user_id)
.once()
.then((DataSnapshot snapshot) {
Map value = snapshot.value;
var vendor_id_fr = value['id'];
user_name = value['name'];
user_token = value['token'];
//Map<String, dynamic> data = map['Data'];
print("name " + user_name);
print("id " + vendor_id);
print("token " + user_token);
});
return vendor_id.toString();
}
Future<String> getchat() async {
FirebaseDatabase.instance
.reference()
.child("chat")
.child(widget.orderNo)
.once()
.then((DataSnapshot snapshot) {
Map value_ = snapshot.value;
value_.forEach((key, value) {
Map value_1 = value;
chat_id_fr = value_1['chat_id'];
var vendor_msg_fr = value_1['msg'];
var user_id_ = value_['user_id'];
var vendor_id_ = value_['vendor_id'];
VendorChatModel chatModel = new VendorChatModel.fromJson(value);
list_messages.add(chatModel);
list_messages.sort((a, b) => a.chat_id_fr.compareTo(b.chat_id_fr));
});
var list_data = list_messages.toString();
print(list_data.toString());
int dfd = list_messages.length;
for (int i = 0; i <= list_messages.length; i++) {
/* String lower=list_messages.elementAt(0).chat_id_fr;
String lower1=list_messages.elementAt(0).chat_id_fr;
*/
dfd = dfd - 1;
/* int ss=list_messages.length-1;
String ss=ss.toString();*/
if (list_messages.elementAt(dfd).for_value.toString().contains("user")) {
setState(() {
Vendorchatmessage message = new Vendorchatmessage(
text: list_messages.elementAt(dfd).msg,
vendor: "user",
vendor_name: user_name);
_messages.add(message);
});
} else {
setState(() {
Vendorchatmessage message = new Vendorchatmessage(
text: list_messages.elementAt(dfd).msg,
vendor: "vendor",
vendor_name: user_name,
);
_messages.add(message);
});
}
}
});
return vendor_id.toString();
}
void _handleSubmit(String text) {
_chatController.clear();
// Vendorchatmessage message = new Vendorchatmessage(text: text);
String formattedDate = DateFormat('kk:mm:ss').format(now).toString();
var rondm_no;
var uuid = new Uuid();
var rng = new Random();
for (var i = 0; i < 10; i++) {
print(rng.nextInt(100));
rondm_no = uuid.v1().toString() + 'vendor_id';
}
chat_id_fr = 0;
if (_messages.length == 0) {
databaseReference
.child("chat")
.child(widget.orderNo)
.child('$rondm_no')
.update({
'vendor_id': vendor_id.toString(),
'user_id': user_id.toString(),
'msg': text.toString(),
'chat_id': 0,
'for_value': 'vendor',
});
} else {
for (var i = 0; i < _messages.length; i++) {
chat_id_fr = i + 1;
databaseReference
.child("chat")
.child(widget.orderNo)
.child('$rondm_no')
.update({
'vendor_id': vendor_id.toString(),
'user_id': user_id.toString(),
'msg': text.toString(),
'chat_id': chat_id_fr,
'for_value': 'vendor',
});
}
}
/*databaseReference.child("chat").child(widget.orderNo).update({
'vendor_id': vendor_id.toString(),
'user_id': user_id.toString(),
});*/
setState(() {
Vendorchatmessage message = new Vendorchatmessage(
text: text.toString(),
vendor: "vendor",
vendor_name: "",
);
print("msg===" + text.toString());
print("msg===" + text.toString());
_messages.insert(0, message);
postRequest(text.toString());
});
}
Future<http.Response> postRequest(String msg) async {
var url = 'https://fcm.googleapis.com/fcm/send';
Map<String, dynamic> jsonMap1 = {
'notification': {'body': '$msg', 'title': 'New Massage'},
'to': '$user_token',
};
//encode Map to JSON
var body = json.encode(jsonMap1);
var response = await http.post(url,
headers: {
"Content-Type": "application/json",
"Authorization":
"key=AAAAt08dld0:APA91bEY6Dtrb1x1SlAprnEYeSEUdCT0D0oq9qzlkLJDIJdB0-hVIbdKL_L6CysecmOb46gjD3lyZMKl5aGH4rY1daFYA838VMnS7SzumelXie3Vps7s8MkILRgz7Kj0QQ65Dp0uZLI6"
},
body: body);
print("${response.statusCode}" + "=response=");
print("${response.body}" + "=response=");
return response;
}
Widget _chatEnvironment() {
return IconTheme(
data: new IconThemeData(color: Color(0xFF7872c0)),
child: new Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
child: new Row(
children: <Widget>[
new Flexible(
child: new TextField(
decoration: new InputDecoration.collapsed(
hintText: "Starts typing ..."),
controller: _chatController,
onSubmitted: _handleSubmit,
),
),
new Container(
margin: const EdgeInsets.symmetric(horizontal: 4.0),
child: new IconButton(
icon: new Icon(Icons.send),
onPressed: () => _handleSubmit(_chatController.text),
),
)
],
),
),
);
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("المحادثة"), //Conversation
backgroundColor: Color(0xFF7872c0),
),
body: new Column(
children: <Widget>[
new Flexible(
child: ListView.builder(
padding: new EdgeInsets.all(8.0),
reverse: true,
itemBuilder: (_, int index) => _messages[index],
itemCount: _messages.length,
),
),
new Divider(
height: 1.0,
),
new Container(
decoration: new BoxDecoration(
color: Theme.of(context).cardColor,
),
child: _chatEnvironment(),
)
],
)
/* Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
child: Column(
children: <Widget>[
new Flexible(
child: new ListView.builder(
padding: new EdgeInsets.all(8.0),
reverse: true,
itemBuilder: (_, int index) {},
itemCount: 10,
),
),
new Divider(height: 1.0),
Container(
margin: EdgeInsets.only(bottom: 20.0, right: 10.0, left: 10.0),
child: Row(
children: <Widget>[
new Flexible(
child: new TextField(
decoration: new InputDecoration.collapsed(
hintText: "ارسال الرسالة"), //"Send message"
),
),
new Container(
child: new IconButton(
icon: new Icon(
Icons.send,
color: Color(0xFF7872c0),
),
onPressed: () {
}),
),
],
),
),
],
),
)*/
);
}
}
导入'dart:async';
导入“dart:io”;
导入“dart:math”;
导入“dart:convert”;
导入“dart:async”显示未来;
将“package:http/http.dart”导入为http;
进口“包装:颤振/材料.省道”;
导入“package:firebase_database/firebase_database.dart”;
导入“包:intl/intl.dart”;
导入“package:firebase_messaging/firebase_messaging.dart”;
导入“chat_model.dart”;
导入“chatmessage.dart”;
导入“package:flatter_local_notifications/flatter_local_notifications.dart”;
导入“包:uuid/uuid.dart”;
导入“包:键盘动作/键盘动作.dart”;
类ChatPage扩展StatefulWidget{
最终字符串\u用户名;
最终字符串_id;
最终字符串_userid;
最终字符串_orderNo;
最终字符串vendorId;
//widget.vendorId
聊天页(
这个。\用户名,这个。\ id,这个。\用户名,这个。\订单号,这个。供应商id);
StreamSubscription _subscriptionTodo;
@凌驾
_ChatPageState createState()=>新建;
}
类_ChatPageState扩展状态{
静态var databaseReference=FirebaseDatabase.instance.reference();
变量v_id;
var供应商id;
var用户id;
var供应商名称、供应商令牌;
最终文本编辑控制器_chatController=新文本编辑控制器();
最终列表_消息=[];
List_messages=List();
DateTime now=DateTime.now();
FirebaseMessaging_FirebaseMessaging=FirebaseMessaging();
flatterlocalnotificationsplugin flatterlocalnotificationsplugin;
变量chat\u id\u fr;
未来onSelectNotification(字符串负载){
debugPrint(“有效载荷:$payload”);
显示对话框(
上下文:上下文,
生成器:()=>新建警报对话框(
标题:新文本(“通知”),
内容:新文本(“$payload”),
),
);
}
@凌驾
void initState(){
vendor_id=widget.vendorId;
用户标识=小部件。\用户标识;
打印(供应商id+“SSSS”);
getDetails();
getchat();
FlatterLocalNotificationsPlugin=新的FlatterLocalNotificationsPlugin();
var android=新的AndroidInitializationSettings(“@mipmap/ic_launcher”);
var iOS=新的IOSInitializationSettings();
var initSetttings=新的初始化设置(android、iOS);
FlatterLocalNotificationsPlugin.initialize(初始化设置,
onSelectNotification:onSelectNotification);
//_firebaseMessaging.setAutoInitEnabled(已启用)
_firebaseMessaging.configure(
onLaunch:(映射消息){
打印('onLaunch called');
显示通知(“,”);
},
onResume:(映射消息){
打印('onResume called');
显示通知(“,”);
},
onMessage:(映射消息){
print('onMessage调用'+message.toString());
映射消息=消息['notification'];
字符串body=msg_['body'];
String title=msg_389;['title'];
设置状态(){
ChatMessage message=新建ChatMessage(
文本:body.toString(),
供应商:“供应商”,
供应商名称:“”,
);
打印(“msg==”+body.toString());
打印(“msg==”+body.toString());
_消息。插入(0,消息);
展示通知(正文、标题);
});
},
);
_firebaseMessaging.subscribeToTopic('all');
_firebaseMessaging.requestNotificationPermissions(IONotificationSettings(
听起来:是的,
徽章:没错,
警报:是的,
));
_firebaseMessaging.onissettings已注册
.listen((IONotificationSettings){
打印(“你好”);
});
_firebaseMessaging.getToken().then((令牌){});
}
showNotification(字符串正文、字符串标题)异步{
var android=新的AndroidNotificationDetails(
“频道id”、“频道名称”、“频道描述”,
优先级:优先级。高,重要性:重要性。最大);
var iOS=新的IONotificationDetails();
var平台=新通知详细信息(android、iOS);
等待通知
.show(0,'newmessage','$body',平台,有效负载:'$body');
}
Future getDetails()异步{
FirebaseDatabase.instance
.reference()
.儿童(“卖方”)
.child(供应商id)
.一次
.then((数据快照快照){
映射值=snapshot.value;
var供应商_id_fr=值['id'];
供应商名称=值['name'];
供应商令牌=值['token'];
//地图数据=地图[‘数据’];
打印(“名称”+供应商名称);
打印(“id”+供应商id);
打印(“代币”+供应商代币);
});
返回供应商id.toString();
}
Future getchat()异步{
FirebaseDatabase.instance
.reference()
.child(“聊天”)
.child(小部件。\u订单号)
.一次
.then((数据快照快照){
映射值=snapshot.value;
值\uu0.forEach((键,值){
映射值_1=值;
chat_id_fr=值_1['chat_id'];
var供应商_msg_fr=值_1['msg'];
var user_id_=value_['user_id'];
var卖方id=价值['卖方id'];
ChatModel ChatModel=new ChatModel.fromJson(值);
列出消息。添加(聊天室模型);
list_messages.sort((x,y)=>x.chat_id_fr.compareTo(y.chat_id_fr));
});
var list_data=list_messages.toString();
打印(list_data.toString());
//list_messages=list_messages.reversed.toList();
int dfd=列表\消息长度;
对于(int i=0;i curr.chat\u id\u fr>next.chat\u id\u fr?curr:next);
var value1=列表消息.reduce((curr,next)=>curr.chat\u id\u fr>next.chat\u id\u fr?curr:next);
*/
如果(列出消息)
.elementAt(dfd)
.
Future<String> getchat() async {
FirebaseDatabase.instance
.reference()
.child("chat")
.child(widget._orderNo)
.onValue
.listen((list_messages) {})
.onData((Event event) {
setState(() {
if (event.snapshot != null) {
Map<dynamic, dynamic> mapOfMaps = Map.from(event.snapshot.value);
list_messages.clear();
mapOfMaps.values.forEach((value) async {
ChatModel vendor = ChatModel.fromJson(Map.from(value));
list_messages.add(vendor);
list_messages.sort((x, y) => x.chat_id_fr.compareTo(y.chat_id_fr));
});
}
});
var list_data = list_messages.toString();
print(list_data.toString());
// list_messages=list_messages.reversed.toList();
int dfd = list_messages.length;
for (int i = 0; i <= list_messages.length; i++) {
dfd = dfd - 1;
/* var value = list_messages.reduce((curr, next) => curr.chat_id_fr > next.chat_id_fr ? curr : next);
var value1 = list_messages.reduce((curr, next) => curr.chat_id_fr > next.chat_id_fr ? curr : next);
*/
if (list_messages
.elementAt(dfd)
.for_value
.toString()
.contains("user")) {
setState(() {
ChatMessage message = new ChatMessage(
text: list_messages.elementAt(dfd).msg,
vendor: "user",
vendor_name: vendor_name);
_messages.add(message);
});
} else {
setState(() {
ChatMessage message = new ChatMessage(
text: list_messages.elementAt(dfd).msg.toString(),
vendor: "vendor",
vendor_name: vendor_name,
);
_messages.add(message);
//list_messages.reversed.toList();
});
}
}
});
return vendor_id.toString();
}
FirebaseDatabase.instance
.reference()
.child("vendor")
.child(vendor_id)
.onValue
.listen(() {})
.onData((Event event) {
setState(() {
if (event.snapshot != null) {
print("data= " + event.snapshot.value.toString());
Map<dynamic, dynamic> mapOfMaps = Map.from(event.snapshot.value);
arrCategories.clear();
mapOfMaps.values.forEach((value) async {
Category category = Category.fromJson(Map.from(value));
arrCategories.add(category);
});
}
});
});