软件编程
位置:首页>> 软件编程>> flutter编程>> Flutter实现微信朋友圈功能

Flutter实现微信朋友圈功能

作者:陈世流年  发布时间:2022-10-02 00:28:15 

标签:Flutter,微信,朋友圈

本文实例为大家分享了Flutter实现微信朋友圈功能的具体代码,供大家参考,具体内容如下

今天给大家实现一下微信朋友圈的效果,下面是效果图

Flutter实现微信朋友圈功能

下面还是老样子,还是以代码的方式进行讲解


import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:nursery_school_gardener/view/main/dynamic/FriendView/FriendCell.dart';

class Dynamic extends StatefulWidget {
 @override
 _DynamicState createState() => _DynamicState();
}

class _DynamicState extends State<Dynamic> {
 // 朋友圈信息数据
 List<Result> cachesData;
 @override
 void initState() {
   super.initState();
 }

@override
 Widget build(BuildContext context) {
   return CustomScaffold(
     contentWidget: Expanded(
         flex: 1,
         child: ListView.builder(// 朋友圈列表
         itemBuilder: (BuildContext context, int index) {
           // 每一条的朋友圈
           return FriendCell(
             result: cachesData[index],//将数据传入每一条列表中
           );
         },
         itemCount: cachesData.length(),
       ),
     ),
   );
 }

}

上面就是列表,下面是列表中的每一个样式


import 'dart:math';
import 'package:flutter/material.dart';
import 'package:nursery_school_gardener/util/ColorUtils.dart';

class FriendCell extends StatefulWidget {
 // 上一页传过来的数据
 Result result;
 FriendCell({this.result, Key key}) : super(key: key);
 @override
 _FriendCellState createState() => _FriendCellState();
}

