- Image status indicator (sending, done, failed)
This commit is contained in:
Linloir 2022-10-23 10:56:50 +08:00
parent 5594bd6ba7
commit 354fcb3263
No known key found for this signature in database
GPG Key ID: 58EEB209A0F2C366
4 changed files with 65 additions and 7 deletions

View File

@ -1,14 +1,18 @@
/* /*
* @Author : Linloir * @Author : Linloir
* @Date : 2022-10-14 17:04:20 * @Date : 2022-10-14 17:04:20
* @LastEditTime : 2022-10-22 23:05:24 * @LastEditTime : 2022-10-23 10:52:45
* @Description : * @Description :
*/ */
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tcp_client/chat/cubit/chat_cubit.dart';
import 'package:tcp_client/chat/model/chat_history.dart'; import 'package:tcp_client/chat/model/chat_history.dart';
import 'package:tcp_client/repositories/tcp_repository/models/tcp_request.dart';
class ImageBox extends StatelessWidget { class ImageBox extends StatelessWidget {
const ImageBox({ const ImageBox({

View File

@ -1,7 +1,7 @@
/* /*
* @Author : Linloir * @Author : Linloir
* @Date : 2022-10-14 17:04:12 * @Date : 2022-10-14 17:04:12
* @LastEditTime : 2022-10-22 23:06:38 * @LastEditTime : 2022-10-23 10:49:14
* @Description : * @Description :
*/ */
@ -67,7 +67,7 @@ class TextBox extends StatelessWidget {
), ),
), ),
), ),
const SizedBox(width: 6.0,), const SizedBox(width: 8.0,),
], ],
if(history.status == ChatHistoryStatus.done) if(history.status == ChatHistoryStatus.done)
...[ ...[

View File

@ -1,15 +1,20 @@
/* /*
* @Author : Linloir * @Author : Linloir
* @Date : 2022-10-13 14:03:45 * @Date : 2022-10-13 14:03:45
* @LastEditTime : 2022-10-22 21:30:26 * @LastEditTime : 2022-10-23 10:55:42
* @Description : * @Description :
*/ */
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tcp_client/chat/cubit/chat_cubit.dart';
import 'package:tcp_client/chat/model/chat_history.dart'; import 'package:tcp_client/chat/model/chat_history.dart';
import 'package:tcp_client/chat/view/in_message_box.dart'; import 'package:tcp_client/chat/view/in_message_box.dart';
import 'package:tcp_client/chat/view/out_message_box.dart'; import 'package:tcp_client/chat/view/out_message_box.dart';
import 'package:tcp_client/common/avatar/avatar.dart'; import 'package:tcp_client/common/avatar/avatar.dart';
import 'package:tcp_client/repositories/common_models/message.dart';
import 'package:tcp_client/repositories/tcp_repository/models/tcp_request.dart';
class HistoryTile extends StatelessWidget { class HistoryTile extends StatelessWidget {
const HistoryTile({ const HistoryTile({
@ -55,7 +60,56 @@ class HistoryTile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
Flexible( Flexible(
child: OutMessageBox(history: history), child: history.message.type == MessageType.image ? Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
children: [
if(history.type == ChatHistoryType.outcome && history.status == ChatHistoryStatus.sending)
...[
SizedBox(
height: 12.0,
width: 12.0,
child: CircularProgressIndicator(
color: Colors.grey.withOpacity(0.5),
strokeWidth: 2.0,
),
),
const SizedBox(width: 12.0,),
],
if(history.type == ChatHistoryType.outcome && history.status == ChatHistoryStatus.done)
...[
Icon(
Icons.check_rounded,
color: Colors.grey.withOpacity(0.5),
size: 18,
),
const SizedBox(width: 8.0,),
],
if(history.type == ChatHistoryType.outcome && history.status == ChatHistoryStatus.failed)
...[
ClipOval(
child: Material(
color: Colors.transparent,
child: InkWell(
child: Icon(
Icons.error_rounded,
color: Colors.white.withOpacity(0.5),
size: 18,
),
onTap: () async {
context.read<ChatCubit>().tcpRepository.pushRequest(SendMessageRequest(
message: history.message,
token: (await SharedPreferences.getInstance()).getInt('token')
));
},
),
),
),
const SizedBox(width: 8.0,),
],
OutMessageBox(history: history),
],
) : OutMessageBox(history: history),
), ),
const SizedBox(width: 16.0,), const SizedBox(width: 16.0,),
UserAvatar(userid: history.message.senderID, size: 42,), UserAvatar(userid: history.message.senderID, size: 42,),

View File

@ -1,7 +1,7 @@
/* /*
* @Author : Linloir * @Author : Linloir
* @Date : 2022-10-10 08:04:53 * @Date : 2022-10-10 08:04:53
* @LastEditTime : 2022-10-23 10:32:16 * @LastEditTime : 2022-10-23 10:44:13
* @Description : * @Description :
*/ */
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
@ -49,7 +49,7 @@ class SplashPage extends StatelessWidget {
return BlocProvider<InitializationCubit>( return BlocProvider<InitializationCubit>(
create: (context) { create: (context) {
return InitializationCubit( return InitializationCubit(
serverAddress: '127.0.0.1', serverAddress: 'chat.linloir.cn',
serverPort: 20706 serverPort: 20706
); );
}, },