Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
clx_flutter_message
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
openSourceLibrary
clx_flutter_message
Commits
8cf0f6fd
提交
8cf0f6fd
authored
9月 10, 2024
作者:
张国庆
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新消息控制逻辑
上级
37b807e1
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
193 行增加
和
227 行删除
+193
-227
clx_flutter_message.dart
lib/clx_flutter_message.dart
+2
-1
notice_dialog_widget.dart
lib/core/notice/notice_dialog_widget.dart
+97
-35
notification_layout_logic.dart
...cation/notification_layout/notification_layout_logic.dart
+0
-74
notification_layout_widget.dart
...ation/notification_layout/notification_layout_widget.dart
+83
-99
notification_manager.dart
lib/core/notification/notification_manager.dart
+11
-18
没有找到文件。
lib/clx_flutter_message.dart
浏览文件 @
8cf0f6fd
...
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
...
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import
'clx_flutter_message_platform_interface.dart'
;
import
'clx_flutter_message_platform_interface.dart'
;
import
'core/model/message_config.dart'
;
import
'core/model/message_config.dart'
;
import
'core/model/message_data.dart'
;
import
'core/model/message_data.dart'
;
import
'core/notification/notification_manager.dart'
;
import
'core/socket/socket_io.dart'
;
import
'core/socket/socket_io.dart'
;
class
ClxFlutterMessage
{
class
ClxFlutterMessage
{
...
@@ -15,7 +16,7 @@ class ClxFlutterMessage {
...
@@ -15,7 +16,7 @@ class ClxFlutterMessage {
MessageConfig
messageConfig
=
MessageConfig
();
MessageConfig
messageConfig
=
MessageConfig
();
abstract
class
BaseMessageConfig
{
abstract
class
BaseMessageConfig
with
NotificationManager
{
//处理消息页面跳转
//处理消息页面跳转
void
onJumpToMessagePage
(
String
page
,
dynamic
arguments
);
void
onJumpToMessagePage
(
String
page
,
dynamic
arguments
);
...
...
lib/core/notice/notice_dialog_widget.dart
浏览文件 @
8cf0f6fd
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'../../clx_flutter_message.dart'
;
import
'../../util/string_util.dart'
;
import
'../../util/string_util.dart'
;
import
'../model/message_data.dart'
;
import
'../model/message_node.dart'
;
import
'../model/message_node.dart'
;
import
'../widget/button_public/button_public_rect.dart'
;
import
'../widget/button_public/button_public_rect.dart'
;
import
'../widget/button_public/button_public_type.dart'
;
import
'../widget/button_public/button_public_type.dart'
;
class
NoticeDialogWidget
extends
StatefulWidget
{
class
NoticeDialogWidget
extends
GetView
<
NoticeDialogWidgetController
>
{
const
NoticeDialogWidget
({
const
NoticeDialogWidget
({
super
.
key
,
super
.
key
,
required
this
.
showDialog
,
this
.
decoration
,
this
.
decoration
,
this
.
cancelText
,
this
.
cancelText
,
this
.
confirmText
,
this
.
confirmText
,
...
@@ -16,8 +18,6 @@ class NoticeDialogWidget extends StatefulWidget {
...
@@ -16,8 +18,6 @@ class NoticeDialogWidget extends StatefulWidget {
this
.
confirmType
,
this
.
confirmType
,
});
});
//是否显示
final
bool
showDialog
;
// 对话框背景 decoration
// 对话框背景 decoration
final
Decoration
?
decoration
;
final
Decoration
?
decoration
;
...
@@ -31,23 +31,11 @@ class NoticeDialogWidget extends StatefulWidget {
...
@@ -31,23 +31,11 @@ class NoticeDialogWidget extends StatefulWidget {
// 确认按钮类型
// 确认按钮类型
final
ButtonPublicType
?
confirmType
;
final
ButtonPublicType
?
confirmType
;
@override
// 主视图
State
<
NoticeDialogWidget
>
createState
()
=>
_NoticeDialogWidgetState
();
}
class
_NoticeDialogWidgetState
extends
State
<
NoticeDialogWidget
>
{
MessageNode
?
headNode
;
@override
Widget
build
(
BuildContext
context
)
{
return
_buildView
();
}
// 构建view
Widget
_buildView
()
{
Widget
_buildView
()
{
var
message
=
headNode
?.
data
;
var
message
=
controller
.
headNode
?.
data
;
var
extraShowInfoList
=
message
?.
textVo
?.
extraShowInfoList
;
var
extraShowInfoList
=
message
?.
textVo
?.
extraShowInfoList
;
return
!
widget
.
showDialog
return
!
controller
.
showDialog
?
const
SizedBox
()
?
const
SizedBox
()
:
Container
(
:
Container
(
height:
double
.
infinity
,
height:
double
.
infinity
,
...
@@ -58,7 +46,7 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
...
@@ -58,7 +46,7 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
child:
Stack
(
child:
Stack
(
children:
[
children:
[
Container
(
Container
(
decoration:
widget
.
decoration
,
decoration:
decoration
,
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
24
),
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
24
),
child:
SingleChildScrollView
(
child:
SingleChildScrollView
(
child:
Column
(
child:
Column
(
...
@@ -84,22 +72,20 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
...
@@ -84,22 +72,20 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
children:
[
children:
[
Expanded
(
Expanded
(
child:
ButtonPublicRect
(
child:
ButtonPublicRect
(
type:
widget
.
cancelType
??
type:
cancelType
??
ButtonPublicType
.
outline
,
ButtonPublicType
.
outline
,
text:
cancelText
??
'忽略'
,
text:
widget
.
cancelText
??
'忽略'
,
onPressed:
controller
.
ignore
,
onPressed:
ignore
,
borderRadius:
8
,
borderRadius:
8
,
),
),
),
),
const
SizedBox
(
width:
10
),
const
SizedBox
(
width:
10
),
Expanded
(
Expanded
(
child:
ButtonPublicRect
(
child:
ButtonPublicRect
(
type:
widget
.
confirmType
??
type:
confirmType
??
ButtonPublicType
.
solid
,
ButtonPublicType
.
solid
,
text:
confirmText
??
'去处理'
,
text:
widget
.
confirmText
??
'去处理'
,
onPressed:
()
{
onPressed:
()
{
MessageDeal
.
gotoDealMessage
(
message
);
controller
.
gotoDealMessage
(
message
);
ignore
();
controller
.
ignore
();
},
},
borderRadius:
8
,
borderRadius:
8
,
),
),
...
@@ -115,7 +101,7 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
...
@@ -115,7 +101,7 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
top:
0
,
top:
0
,
right:
0
,
right:
0
,
child:
IconButton
(
child:
IconButton
(
onPressed:
dismiss
,
onPressed:
controller
.
dismiss
,
icon:
const
Icon
(
icon:
const
Icon
(
Icons
.
close
,
Icons
.
close
,
size:
16
,
size:
16
,
...
@@ -187,9 +173,50 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
...
@@ -187,9 +173,50 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
);
);
}
}
void
dismiss
()
{
@override
MessageDeal
.
setMessageShowed
(
headNode
?.
data
);
Widget
build
(
BuildContext
context
)
{
next
();
return
GetBuilder
<
NoticeDialogWidgetController
>(
init:
NoticeDialogWidgetController
(),
id:
"NoticeDialogWidget"
,
builder:
(
_
)
{
return
_buildView
();
},
);
}
}
class
NoticeDialogWidgetController
extends
GetxController
{
NoticeDialogWidgetController
();
BaseMessageConfig
?
messageDeal
=
messageConfig
.
baseMessageConfig
;
_initData
()
{
update
([
"NoticeDialogWidget"
]);
}
/// 所属页面Context
BuildContext
?
context
;
MessageNode
?
headNode
;
bool
showDialog
=
false
;
/// 插入公告
void
insertNotice
(
MessageData
data
)
{
_insertNode
(
data
);
update
();
}
/// 处理公告
gotoDealMessage
(
MessageData
?
data
)
{
messageDeal
?.
gotoDealMessage
(
data
);
}
void
_insertNode
(
MessageData
data
)
{
if
(
headNode
==
null
)
{
headNode
=
MessageNode
(
data
);
showDialog
=
true
;
}
else
{
headNode
?.
insertData
(
data
);
}
}
}
void
next
()
{
void
next
()
{
...
@@ -208,10 +235,45 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
...
@@ -208,10 +235,45 @@ class _NoticeDialogWidgetState extends State<NoticeDialogWidget> {
}
}
}
}
void
setNotice
(
List
<
dynamic
>
data
)
{
for
(
var
element
in
data
)
{
_insertNode
(
MessageData
.
fromJson
(
element
));
}
update
();
}
void
clear
()
{
headNode
=
null
;
showDialog
=
false
;
update
();
}
void
ignore
()
{
void
ignore
()
{
/// 标记已展示
/// 标记已展示
MessageDeal
.
setMessageShowed
(
headNode
?.
data
);
messageDeal
?.
setMessageShowed
(
headNode
?.
data
);
MessageDeal
.
markReadAction
(
headNode
?.
data
);
messageDeal
?.
markReadAction
(
headNode
?.
data
);
next
();
}
void
dismiss
()
{
messageDeal
?.
setMessageShowed
(
headNode
?.
data
);
next
();
next
();
}
}
// @override
// void onInit() {
// super.onInit();
// }
@override
void
onReady
()
{
super
.
onReady
();
_initData
();
}
// @override
// void onClose() {
// super.onClose();
// }
}
}
lib/core/notification/notification_layout/notification_layout_logic.dart
deleted
100644 → 0
浏览文件 @
37b807e1
import
'package:clx_flutter_message/clx_flutter_message.dart'
;
import
'../../model/message_data.dart'
;
import
'../../model/message_node.dart'
;
mixin
NotificationLayoutLogic
{
MessageNode
?
headNode
;
BaseMessageConfig
?
messageDeal
;
void
setCashMessage
(
List
<
MessageData
>
messages
)
{
headNode
=
null
;
/// 上一个节点
MessageNode
?
preNode
;
for
(
var
data
in
messages
)
{
var
theNode
=
MessageNode
(
data
);
if
(
preNode
==
null
)
{
preNode
=
theNode
;
headNode
=
preNode
;
}
else
{
preNode
.
next
=
theNode
;
theNode
.
prev
=
preNode
;
preNode
=
theNode
;
}
}
}
void
next
()
{
messageConfig
.
baseMessageConfig
?.
setMessageShowed
(
headNode
?.
data
);
if
(
headNode
?.
next
==
null
)
{
headNode
=
null
;
NotificationManager
.
instance
.
hideNotification
();
return
;
}
headNode
=
headNode
?.
next
;
headNode
?.
prev
?.
next
=
null
;
headNode
?.
prev
=
null
;
update
();
}
void
ignore
()
{
MessageDeal
.
markReadAction
(
headNode
?.
data
);
MessageDeal
.
setMessageShowed
(
headNode
?.
data
);
next
();
}
void
dismiss
()
{
MessageDeal
.
setMessageShowed
(
headNode
?.
data
);
next
();
}
void
confirm
(
MessageData
data
)
{
messageDeal
?.
gotoDealMessage
(
data
);
messageDeal
?.
markReadAction
(
headNode
?.
data
);
messageDeal
?.
setMessageShowed
(
headNode
?.
data
);
next
();
}
/// 插入消息
void
insertNotification
(
MessageData
data
)
{
if
(
headNode
==
null
)
{
headNode
=
MessageNode
(
data
);
}
else
{
headNode
?.
insertData
(
data
);
}
}
void
clear
()
{
headNode
=
null
;
NotificationManager
.
instance
.
hideNotification
();
update
();
}
}
lib/core/notification/notification_layout/notification_layout_widget.dart
浏览文件 @
8cf0f6fd
...
@@ -3,34 +3,28 @@ import 'dart:ui';
...
@@ -3,34 +3,28 @@ import 'dart:ui';
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:get/get.dart'
;
import
'package:get/get.dart'
;
import
'../../../clx_flutter_message.dart'
;
import
'../../model/message_data.dart'
;
import
'../../model/message_data.dart'
;
import
'../../model/message_node.dart'
;
import
'../../model/message_node.dart'
;
import
'notification_layout_logic.dart'
;
import
'widget/list_item.dart'
;
import
'widget/list_item.dart'
;
class
NotificationLayoutWidget
extends
StatefulWidget
{
class
NotificationLayoutWidget
extends
GetView
<
NotificationLayoutController
>
{
const
NotificationLayoutWidget
({
super
.
key
});
const
NotificationLayoutWidget
({
super
.
key
});
@override
State
<
NotificationLayoutWidget
>
createState
()
=>
_NotificationLayoutWidgetState
();
}
class
_NotificationLayoutWidgetState
extends
State
<
NotificationLayoutWidget
>
{
MessageNode
?
headNode
;
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
return
_buildView
();
return
GetBuilder
<
NotificationLayoutController
>(
}
init:
NotificationLayoutController
(),
id:
"NotificationLayoutWidget"
,
// 构建View
builder:
(
_
)
{
Widget
_buildView
()
{
if
(
controller
.
headNode
==
null
)
{
if
(
headNode
==
null
)
{
return
const
SizedBox
();
return
const
SizedBox
();
}
}
return
Container
(
return
Container
(
margin:
const
EdgeInsets
.
only
(
top:
35
),
margin:
const
EdgeInsets
.
only
(
top:
35
),
child:
buildStackedList
(
context
),
child:
buildStackedList
(
context
),
);
},
);
);
}
}
...
@@ -40,37 +34,24 @@ class _NotificationLayoutWidgetState extends State<NotificationLayoutWidget> {
...
@@ -40,37 +34,24 @@ class _NotificationLayoutWidgetState extends State<NotificationLayoutWidget> {
child:
Stack
(
child:
Stack
(
fit:
StackFit
.
expand
,
fit:
StackFit
.
expand
,
children:
[
children:
[
if
(
headNode
?.
next
!=
null
)
if
(
controller
.
headNode
?.
next
!=
null
)
Positioned
(
Positioned
(
bottom:
15
,
bottom:
15
,
left:
25
,
left:
25
,
right:
25
,
right:
25
,
child:
_message
(
headNode
?.
next
?.
data
),
child:
_message
(
controller
.
headNode
?.
next
?.
data
),
),
),
Positioned
(
Positioned
(
bottom:
0
,
bottom:
0
,
left:
10
,
left:
10
,
right:
10
,
right:
10
,
child:
_buildNotification
(
headNode
?.
data
),
child:
_buildNotification
(
controller
.
headNode
?.
data
),
)
)
],
],
),
),
);
);
}
}
MessageWidget
_message
(
data
)
{
return
MessageWidget
(
data:
data
,
width:
double
.
infinity
,
onCancel:
()
{
ignore
();
},
onHand:
()
{
confirm
(
data
);
},
);
}
Widget
_buildNotification
(
data
)
{
Widget
_buildNotification
(
data
)
{
if
(
data
==
null
)
{
if
(
data
==
null
)
{
return
const
SizedBox
();
return
const
SizedBox
();
...
@@ -79,7 +60,7 @@ class _NotificationLayoutWidgetState extends State<NotificationLayoutWidget> {
...
@@ -79,7 +60,7 @@ class _NotificationLayoutWidgetState extends State<NotificationLayoutWidget> {
key:
Key
(
data
.
messageNo
?.
toString
()
??
''
),
key:
Key
(
data
.
messageNo
?.
toString
()
??
''
),
direction:
DismissDirection
.
endToStart
,
direction:
DismissDirection
.
endToStart
,
onDismissed:
(
direction
)
{
onDismissed:
(
direction
)
{
dismiss
();
controller
.
dismiss
();
},
},
child:
Stack
(
child:
Stack
(
children:
[
children:
[
...
@@ -104,34 +85,29 @@ class _NotificationLayoutWidgetState extends State<NotificationLayoutWidget> {
...
@@ -104,34 +85,29 @@ class _NotificationLayoutWidgetState extends State<NotificationLayoutWidget> {
);
);
}
}
void
ignore
()
{
MessageWidget
_message
(
data
)
{
MessageDeal
.
markReadAction
(
headNode
?.
data
);
return
MessageWidget
(
MessageDeal
.
setMessageShowed
(
headNode
?.
data
);
data:
data
,
next
();
width:
double
.
infinity
,
onCancel:
()
{
controller
.
ignore
();
},
onHand:
()
{
controller
.
confirm
(
data
);
},
);
}
}
}
void
next
()
{
class
NotificationLayoutController
extends
GetxController
{
MessageDeal
.
setMessageShowed
(
headNode
?.
data
);
NotificationLayoutController
();
if
(
headNode
?.
next
==
null
)
{
headNode
=
null
;
hideNotification
();
return
;
}
headNode
=
headNode
?.
next
;
headNode
?.
prev
?.
next
=
null
;
headNode
?.
prev
=
null
;
setState
(()
{});
}
void
clear
()
{
MessageNode
?
headNode
;
headNode
=
null
;
hideNotification
();
setState
(()
{});
}
void
dismiss
()
{
BaseMessageConfig
?
messageDeal
=
messageConfig
.
baseMessageConfig
;
MessageDeal
.
setMessageShowed
(
headNode
?.
data
);
next
();
_initData
()
{
update
([
"NotificationLayoutWidget"
]);
}
}
void
setCashMessage
(
List
<
MessageData
>
messages
)
{
void
setCashMessage
(
List
<
MessageData
>
messages
)
{
...
@@ -152,57 +128,65 @@ class _NotificationLayoutWidgetState extends State<NotificationLayoutWidget> {
...
@@ -152,57 +128,65 @@ class _NotificationLayoutWidgetState extends State<NotificationLayoutWidget> {
}
}
}
}
/// 插入消息
void
next
()
{
void
insertNotification
(
MessageData
data
)
{
messageDeal
?.
setMessageShowed
(
headNode
?.
data
);
if
(
headNode
==
null
)
{
if
(
headNode
?.
next
==
null
)
{
headNode
=
MessageNode
(
data
)
;
headNode
=
null
;
}
else
{
messageDeal
?.
hideNotification
();
headNode
?.
insertData
(
data
)
;
return
;
}
}
headNode
=
headNode
?.
next
;
headNode
?.
prev
?.
next
=
null
;
headNode
?.
prev
=
null
;
_initData
();
}
}
void
ignore
()
{
messageDeal
?.
markReadAction
(
headNode
?.
data
);
messageDeal
?.
setMessageShowed
(
headNode
?.
data
);
next
();
}
void
dismiss
()
{
messageDeal
?.
setMessageShowed
(
headNode
?.
data
);
next
();
}
void
confirm
(
MessageData
data
)
{
void
confirm
(
MessageData
data
)
{
MessageDeal
.
gotoDealMessage
(
data
);
messageDeal
?
.
gotoDealMessage
(
data
);
MessageDeal
.
markReadAction
(
headNode
?.
data
);
messageDeal
?
.
markReadAction
(
headNode
?.
data
);
MessageDeal
.
setMessageShowed
(
headNode
?.
data
);
messageDeal
?
.
setMessageShowed
(
headNode
?.
data
);
next
();
next
();
}
}
void
setNotification
(
List
<
dynamic
>
data
)
{
/// 插入消息
setCashMessage
(
void
insertNotification
(
MessageData
data
)
{
data
.
map
<
MessageData
>((
e
)
=>
MessageData
.
fromJson
(
e
)).
toList
(),
if
(
headNode
==
null
)
{
);
headNode
=
MessageNode
(
data
);
}
else
{
headNode
?.
insertData
(
data
);
}
}
}
}
void
clear
()
{
headNode
=
null
;
messageDeal
?.
hideNotification
();
update
();
class
NotePage
extends
GetView
<
NotificationLayoutLogic
>
{
const
NotePage
({
super
.
key
});
// 主视图
Widget
_buildView
()
{
return
const
Center
(
child:
Text
(
"NotePage"
),
);
}
}
// @override
// void onInit() {
// super.onInit();
// }
@override
@override
Widget
build
(
BuildContext
context
)
{
void
onReady
()
{
return
GetBuilder
<
NoteController
>(
super
.
onReady
();
init:
NoteController
(),
_initData
();
id:
"note"
,
builder:
(
_
)
{
return
Scaffold
(
appBar:
AppBar
(
title:
const
Text
(
"note"
)),
body:
SafeArea
(
child:
_buildView
(),
),
);
},
);
}
}
// @override
// void onClose() {
// super.onClose();
// }
}
}
lib/core/notification/notification_manager.dart
浏览文件 @
8cf0f6fd
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'../model/message_data.dart'
;
import
'../model/message_data.dart'
;
import
'notification_layout/notification_layout_widget.dart'
;
/// 全局消息展示管理
/// 全局消息展示管理
class
NotificationManager
{
mixin
NotificationManager
{
static
NotificationManager
?
_instance
;
static
NotificationManager
get
instance
{
_instance
??=
NotificationManager
.
_internal
();
return
_instance
!;
}
OverlayEntry
?
_overlayEntry
;
OverlayEntry
?
_overlayEntry
;
final
NotificationLayoutWidget
_notificationLayoutWidget
=
const
NotificationLayoutWidget
();
/// 显示悬浮布局
/// 显示悬浮布局
void
showNotification
(
BuildContext
?
context
)
{
void
showNotification
(
BuildContext
?
context
)
{
if
(
context
==
null
)
return
;
if
(
context
==
null
)
return
;
if
(
_overlayEntry
!=
null
)
return
;
// 防止重复显示
if
(
_overlayEntry
!=
null
)
return
;
// 防止重复显示
if
(
_notificationLayoutLogic
.
headNode
==
null
)
return
;
// 防止没有消息时显示
if
(
_notificationLayoutWidget
.
controller
.
headNode
==
null
)
{
return
;
// 防止没有消息时显示
}
_overlayEntry
=
OverlayEntry
(
_overlayEntry
=
OverlayEntry
(
builder:
(
context
)
=>
Positioned
(
builder:
(
context
)
=>
Positioned
(
top:
0
,
top:
0
,
left:
0
,
left:
0
,
right:
0
,
right:
0
,
child:
NotificationLayoutPage
(
child:
_notificationLayoutWidget
,
logic:
_notificationLayoutLogic
,
),
),
),
);
);
...
@@ -44,16 +37,16 @@ class NotificationManager {
...
@@ -44,16 +37,16 @@ class NotificationManager {
/// 缓存之前的消息列表
/// 缓存之前的消息列表
void
setNotification
(
List
<
dynamic
>
data
)
{
void
setNotification
(
List
<
dynamic
>
data
)
{
_notificationLayout
Logic
.
setCashMessage
(
_notificationLayout
Widget
.
controller
.
setCashMessage
(
data
.
map
<
MessageData
>((
e
)
=>
MessageData
.
fromJson
(
e
)).
toList
(),
data
.
map
<
MessageData
>((
e
)
=>
MessageData
.
fromJson
(
e
)).
toList
(),
);
);
}
}
void
insertNotification
(
MessageData
data
)
{
void
insertNotification
(
MessageData
data
)
{
_notificationLayout
Logic
.
insertNotification
(
data
);
_notificationLayout
Widget
.
controller
.
insertNotification
(
data
);
}
}
void
clear
()
{
void
clear
()
{
_notificationLayout
Logic
.
clear
();
_notificationLayout
Widget
.
controller
.
clear
();
}
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论