class _FriendCellState extends State<FriendCell> {
 TextEditingController editingController = new TextEditingController();
 // 照片展示样式,1张、2|4张、或者其他
 Widget makePictureCount(List<KgPhotosList> pics) {
   if (pics.length == 1) {
     return GestureDetector(
       onTap: () {
         //点击图片
       },
       child: Container(
         margin: EdgeInsets.fromLTRB(0, 10, 50, 10),
         width: MediaQuery.of(context).size.width - 164,
         height: (MediaQuery.of(context).size.width - 164) / 2,
         decoration: BoxDecoration(
           image: DecorationImage(
             image: AssetImage("images/hsf2.jpg"),//展示的图片根据需求展示不同类型
             fit: BoxFit.cover,
           ),
           borderRadius: BorderRadius.circular(8),
         ),
       ),
     );
   } else if (pics.length == 4 || pics.length == 2) {
     return Container(
       margin: EdgeInsets.fromLTRB(0, 10, 0, 10),
       child: Wrap(
         spacing: 5,
         runSpacing: 5,
         alignment: WrapAlignment.start,
         children: pics
             .map(
               (p) => GestureDetector(
                 onTap: () {
                   //点击图片
                 },
                 child: Container(
                   width: (MediaQuery.of(context).size.width - 164) / 2.2,
                   height: (MediaQuery.of(context).size.width - 164) / 2.2,
                   decoration: BoxDecoration(
                     image: DecorationImage(
                       image: AssetImage("images/hsf2.jpg"),//展示的图片根据需求展示不同类型
                       fit: BoxFit.cover,
                     ),
                     borderRadius: BorderRadius.circular(8),
                   ),
                 ),
               ),
             )
             .toList(),
       ),
     );
   } else if (pics.length == 3 || pics.length > 4) {

return Container(
       margin: EdgeInsets.fromLTRB(0, 10, 0, 10),
       child: Wrap(
         spacing: 5,
         runSpacing: 5,
         alignment: WrapAlignment.start,
         children: pics
             .map(
               (p) => GestureDetector(
                 onTap: () {
                   //点击图片
                 },
                 child: Container(
                    width: (MediaQuery.of(context).size.width - 164) / 3,
                    height: (MediaQuery.of(context).size.width - 164) / 3,
                    decoration: BoxDecoration(
                       image: DecorationImage(
                          image:AssetImage("images/hsf2.jpg"),//展示的图片根据需求展示
                        fit: BoxFit.cover,
                      ),
                       borderRadius: BorderRadius.circular(8),
                    ),
                 ),
               ),
             )
             .toList(),
       ),
     );
   } else {
     return Container();
   }
 }

bool _isShow = true;

@override
 Widget build(BuildContext context) {
   bool deleteStatus = widget.result.addTeacher !=
       Variable.share().loginData.result.userInfo.id;
   return Container(
     margin: new EdgeInsets.only(left: 12, right: 12, bottom: 12),
     decoration: BoxDecoration(
       borderRadius: BorderRadius.circular(10),
       color: ColorUtils.WHITE,
       boxShadow: [
         BoxShadow(
             color: ColorUtils.MAIN_BG, blurRadius: 10.0, spreadRadius: 1.0),
       ],
     ),
     child: Stack(
       children: [
         Container(
           child: Column(
             children: <Widget>[
               Flex(
                 direction: Axis.horizontal,
                 mainAxisAlignment: MainAxisAlignment.start,
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: <Widget>[
                   //头像
                   Container(
                     width: 40,
                     height: 40,
                     margin: EdgeInsets.fromLTRB(15, 20, 15, 0),
                     decoration: BoxDecoration(
                       image: DecorationImage(
                         image: AssetImage("images/hsf2.jpg"),//用户头像
                         fit: BoxFit.cover,
                       ),
                       borderRadius: BorderRadius.circular(8),
                     ),
                   ),
                   Expanded(
                     child: Container(
                       margin: EdgeInsets.fromLTRB(0, 20, 60, 0),
                       child: Column(
                         mainAxisAlignment: MainAxisAlignment.start,
                         crossAxisAlignment: CrossAxisAlignment.start,
                         children: <Widget>[
//姓名
Text(
     "姓名",
          style: TextStyle(
                     fontSize: 17,
                     color: Color(0XFF4D6CAB),
                     fontWeight: FontWeight.w500),
                           ),
                           SizedBox(
                             height: 5,
                           ),
                           //动态内容
                           Text(
                             "内容",
                             style: TextStyle(fontSize: 15),
                           ),
                           SizedBox(
                             height: 5,
                           ),
//发表的图片,上一页面传递来的属性
   makePictureCount(widget.result.kgPhotosList),
                         ],
                       ),
                     ),
                   ),
                 ],
               ),
Stack(
    children: [
            Flex(
                direction: Axis.horizontal,
                mainAxisAlignment: MainAxisAlignment.start,
                children: <Widget>[
//发布的时间
                Container(
                    margin: EdgeInsets.only(left: 70, bottom: 5),
                       child: Text(
                           "时间",
                           style: TextStyle(
                               fontSize: 12, color: Color(0XFFB2B2B2)),
                         ),
                       ),
//删除朋友圈按钮 deleteStatus代表是否是自己的朋友圈,是可以删除,
     Offstage(
             offstage: deleteStatus,
             child: GestureDetector(
                    onTap: () {
                             CustomDialog.show(context,
                                 title: "动态删除",
                                 message: "你确定要删除当前动态吗?", callBack: (flag) {
                               if (flag) {
                                 delteDynamic();
                               }
                             });
                           },
                           child: Container(
                             margin: EdgeInsets.only(left: 5, bottom: 5),
                             child: Text(
                               "删除",
                               style: TextStyle(
                                   fontSize: 12,
                                   color: ColorUtils.BLUE_NORMAL),
                             ),
                           ),
                         ),
                       ),
//管理员驳回按钮,看是否是管理员,可以通过和驳回朋友圈
 Offstage(
       offstage: ToolUtils.isContainsElement(
                 Variable.share().USER_DYNAMIC_TYPE),
                         child: GestureDetector(
                           onTap: () {
                             CustomDialog.show(
                               context,
                               title: "动态通过",
                               message: "你确定要通过当前动态吗?",
                               callBack: (flag) {
                                 if (flag) {}
                               },
                             );
                           },
                           child: Container(
                             margin: EdgeInsets.only(left: 5, bottom: 5),
                             child: Text(
                               "通过",
                               style: TextStyle(
                                   fontSize: 12,
                                   color: ColorUtils.BLUE_NORMAL),
                             ),
                           ),
                         ),
                       ),
//管理员驳回按钮,看是否是管理员,可以通过和驳回朋友圈
    Offstage(
          offstage: ToolUtils.isContainsElement(
              Variable.share().USER_DYNAMIC_TYPE),
          child: GestureDetector(
                onTap: () {
                 CustomInputDialog.show(context,
                   title: "动态驳回",
                 message: "你确定要驳回当前动态吗?", callBack: (flag) {
                               if (flag) {}
                             });
                           },
                           child: Container(
                             margin: EdgeInsets.only(left: 5, bottom: 5),
                             child: Text(
                               "驳回",
                               style: TextStyle(
                                   fontSize: 12,
                                   color: ColorUtils.BLUE_NORMAL),
                             ),
                           ),
                         ),
                       ),
                     ],
                   ),
 Container(
      margin: EdgeInsets.only(right: 20),
         child: Row(
         mainAxisAlignment: MainAxisAlignment.end,
           children: <Widget>[
              Offstage(
                offstage: _isShow,
                   child: AnimatedContainer(
                        decoration: BoxDecoration(
                         borderRadius: BorderRadius.circular(5),
                                 color: Color(0XFF4C5154)),
                      duration: Duration(milliseconds: 100),
                        width: 130,
                     height: 30,
                child: Flex(
         direction: Axis.horizontal,
children: <Widget>[
// 点赞模块
  Expanded(
            flex: 1,
             child: Row(
                    mainAxisAlignment:
                    MainAxisAlignment.center,
                         children: <Widget>[
                                Icon(
                                 Icons.favorite_border,
                                 color: Colors.white,
                                 size: 15,
                               ),
                              SizedBox(
                           width: 5,
                  ),
             InkWell(
    onTap: () {
// 点赞功能
        setState(
                () {
             isShow();
              addPraise();
                  },
                  );
                 },
             child: Text(
              "赞",
                style: TextStyle(
                     color: Colors.white,
                       fontSize: 12),
                   ),
             ),
        ],
    ),
),
// 评论模块
Expanded(
      flex: 1,
      child: Row(
      mainAxisAlignment:
      MainAxisAlignment.center,
      children: <Widget>[
           Icon(
                  Icons.sms,
                  color: Colors.white,
                   size: 15,
                           ),
                            SizedBox(
                          width: 5,
                         ),
                           InkWell(
                           onTap: () {
                              setState(
                                () {
                                 isShow();
                                  addDiscuss("我是评论内容");
                                   },
                              );
                           },
                         child: Text(
                                  "评论",
                                style: TextStyle(
                                    color: Colors.white,
                                 fontSize: 12),
                                         ),
                                       ),
                                     ],
                                   ),
                                 ),
                               ],
                             ),
                           ),
    ),
         SizedBox(
           width: 10,
              ),
                 InkWell(
                    onTap: () {
                    isShow();
                           },
                           child: Image.asset(
                             "images/button.png",
                             width: 22,
                             height: 18,
                           ),
                         ),
                       ],
              ),
           ),
      ],
  ),
//评论模块
Offstage(
   offstage:
            widget.result.kgPraiseList.length == 0 ? true : false,
                 child: Container(
                   constraints: BoxConstraints(minWidth: double.infinity),
                   margin: EdgeInsets.fromLTRB(70, 10, 15, 0),
                   padding:
                       EdgeInsets.only(top: 5, bottom: 5, left: 10, right: 10),
//因为点赞和评论是两个控件,所以当他俩存在的时候需要设置对应的圆角,保证UI
   decoration: BoxDecoration(
      borderRadius: BorderRadius.only(
                topLeft: Radius.circular(8),
                topRight: Radius.circular(8),
                bottomLeft: Radius.circular(
                             widget.result.kgDiscussList.length == 0 ? 8 : 0),
                         bottomRight: Radius.circular(
                             widget.result.kgDiscussList.length == 0 ? 8 : 0)),
                     color: Color(0XFFF3F3F5),
                   ),
                   child: Wrap(
                       alignment: WrapAlignment.start,
                       runSpacing: 5,
                       spacing: 5,
                       children: likeView(widget.result.kgPraiseList.length)),
                 ),
               ),
//点赞模块
  Offstage(
   offstage:
        widget.result.kgDiscussList.length == 0 ? true : false,
             child: Container(
                   constraints: BoxConstraints(minWidth: double.infinity),
                   margin: EdgeInsets.fromLTRB(70, 0, 15, 0),
                   padding:
                       EdgeInsets.only(top: 5, bottom: 5, left: 10, right: 10),
                   //因为点赞和评论是两个控件,所以当他俩存在的时候需要设置对应的圆角,保证UI
                   decoration: BoxDecoration(
                     borderRadius: BorderRadius.only(
                         topLeft: Radius.circular(
                             widget.result.kgPraiseList.length == 0 ? 8 : 0),
                         topRight: Radius.circular(
                             widget.result.kgPraiseList.length == 0 ? 8 : 0),
                         bottomLeft: Radius.circular(8),
                         bottomRight: Radius.circular(8)),
                     color: Color(0XFFF3F3F5),
                   ),
                   child: Wrap(
                       alignment: WrapAlignment.start,
                       runSpacing: 5,
                       spacing: 5,
                       children: talkView(widget.result.kgDiscussList.length)),
                 ),
               ),
               SizedBox(
                 height: 10,
               ),
             ],
           ),
         ),
         Offstage(
           offstage: true,
           child: Container(
             margin: new EdgeInsets.only(
                 left: MediaQuery.of(context).size.width - 50, top: 20),
             child: Image.asset(
               "images/ic_no_network.png",
               width: 18,
               height: 18,
             ),
           ),
         ),
       ],
     ),
   );
 }

// 点赞和评论模块是否显示
 void isShow() {
   setState(() {
     _isShow = !_isShow;
   });
 }

/*
 * 删除朋友圈
 * */
 void delteDynamic() {
   // 删除朋友圈
 }

/*
 * 发布评论
 * */
 void addDiscuss(String discuss) {
   // 发布评论
 }

/*
 * 点赞
 * */
 void addPraise() {
   // 点赞
 }

//点赞
 List<Widget> likeView(int count) {
   List<Widget> result = [];
   // TODO: 这里不要删除,后期肯定会改回改版本,这个是展示所有点赞人的信息,因为项目需要这里注释了,只用下面的方式
   /*
   for (int i = 0; i < count; i++) {
     var praise = widget.result.kgPraiseList[i];
     result.add(
       Container(
         child: Row(
           mainAxisSize: MainAxisSize.min,
           children: <Widget>[
             Icon(
               Icons.favorite_border,
               size: 13,
               color: Color(0XFF566B94),
             ),
             SizedBox(width: 5),
             Container(
               child: Text(
                 ToolUtils.isEmptyOrNull(praise.praisePerson),
                 style: TextStyle(
                     color: Color(0XFF566B94),
                     fontSize: 15,
                     fontWeight: FontWeight.w500),
               ),
             )
           ],
         ),
       ),
     );
   }
    */
   // 点赞数量
   if (widget.result.kgPraiseList.length > 0) {
     result.add(
       Container(
         child: Row(
           mainAxisSize: MainAxisSize.min,
           children: <Widget>[
             Icon(
               Icons.favorite,
               size: 16,
               color: Color(0XFF4D6CAB),
             ),
             SizedBox(width: 5),
             Container(
               child: Text(
                 "${widget.result.kgPraiseList.length}人赞过",
                 style: TextStyle(
                     color: Color(0XFF4D6CAB),
                     fontSize: 14,
                     fontWeight: FontWeight.w500),
               ),
             )
           ],
         ),
       ),
     );
   }
   return result;
 }
 //评论
 List<Widget> talkView(int count) {
   List<Widget> result = [];
   for (int i = 0; i < count; i++) {
     var discuss = widget.result.kgDiscussList[i];
     var rng = new Random();
     result.add(
       Container(
         child: Flex(
           direction: Axis.vertical,
           children: [
             Container(
               child: Row(
                 children: <Widget>[
                   Expanded(
                     child: Text.rich(
                       TextSpan(
                           style: TextStyle(
                             fontSize: 15,
                             color: Color(0xFF333333),
                           ),
                           children: [
                             TextSpan(
                               text: ToolUtils.isEmptyOrNull(
                                       discuss.discussPerson) +
                                   ':',
                               style: TextStyle(
                                 fontWeight: FontWeight.w500,
                                 color: Color(0XFF4D6CAB),
                               ),
                             ),
                             TextSpan(
                                 text: ToolUtils.isEmptyOrNull(
                                     discuss.discussMessage)),
                           ]),
                       textAlign: TextAlign.start,
                     ),
                   ),
                 ],
               ),
             ),
             Container(),
           ],
         ),
       ),
     );
   }
   return result;
 }
}

到此朋友圈效果的实现就完成了。

来源:https://blog.csdn.net/WangQingLei0307/article/details/119148798

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com