Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

杨树贤 / kefu_server

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Settings
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Find file
Normal viewHistoryPermalink
Switch branch/tag
  • kefu_server
  • ui
  • kefu_flutter
  • lib
  • widgets
  • text_message.dart
text_message.dart 3.84 KB
chenxianqi's avatar
update kefu_client style
f8f7c88e
 
chenxianqi committed 5 years ago
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
import 'package:flutter/material.dart';
import '../models/im_message.dart';
import 'date_widget.dart';
import 'im_avatar.dart';

class TextMessage extends StatelessWidget {
  TextMessage({this.message, this.onCancel, this.onOperation, this.isSelf});
  final ImMessage message;
  final VoidCallback onCancel;
  final VoidCallback onOperation;
  final bool isSelf;
  @override
  Widget build(BuildContext context) {
    ThemeData themeData = Theme.of(context);

    Widget _avatar(bool show) {
      return Offstage(
          offstage: !show,
          child: ImAvatar(
            avatar: message.avatar,
          ));
    }

    Widget _cancel() {
      return Offstage(
        offstage: !message.isShowCancel,
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            GestureDetector(
              onTap: onCancel,
              child:
                  Text(" 撤回 ", style: TextStyle(color: themeData.primaryColor)),
            ),
          ],
        ),
      );
    }

    Widget msgWidget() {
      return Container(
        margin: EdgeInsets.only(bottom: 15.0),
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          mainAxisAlignment:
              isSelf ? MainAxisAlignment.end : MainAxisAlignment.start,
          children: <Widget>[
            _avatar(!isSelf),
            Padding(
              padding: EdgeInsets.only(
                  left: isSelf ? 0 : 7.0, right: isSelf ? 7.0 : 0),
              child: Column(
                crossAxisAlignment:
                    isSelf ? CrossAxisAlignment.end : CrossAxisAlignment.start,
                children: <Widget>[
                  Row(
                    crossAxisAlignment: CrossAxisAlignment.end,
                    children: <Widget>[
                      _cancel(),
                      GestureDetector(
                        onLongPress: onOperation,
                        child: Container(
                          margin: EdgeInsets.only(top: 3.0),
                          constraints: BoxConstraints(maxWidth: 290.0),
                          padding: EdgeInsets.symmetric(
                              horizontal: 10.0, vertical: 5.0),
                          decoration: BoxDecoration(
                              color: isSelf
                                  ? themeData.primaryColor
                                  : Colors.white,
                              boxShadow: [
                                BoxShadow(
                                  offset: Offset(0.0, 3.0),
                                  color: Colors.black26.withAlpha(5),
                                  blurRadius: 4.0,
                                ),
                                BoxShadow(
                                  offset: Offset(0.0, 3.0),
                                  color: Colors.black26.withAlpha(5),
                                  blurRadius: 4.0,
                                ),
                              ],
                              borderRadius:
                                  BorderRadius.all(Radius.circular(3.0))),
                          child: Text("${message.payload}",
                              style: TextStyle(
                                  fontSize: 15.0,
                                  color: isSelf
                                      ? Colors.white
                                      : Colors.black87.withAlpha(180))),
                        ),
                      )
                    ],
                  ),
                ],
              ),
            ),
            _avatar(isSelf),
          ],
        ),
      );
    }

    return Column(
      children: <Widget>[
        Offstage(
          offstage: !message.isShowDate,
          child: DateWidget(
            date: message.timestamp,
          ),
        ),
        msgWidget()
      ],
    );
  }
}