From 8808620fe1f7f6a48bf2e4e8e3d76ee1f8eedf02 Mon Sep 17 00:00:00 2001 From: 18631081161 <2088094923@qq.com> Date: Sat, 14 Dec 2024 15:39:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9C=8B=E5=B9=BF=E5=91=8A.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 3 +- .../java/com/huanmeng/talk/MainActivity.java | 4 + assets/images/ic_ad.png | Bin 0 -> 5960 bytes assets/images/ic_open_f.png | Bin 0 -> 4574 bytes assets/images/ic_open_n.png | Bin 0 -> 6173 bytes assets/images/img_add.png | Bin 0 -> 332 bytes lib/beans/user_info_bean.dart | 2 +- lib/dialog/cancel_dialog.dart | 8 +- lib/dialog/create_character_dialog.dart | 87 +++ lib/dialog/create_type_dialog.dart | 102 ++++ lib/main.dart | 4 +- lib/tools/creat/create_page.dart | 497 ++++++++++++++++++ lib/tools/home/test_page.dart | 60 --- lib/tools/home_page.dart | 23 +- lib/tools/login/login_page.dart | 8 +- lib/tools/me/me_page.dart | 84 ++- lib/tools/start_page.dart | 2 +- pubspec.yaml | 6 +- 18 files changed, 792 insertions(+), 98 deletions(-) create mode 100644 assets/images/ic_ad.png create mode 100644 assets/images/ic_open_f.png create mode 100644 assets/images/ic_open_n.png create mode 100644 assets/images/img_add.png create mode 100644 lib/dialog/create_character_dialog.dart create mode 100644 lib/dialog/create_type_dialog.dart create mode 100644 lib/tools/creat/create_page.dart delete mode 100644 lib/tools/home/test_page.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 03ccfff..805fbca 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ - + diff --git a/android/app/src/main/java/com/huanmeng/talk/MainActivity.java b/android/app/src/main/java/com/huanmeng/talk/MainActivity.java index 1cff07d..7f9531b 100644 --- a/android/app/src/main/java/com/huanmeng/talk/MainActivity.java +++ b/android/app/src/main/java/com/huanmeng/talk/MainActivity.java @@ -111,6 +111,10 @@ public class MainActivity extends FlutterActivity { String orderInfoZfb = call.argument("orderInfoZfb"); Alipay(orderInfoZfb); + break; + + case "playAd"://看广告 + break; case "test1": Log.d("TAG1", "onMethodCall: 66666666666"); diff --git a/assets/images/ic_ad.png b/assets/images/ic_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..5255ee4eb828c38884c3fdcde919887d0be0a658 GIT binary patch literal 5960 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

|#Mq6}l~c#x@<2hJ4X zD8B=?Yddo=lgVt{zJ2?I^U1tB7X^6Slga1vPaB5u-R5t7dj@#v6kzaLfPPCZ?OlQ0 zbV$lulu={4ebs99_Tk~-y;0^86?g+EO~RQ2biO7z)ZLf;d2}Z zg%J8+$3|^H07riW+sX6*yrA@AE&KCCxm-@~tKr=OvMj4#DfN_L7`=5oKjP4C(=?Y%wV~U{V$YX*w8{l|X)UoedY!mfFt{$56uk9uk&}? zwr#^Oo>WRb7Du%<>RbfMtgo+cK}SaivA*AMQKJ-pzJQ{c>-5SdYN3P%qHWtxS1OfX z^z`%`-Mo48q`n@!VaD@rAkN3UdGj7oN_}5M7N_-{8O;>jc{nyl^Yent7TdNT92y$h zm((6420T5X{{H^1Y&Lt7h-{>=ne1C8lbNUOi8d=HCAwt#ao0%lxmvB-oaiAUMZ++* zRw|X3hKGm$m&|Bi^^!R7ToW{UdwaWbxm;JdT;|Q`^;DsX$ST7yIK7d2AHEYa%{e5! zUo)vc-Xl06B7{JAzmqSx8>v>SBiU^Bvs^BBD(Gw7lh}m+1N>98#rD!!4*&oF07*qo IM6N<$f?W93)Bpeg literal 0 HcmV?d00001 diff --git a/assets/images/ic_open_n.png b/assets/images/ic_open_n.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b4e33bb3179763adfcb1d38105a4751a1deab8 GIT binary patch literal 6173 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 literal 0 HcmV?d00001 diff --git a/assets/images/img_add.png b/assets/images/img_add.png new file mode 100644 index 0000000000000000000000000000000000000000..19d7a1974b6efbf08857151f96c7da9955638c65 GIT binary patch literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>Z#^NA%Cx&(BWL^Tl{)n)Hd+QN_oC8LhM!wS$ncEx!E*@mzbDMZ4;KH1D+?p}BH2!~ykJIzx z*!OGS{U>wIGknv1735{v^Y}+ckKe?@&u_;0_}s|vVa*baEQ+7Exl1Qt^@&NFyON5+ z0(q{iJ;AiKOUH8iq8W2SMVL#qH#w|T@; { - @override - void initState() { - // TODO: implement initState - super.initState(); - } - @override Widget build(BuildContext context) { return Material( diff --git a/lib/dialog/create_character_dialog.dart b/lib/dialog/create_character_dialog.dart new file mode 100644 index 0000000..ebecea6 --- /dev/null +++ b/lib/dialog/create_character_dialog.dart @@ -0,0 +1,87 @@ +import 'package:flutter/material.dart'; + +class CreateCharacterDialog extends StatefulWidget { + Function onTap; + + CreateCharacterDialog({super.key, required this.onTap}); + + @override + State createState() => _CreateCharacterDialogState(); +} + +class _CreateCharacterDialogState extends State { + @override + Widget build(BuildContext context) { + return Material( + type: MaterialType.transparency, //透明类型 + color: Color(0x1A000000), + child: Container( + decoration: const BoxDecoration( + color: Color(0xFF19191A), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(7), + topRight: Radius.circular(7), + )), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 25, + height: 3, + margin: EdgeInsets.only(top: 14), + decoration: BoxDecoration(color: Color(0xFF272734)), + ), + GestureDetector( + onTap: () { + Navigator.of(context).pop(); + widget.onTap(); + }, + child: Container( + width: double.infinity, + height: 76.67, + margin: EdgeInsets.only(left: 16, right: 16, top: 23), + decoration: BoxDecoration(color: Color(0xFF252526), borderRadius: BorderRadius.all(Radius.circular(7))), + child: Stack( + alignment: Alignment.center, + children: [ + Positioned( + left: 13, + child: Container( + width: 47, + height: 47, + color: Colors.lightBlueAccent, + )), + Positioned( + left: 78, + top: 20, + child: Text( + "创建个人模型", + style: TextStyle(color: Color(0xFFE1E1E1), fontSize: 16), + )), + Positioned( + left: 78, + top: 44, + child: Text( + "本周剩余(10/10)", + style: TextStyle(color: Color(0xFF4D4D4D), fontSize: 12), + )) + ], + ), + ), + ), + Container( + width: double.infinity, + height: 119.63, + alignment: Alignment.center, + margin: EdgeInsets.only(left: 16, right: 16, top: 23, bottom: 19), + decoration: BoxDecoration(color: Color(0xFF252526), borderRadius: BorderRadius.all(Radius.circular(7))), + child: Text( + '拉新人banner', + style: TextStyle(color: Color(0xFFE1E1E1), fontSize: 16), + ), + ), + ], + ), + )); + } +} diff --git a/lib/dialog/create_type_dialog.dart b/lib/dialog/create_type_dialog.dart new file mode 100644 index 0000000..04add20 --- /dev/null +++ b/lib/dialog/create_type_dialog.dart @@ -0,0 +1,102 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class CreateTypeDialog extends StatefulWidget { + Function onTap; + + CreateTypeDialog({super.key, required this.onTap}); + + @override + State createState() => _CreateTypeDialogState(); +} + +class _CreateTypeDialogState extends State { + List typeList = [1, 2, 3, 4, 5, 6]; + + String type = ""; + + @override + void initState() { + // TODO: implement initState + super.initState(); + type = "类型${typeList[0]}"; + } + + @override + Widget build(BuildContext context) { + return Material( + type: MaterialType.transparency, //透明类型 + color: Color(0x1A000000), + child: Container( + decoration: const BoxDecoration( + color: Color(0xFF19191A), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(7), + topRight: Radius.circular(7), + )), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: EdgeInsets.symmetric(horizontal: 16, vertical: 16), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + GestureDetector( + onTap: () { + Navigator.pop(context); + }, + child: Text( + "取消", + style: TextStyle(color: Colors.white, fontSize: 10), + ), + ), + Text( + "选择分类", + style: TextStyle(color: Colors.white, fontSize: 10), + ), + GestureDetector( + onTap: () { + Navigator.pop(context); + widget.onTap(type); + }, + child: Text( + "确定", + style: TextStyle(color: Colors.white, fontSize: 10), + ), + ), + ], + ), + ), + Container( + width: 90, + height: 150, + alignment: Alignment.center, + child: CupertinoPicker( + itemExtent: 35.0, + onSelectedItemChanged: (index) { + setState(() { + type = "类型${typeList[index]}"; + print(typeList[index]); + }); + }, + children: _typeItem(), + ), + ), + ], + ), + )); + } + + _typeItem() { + return typeList.map((res) { + return Container( + alignment: Alignment.center, + child: Text( + "类型$res", + style: TextStyle(fontSize: 14, color: Colors.white), + ), + ); + }).toList(); + } +} diff --git a/lib/main.dart b/lib/main.dart index 522f4cb..20c80a7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,7 +4,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; -import 'package:talk/tools/home/test_page.dart'; +import 'package:talk/tools/creat/create_page.dart'; import 'package:talk/tools/home_page.dart'; import 'package:talk/tools/login/login_page.dart'; import 'package:talk/tools/me/about_page.dart'; @@ -95,7 +95,6 @@ class _ChatAppState extends State { '/ProblemPage': (BuildContext context) => const ProblemPage(), '/ShopPage': (BuildContext context) => const ShopPage(), '/SettingPage': (BuildContext context) => const SettingPage(), - '/TestPage': (BuildContext context) => const TestPage(), '/AboutPage': (BuildContext context) => const AboutPage(), '/ReportPage': (BuildContext context) => const ReportPage(), '/TeenageModePage': (BuildContext context) => const TeenageModePage(), @@ -103,6 +102,7 @@ class _ChatAppState extends State { '/CloseTeenageModePage': (BuildContext context) => const CloseTeenageModePage(), '/TeenageRetrievePasswordPage': (BuildContext context) => const TeenageRetrievePasswordPage(), '/AlgorithmFilingPage': (BuildContext context) => const AlgorithmFilingPage(), + '/CreatePage': (BuildContext context) => const CreatePage(), }, debugShowMaterialGrid: false, //显示网格 diff --git a/lib/tools/creat/create_page.dart b/lib/tools/creat/create_page.dart new file mode 100644 index 0000000..0d138d5 --- /dev/null +++ b/lib/tools/creat/create_page.dart @@ -0,0 +1,497 @@ +import 'package:flutter/material.dart'; + +import '../../common/func.dart'; +import '../../dialog/create_type_dialog.dart'; + +class CreatePage extends StatefulWidget { + const CreatePage({super.key}); + + @override + State createState() => _CreatePageState(); +} + +class _CreatePageState extends State { + final TextEditingController _textBgController = TextEditingController(); + + int gender = 1; //性别类型 1:男 0:女 3:其他 + + String nameText = ""; //人物名字 + void _textNameChanged(String str) { + nameText = str; + } + + String bgText = ""; //人物背景 + void _textBgChanged(String str) { + bgText = str; + } + + String imageText = ""; //人物形象 + void _textImageChanged(String str) { + imageText = str; + } + + int currentStyleIndex = 0; //风格 + + List styleList = [1, 2, 3, 4, 5, 6, 7, 8, 9]; + + String type = ""; //分类 + + @override + void initState() { + // TODO: implement initState + super.initState(); + } + + @override + Widget build(BuildContext context) { + final size = MediaQuery.of(context).size; + return Scaffold( + backgroundColor: Color(0xFF121213), + appBar: AppBar( + backgroundColor: Color(0xFF121213), + scrolledUnderElevation: 0.0, + title: Text( + '创建个人模型', + style: TextStyle(fontSize: 16, color: Colors.white), + ), + centerTitle: true, + leading: IconButton( + iconSize: 18, + icon: Icon(Icons.arrow_back_ios_sharp), + color: Colors.white, + onPressed: () { + // 处理返回操作 + Navigator.pop(context); + }, + ), + ), + body: SingleChildScrollView( + child: Container( + margin: EdgeInsets.symmetric(horizontal: 16), + child: Column( + children: [ + Container( + alignment: Alignment.center, + child: Text( + "角色信息", + style: TextStyle(color: Color(0xFFFF9000), fontSize: 15), + ), + ), + Container( + margin: EdgeInsets.only(top: 15), + alignment: Alignment.centerLeft, + child: Text( + "角色昵称", + style: TextStyle(color: Colors.white, fontSize: 14), + ), + ), + TextField( + cursorColor: const Color(0xFFFF9000), + style: const TextStyle(color: Colors.white), + onChanged: _textNameChanged, + decoration: const InputDecoration( + hintText: '给角色取个名字', + hintStyle: TextStyle(color: Color(0xFF4C4C4C), fontSize: 13), + border: UnderlineInputBorder( + borderSide: BorderSide(color: Color(0xFF3A3A3A)), // 设置下划线颜色 + ), + focusedBorder: UnderlineInputBorder( + borderSide: BorderSide(color: Color(0xFFFF9000)), + ), + ), + maxLength: 8, + ), + Container( + margin: const EdgeInsets.only(top: 10), + alignment: Alignment.centerLeft, + child: const Text( + "性别", + style: TextStyle(color: Colors.white, fontSize: 14), + ), + ), + Container( + margin: const EdgeInsets.only(top: 17), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + GestureDetector( + onTap: () { + gender = 1; + setState(() {}); + }, + child: Container( + width: 93, + height: 32, + alignment: Alignment.center, + decoration: BoxDecoration( + border: Border.all(color: Color(gender == 1 ? 0xFFFF9000 : 0xFF686868), width: 1), + borderRadius: const BorderRadius.all(Radius.circular(7))), + child: Text( + "男", + style: TextStyle(fontSize: 13, color: Color(gender == 1 ? 0xFFFF9000 : 0xFF686868)), + ), + ), + ), + GestureDetector( + onTap: () { + gender = 2; + setState(() {}); + }, + child: Container( + width: 93, + height: 32, + alignment: Alignment.center, + decoration: BoxDecoration( + border: Border.all(color: Color(gender == 2 ? 0xFFFF9000 : 0xFF686868), width: 1), + borderRadius: BorderRadius.all(Radius.circular(7))), + child: Text( + "女", + style: TextStyle(fontSize: 13, color: Color(gender == 2 ? 0xFFFF9000 : 0xFF686868)), + ), + ), + ), + GestureDetector( + onTap: () { + gender = 3; + setState(() {}); + }, + child: Container( + width: 93, + height: 32, + alignment: Alignment.center, + decoration: BoxDecoration( + border: Border.all(color: Color(gender == 3 ? 0xFFFF9000 : 0xFF686868), width: 1), + borderRadius: BorderRadius.all(Radius.circular(7))), + child: Text( + "其他", + style: TextStyle(fontSize: 13, color: Color(gender == 3 ? 0xFFFF9000 : 0xFF686868)), + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 20), + alignment: Alignment.centerLeft, + child: Text( + "身份背景", + style: TextStyle(color: Colors.white, fontSize: 14), + ), + ), + Container( + alignment: Alignment.center, + margin: EdgeInsets.only(top: 20), + padding: const EdgeInsets.only(left: 9, top: 5, right: 9), + decoration: BoxDecoration( + color: Color(0xFF262626), + borderRadius: BorderRadius.all(Radius.circular(6.6)), + ), + child: TextField( + controller: _textBgController, + keyboardType: TextInputType.name, + cursorColor: Color(0xFFFF9000), + // focusNode: _commentFocus, + decoration: + InputDecoration.collapsed(hintText: '描述越详细,越接近你心目中的形象', hintStyle: const TextStyle(fontSize: 12.0, color: Color(0xFF535353))), + textAlign: TextAlign.left, + maxLines: 6, + style: const TextStyle(fontSize: 14.0, color: Colors.white), + onChanged: _textBgChanged, + autofocus: false, + maxLength: 500, + ), + ), + Container( + margin: EdgeInsets.only(top: 15), + alignment: Alignment.centerLeft, + child: Text( + "开场白", + style: TextStyle(color: Colors.white, fontSize: 14), + ), + ), + TextField( + cursorColor: const Color(0xFFFF9000), + style: const TextStyle(color: Colors.white), + onChanged: _textNameChanged, + decoration: const InputDecoration( + hintText: '它的开场第一句话', + hintStyle: TextStyle(color: Color(0xFF4C4C4C), fontSize: 13), + border: UnderlineInputBorder( + borderSide: BorderSide(color: Color(0xFF3A3A3A)), // 设置下划线颜色 + ), + focusedBorder: UnderlineInputBorder( + borderSide: BorderSide(color: Color(0xFFFF9000)), + ), + ), + maxLength: 50, + ), + GestureDetector( + onTap: () { + FunctionUtil.bottomSheetDialog(context, CreateTypeDialog( + onTap: (type) { + this.type = type; + setState(() {}); + }, + )); + }, + child: Container( + width: double.infinity, + height: 45, + margin: EdgeInsets.only(top: 10), + decoration: BoxDecoration( + color: Color(0xFF202020), + borderRadius: BorderRadius.all(Radius.circular(7)), + ), + child: Stack( + alignment: Alignment.center, + children: [ + Positioned( + left: 10, + child: Text( + "分类", + style: TextStyle(color: Colors.white), + ), + ), + Positioned( + right: 10, + child: Text( + type == "" ? "添加" : type, + style: TextStyle(color: type == "" ? Colors.white : Color(0xFFFF9000)), + ), + ), + ], + ), + ), + ), + Container( + width: double.infinity, + height: 45, + margin: EdgeInsets.only(top: 17), + decoration: BoxDecoration( + color: Color(0xFF202020), + borderRadius: BorderRadius.all(Radius.circular(7)), + ), + child: Container(), + ), + Container( + alignment: Alignment.center, + margin: EdgeInsets.only(top: 41), + child: Text( + "角色形象", + style: TextStyle(color: Color(0xFFFF9000), fontSize: 15), + ), + ), + Container( + margin: EdgeInsets.only(top: 15), + alignment: Alignment.centerLeft, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + "形象描述", + style: TextStyle(color: Colors.white, fontSize: 14), + ), + Text( + "随机生成", + style: TextStyle(color: Color(0xFFFF9000), fontSize: 10), + ), + ], + ), + ), + Container( + alignment: Alignment.center, + margin: EdgeInsets.only(top: 20), + padding: const EdgeInsets.only(left: 9, top: 5, right: 9), + decoration: BoxDecoration( + color: Color(0xFF262626), + borderRadius: BorderRadius.all(Radius.circular(6.6)), + ), + child: TextField( + // controller: _textBgController, + keyboardType: TextInputType.name, + cursorColor: Color(0xFFFF9000), + // focusNode: _commentFocus, + decoration: InputDecoration.collapsed(hintText: '长相,场景,衣服', hintStyle: const TextStyle(fontSize: 12.0, color: Color(0xFF535353))), + textAlign: TextAlign.left, + maxLines: 3, + style: const TextStyle(fontSize: 14.0, color: Colors.white), + onChanged: _textImageChanged, + autofocus: false, + maxLength: 100, + ), + ), + Container( + margin: EdgeInsets.only(top: 15), + alignment: Alignment.centerLeft, + child: Text( + "风格选择", + style: TextStyle(color: Colors.white, fontSize: 14), + ), + ), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Container( + // width: 500, + alignment: Alignment.centerLeft, + margin: EdgeInsets.only(top: 21), + height: 154, + child: GridView.count( + shrinkWrap: true, + //水平子Widget之间间距 + crossAxisSpacing: 12.0, + //垂直子Widget之间间距 + mainAxisSpacing: 9.0, + //GridView内边距 + padding: EdgeInsets.zero, + //一行的Widget数量 + crossAxisCount: 2, + //子Widget宽高比例 + childAspectRatio: 1.0, + //子Widget列表 + children: _item(styleList), + physics: const NeverScrollableScrollPhysics(), + //类似 cellForRow 函数 + scrollDirection: Axis.horizontal)), + ), + Container( + margin: EdgeInsets.only(top: 15), + alignment: Alignment.centerLeft, + child: Text( + "选择参考图像", + style: TextStyle(color: Colors.white, fontSize: 14), + ), + ), + Container( + width: double.infinity, + height: 118, + margin: EdgeInsets.only(top: 17), + decoration: BoxDecoration( + color: Color(0xFF202020), + borderRadius: BorderRadius.all(Radius.circular(7)), + ), + child: Stack( + alignment: Alignment.center, + children: [ + Positioned( + top: 38, + child: Image(width: 18, height: 18, image: AssetImage('assets/images/img_add.png')), + ), + Positioned( + top: 77, + child: Text( + "将基于上传的参考图片生成基础模型", + style: TextStyle(color: Color(0xFF6F6F6F), fontSize: 10), + )) + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 35), + width: size.width, + height: 30, + child: Stack( + alignment: Alignment.center, + children: [ + Positioned( + left: 0, + child: Text( + "是否公开", + style: TextStyle(color: Colors.white, fontSize: 14), + )), + Positioned( + left: 70, + child: Text( + "审核中....", + style: TextStyle(color: Color(0xFF696969), fontSize: 12), + )), + Positioned( + right: 0, + child: Image(width: 52, height: 21, image: AssetImage('assets/images/ic_open_f.png')), + ) + ], + ), + ), + Container( + margin: EdgeInsets.symmetric(vertical: 48), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + width: 116, + height: 37, + alignment: Alignment.center, + decoration: + BoxDecoration(border: Border.all(color: Color(0xFFFF9000), width: 1), borderRadius: BorderRadius.all(Radius.circular(7))), + child: Text( + "智能一键生成", + style: TextStyle(fontSize: 14, color: Color(0xFFFF9000)), + ), + ), + Container( + width: 191, + height: 37, + alignment: Alignment.center, + decoration: BoxDecoration( + color: Color(0xFFFF9000), + borderRadius: BorderRadius.all(Radius.circular(7)), + ), + child: Text( + "立即生成", + style: TextStyle(fontSize: 14, color: Colors.black), + ), + ), + ], + ), + ), + ], + ), + ), + ), + ); + } + + _item(List list) { + final size = MediaQuery.of(context).size; + final w113 = size.width / 3.185840707964602; + final h159 = size.width / 2.264150943396226; + final w105 = size.width / 3.428571428571429; + + return list.map((res) { + int index = styleList.indexOf(res); + return GestureDetector( + onTap: () { + currentStyleIndex = index; + setState(() {}); + }, + child: Container( + alignment: Alignment.center, + child: Stack( + children: [ + // ClipRRect( + // borderRadius: BorderRadius.all(Radius.circular(15)), + // child: CachedNetworkImage( + // width: w113, + // height: h159, + // fit: BoxFit.cover, + // imageUrl: res.imageUrl!, + // errorWidget: (context, url, error) => const Icon(Icons.error), + // ), + // ), + Container( + width: 72, + height: 72, + decoration: BoxDecoration( + color: Colors.grey, + borderRadius: BorderRadius.all(Radius.circular(7)), + border: Border.all(color: Color(0xFFFF9000), width: currentStyleIndex == index ? 1 : 0), + ), + ) + ], + ), + ), + ); + }).toList(); + } +} diff --git a/lib/tools/home/test_page.dart b/lib/tools/home/test_page.dart deleted file mode 100644 index c38e9c7..0000000 --- a/lib/tools/home/test_page.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../../custom/custom_popup.dart'; - -class TestPage extends StatefulWidget { - const TestPage({super.key}); - - @override - State createState() => _TestPageState(); -} - -class _TestPageState extends State { - @override - Widget build(BuildContext context) { - return Scaffold( - body: Stack( - children: [ - Positioned( - top: 400, - left: 50, - child: CustomPopup( - menuBuilder: () { - return Container( - width: 50, - height: 150, - color: Colors.lightBlue, - ); - }, - pressType: PressType.singleClick, - child: Container( - width: 50, - height: 50, - color: Colors.black, - ), - ), - ), - Positioned( - top: 400, - left: 150, - child: CustomPopup( - menuBuilder: () { - return Container( - width: 50, - height: 150, - color: Colors.lightBlue, - ); - }, - pressType: PressType.singleClick, - child: Container( - width: 50, - height: 50, - color: Colors.black, - ), - ), - ), - ], - ), - ); - } -} diff --git a/lib/tools/home_page.dart b/lib/tools/home_page.dart index 55a1434..fb89067 100644 --- a/lib/tools/home_page.dart +++ b/lib/tools/home_page.dart @@ -8,6 +8,8 @@ import 'package:talk/tools/home/my_home_page.dart'; import 'package:talk/tools/me/me_page.dart'; import 'package:talk/tools/message/message_page.dart'; +import '../common/func.dart'; +import '../dialog/create_character_dialog.dart'; import '../network/NetworkConfig.dart'; import 'find/find_page.dart'; @@ -154,20 +156,29 @@ class _HomePageState extends State with SingleTickerProviderStateMixin currentIndex = index; }); _tabController.animateTo(index); - // switch (index) { + // case 0: + // case 1: + // currentIndex = index; + // _tabController.animateTo(currentIndex); + // break; // case 2: + // FunctionUtil.bottomSheetDialog(context, CreateCharacterDialog( + // onTap: () { + // Navigator.pushNamed(context, "/CreatePage"); + // }, + // )); // break; // case 3: - // _tabController.animateTo(2); + // currentIndex = 2; + // _tabController.animateTo(currentIndex); // break; // case 4: - // _tabController.animateTo(3); - // break; - // default: - // _tabController.animateTo(index); + // currentIndex = 3; + // _tabController.animateTo(currentIndex); // break; // } + // setState(() {}); }, ), ), diff --git a/lib/tools/login/login_page.dart b/lib/tools/login/login_page.dart index 4edf936..af46ff7 100644 --- a/lib/tools/login/login_page.dart +++ b/lib/tools/login/login_page.dart @@ -41,7 +41,7 @@ class _LoginPageState extends State { int _timeLeft = 60; // 倒计时时间,单位为秒 bool _isCountingDown = false; - Timer? _timer; + Timer? _timer; ///获取验证码 void getCode() { @@ -87,7 +87,7 @@ class _LoginPageState extends State { break; case "login": EasyLoading.showToast(newData['data']); - if(_timer!=null){ + if (_timer != null) { _timer!.cancel(); } Navigator.pushReplacementNamed(context, "/HomePage"); @@ -265,7 +265,7 @@ class _LoginPageState extends State { children: [ Expanded( child: Container( - padding: const EdgeInsets.only(left: 17, bottom: 6), + padding: const EdgeInsets.only(left: 17), child: TextField( controller: _codeController, onChanged: _codeChanged, @@ -305,7 +305,7 @@ class _LoginPageState extends State { height: h43, width: w288, alignment: Alignment.center, - padding: const EdgeInsets.only(left: 17, bottom: 6), + padding: const EdgeInsets.only(left: 17), decoration: const BoxDecoration( color: Color(0x33FFFFFF), borderRadius: BorderRadius.all(Radius.circular(7)), diff --git a/lib/tools/me/me_page.dart b/lib/tools/me/me_page.dart index 7fa3f79..81f0790 100644 --- a/lib/tools/me/me_page.dart +++ b/lib/tools/me/me_page.dart @@ -2,11 +2,13 @@ import 'dart:async'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:talk/tools/me/me_model.dart'; import '../../beans/me_character_info_bean.dart'; import '../../beans/user_info_bean.dart'; import '../../common/EventBusUtil.dart'; +import '../../common/Global.dart'; import '../../network/NetworkConfig.dart'; import '../chat/chat_page.dart'; @@ -161,28 +163,30 @@ class _MePageState extends State { // style: TextStyle(color: Color(0xFF4D4D4D), fontSize: 12), // ), // ), - Text( - '${userInfoBean.hasTalked}', - style: TextStyle(color: Colors.white, fontSize: 16), - ), + Container( - margin: EdgeInsets.only(left: 6, right: 10), + margin: EdgeInsets.only(left: 6, right: 2), child: Text( '聊过', style: TextStyle(color: Color(0xFF4D4D4D), fontSize: 12), ), ), + Text( + '${userInfoBean.hasTalked}', + style: TextStyle(color: Color(0xFFFF9000), fontSize: 16), + ), + + Container( + margin: EdgeInsets.only(left: 25, right: 2), + child: Text( + '剩余聊天次数', + style: TextStyle(color: Color(0xFF4D4D4D), fontSize: 12), + ), + ), Text( '${userInfoBean.remainingChatCount}', - style: TextStyle(color: Colors.white, fontSize: 16), - ), - Container( - margin: EdgeInsets.only(left: 6), - child: Text( - '剩余聊天次数', - style: TextStyle(color: Color(0xFF4D4D4D), fontSize: 12), - ), + style: const TextStyle(color: Color(0xFFFF9000), fontSize: 17), ), ], ), @@ -298,6 +302,52 @@ class _MePageState extends State { ) : Container(), + ///看广告 + GestureDetector( + onTap: () { + Map map = { + "playAd": "playAd", + }; + invokeNativeMethod("playAd", map); + }, + child: Container( + width: size.width, + height: 62, + margin: EdgeInsets.only(left: 15, right: 15, top: 20), + decoration: const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(10)), + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + Color(0xFFB0B6D3), + Color(0xFF96A5F5), + ], + ), + ), + child: const Stack( + alignment: Alignment.center, + children: [ + Positioned( + top: 15, + left: 12, + child: Text( + "看广告获得聊天次数", + style: TextStyle(fontSize: 12, color: Color(0xFF3248B6)), + )), + Positioned( + top: 34, + left: 12, + child: Text( + "看一次广告可获得10次聊天", + style: TextStyle(fontSize: 15, color: Color(0xFF3248B5)), + )), + Positioned(right: 15, child: Image(width: 36, height: 36, image: AssetImage('assets/images/ic_ad.png'))) + ], + ), + ), + ), + // Container( // height: h50, // margin: EdgeInsets.symmetric(horizontal: 16), @@ -409,4 +459,12 @@ class _MePageState extends State { ); }).toList(); } + + // 获取原生的值 + invokeNativeMethod(String method, Map map) async { + dynamic args; + try { + args = await Global.method.invokeMethod(method, map); + } on PlatformException catch (e) {} + } } diff --git a/lib/tools/start_page.dart b/lib/tools/start_page.dart index f188036..1d9b693 100644 --- a/lib/tools/start_page.dart +++ b/lib/tools/start_page.dart @@ -19,7 +19,7 @@ class StartPage extends StatefulWidget { class _StartPageState extends State { late StreamSubscription subscription; - LoginModel _viewmodel = new LoginModel(); + final LoginModel _viewmodel = LoginModel(); @override void initState() { diff --git a/pubspec.yaml b/pubspec.yaml index 2d6135c..efe4044 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.1+2 environment: - sdk: '>=3.4.1 <4.0.0' + sdk: '>=2.17.1 <3.0.0' dependencies: @@ -42,7 +42,7 @@ dependencies: image_picker: ^0.8.4 permission_handler: ^10.4.5 image_gallery_saver: ^2.0.3 - web_socket_channel: ^3.0.0 + web_socket_channel: ^2.0.0 flutter_client_sse: ^2.0.1 expandable_text: ^2.3.0 card_swiper: ^3.0.1 @@ -59,7 +59,7 @@ dev_dependencies: sdk: flutter flutter_lints: ^3.0.0 - build_runner: ^2.4.11 + build_runner: ^2.2.0 json_serializable: ^6.8.0