android late request permission;update chat UI,launch chat from UI cm

This commit is contained in:
csf
2022-04-04 14:54:00 +08:00
parent 299bd11481
commit f083816fc7
9 changed files with 236 additions and 46 deletions

View File

@@ -30,7 +30,7 @@ class ChatPage extends StatelessWidget implements PageShape {
final id = entry.key;
final user = serverModel.clients[id]?.chatUser ?? chatModel.me;
return PopupMenuItem<int>(
child: Text("${user.name} - ${user.uid}"),
child: Text("${user.name} ${user.uid}"),
value: id,
);
}).toList();
@@ -47,18 +47,36 @@ class ChatPage extends StatelessWidget implements PageShape {
child: Container(
color: MyTheme.grayBg,
child: Consumer<ChatModel>(builder: (context, chatModel, child) {
return DashChat(
inputContainerStyle: BoxDecoration(color: Colors.white70),
sendOnEnter: false,
// if true,reload keyboard everytime,need fix
onSend: (chatMsg) {
chatModel.send(chatMsg);
},
user: chatModel.me,
messages: chatModel.messages[chatModel.currentID] ?? [],
// default scrollToBottom has bug https://github.com/fayeed/dash_chat/issues/53
scrollToBottom: false,
scrollController: chatModel.scroller,
final currentUser = chatModel.currentUser;
return Stack(
children: [
DashChat(
inputContainerStyle: BoxDecoration(color: Colors.white70),
sendOnEnter: false,
// if true,reload keyboard everytime,need fix
onSend: (chatMsg) {
chatModel.send(chatMsg);
},
user: chatModel.me,
messages: chatModel.messages[chatModel.currentID] ?? [],
// default scrollToBottom has bug https://github.com/fayeed/dash_chat/issues/53
scrollToBottom: false,
scrollController: chatModel.scroller,
),
chatModel.currentID == ChatModel.clientModeID
? SizedBox.shrink()
: Padding(
padding: EdgeInsets.all(10),
child: Row(
children: [
Icon(Icons.account_circle,
color: MyTheme.accent80),
SizedBox(width: 5),
Text(
"${currentUser.name ?? ""} ${currentUser.uid ?? ""}",style: TextStyle(color: MyTheme.accent50),),
],
)),
],
);
})));
}

View File

@@ -56,6 +56,7 @@ class _HomePageState extends State<HomePage> {
actions: _pages.elementAt(_selectedIndex).appBarActions,
),
bottomNavigationBar: BottomNavigationBar(
key: navigationBarKey,
items: _pages
.map((page) =>
BottomNavigationBarItem(icon: page.icon, label: page.title))

View File

@@ -76,9 +76,13 @@ class ServerPage extends StatelessWidget implements PageShape {
}
}
void checkService() {
// 检测当前服务状态,若已存在服务则异步更新数据回来
void checkService() async {
FFI.invokeMethod("check_service"); // jvm
// for Android 10/11,MANAGE_EXTERNAL_STORAGE permission from a system setting page
if(PermissionManager.isWaitingFile() && !FFI.serverModel.fileOk){
PermissionManager.complete("file",await PermissionManager.check("file"));
debugPrint("file permission finished");
}
}
class ServerInfo extends StatefulWidget {
@@ -268,9 +272,21 @@ class ConnectionManager extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.symmetric(vertical: 5.0),
child: clientInfo(entry.value),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
clientInfo(entry.value),
entry.value.isFileTransfer
?SizedBox.shrink()
:IconButton(onPressed: (){
FFI.chatModel.changeCurrentID(entry.value.id);
final bar = navigationBarKey.currentWidget;
if(bar!=null){
bar as BottomNavigationBar;
bar.onTap!(1);
}
}, icon: Icon(Icons.chat,color: MyTheme.accent80,))
],
),
ElevatedButton.icon(
style: ButtonStyle(
@@ -338,7 +354,9 @@ class PaddingCard extends StatelessWidget {
}
Widget clientInfo(Client client) {
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
return Padding(
padding: EdgeInsets.symmetric(vertical: 8),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Row(
children: [
CircleAvatar(
@@ -356,7 +374,7 @@ Widget clientInfo(Client client) {
])
],
),
]);
]));
}
void toAndroidChannelInit() {
@@ -370,14 +388,21 @@ void toAndroidChannelInit() {
FFI.serverModel.updateClientState();
break;
}
case "on_permission_changed":
case "on_state_changed":
{
var name = arguments["name"] as String;
var value = arguments["value"] as String == "true";
debugPrint("from jvm:on_permission_changed,$name:$value");
debugPrint("from jvm:on_state_changed,$name:$value");
FFI.serverModel.changeStatue(name, value);
break;
}
case "on_android_permission_result":
{
var type = arguments["type"] as String;
var result = arguments["result"] as bool;
PermissionManager.complete(type, result);
break;
}
}
} catch (e) {
debugPrint("MethodCallHandler err:$e");