Merge remote-tracking branch 'origin/main'

# Conflicts:
#	lib/main.dart
#	lib/tools/HomePage.dart
This commit is contained in:
18631081161 2024-06-15 14:45:15 +08:00
commit ee6b25f9b6
12 changed files with 213 additions and 56 deletions

View File

@ -0,0 +1,24 @@
import 'package:json_annotation/json_annotation.dart';
part 'EpgCategoryListBean.g.dart';
@JsonSerializable(explicitToJson: true)
class EpgCategoryListBean {
String? CategoryName;
String? CategoryType;
bool? HasMore;
int? RowNum;
bool? IsQuickStartPopUp;
EpgCategoryListBean(this.CategoryName, this.CategoryType, this.HasMore,
this.RowNum, this.IsQuickStartPopUp, );
factory EpgCategoryListBean.fromJson(Map<String, dynamic> json) => _$EpgCategoryListBeanFromJson(json);
Map<String, dynamic> toJson() => _$EpgCategoryListBeanToJson(this);
}

View File

@ -0,0 +1,26 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'EpgCategoryListBean.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
EpgCategoryListBean _$EpgCategoryListBeanFromJson(Map<String, dynamic> json) =>
EpgCategoryListBean(
json['CategoryName'] as String?,
json['CategoryType'] as String?,
json['HasMore'] as bool?,
(json['RowNum'] as num?)?.toInt(),
json['IsQuickStartPopUp'] as bool?,
);
Map<String, dynamic> _$EpgCategoryListBeanToJson(
EpgCategoryListBean instance) =>
<String, dynamic>{
'CategoryName': instance.CategoryName,
'CategoryType': instance.CategoryType,
'HasMore': instance.HasMore,
'RowNum': instance.RowNum,
'IsQuickStartPopUp': instance.IsQuickStartPopUp,
};

View File

@ -0,0 +1,20 @@
import 'package:json_annotation/json_annotation.dart';
import 'EpgCategoryListBean.dart';
part 'HallEpgListBean.g.dart';
@JsonSerializable(explicitToJson: true)
class HallEpgListBean {
List<EpgCategoryListBean>? EpgCategoryList;
HallEpgListBean(this.EpgCategoryList);
factory HallEpgListBean.fromJson(Map<String, dynamic> json) => _$HallEpgListBeanFromJson(json);
Map<String, dynamic> toJson() => _$HallEpgListBeanToJson(this);
}

View File

@ -0,0 +1,20 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'HallEpgListBean.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
HallEpgListBean _$HallEpgListBeanFromJson(Map<String, dynamic> json) =>
HallEpgListBean(
(json['EpgCategoryList'] as List<dynamic>?)
?.map((e) => EpgCategoryListBean.fromJson(e as Map<String, dynamic>))
.toList(),
);
Map<String, dynamic> _$HallEpgListBeanToJson(HallEpgListBean instance) =>
<String, dynamic>{
'EpgCategoryList':
instance.EpgCategoryList?.map((e) => e.toJson()).toList(),
};

View File

@ -21,9 +21,7 @@ class Global {
}
static Global _getInstance() {
if (_instance == null) {
_instance = new Global._internal();
}
_instance ??= Global._internal();
return _instance!;
}

View File

@ -13,11 +13,11 @@ Future<void> main() async {
await runZonedGuarded(() async {
WidgetsFlutterBinding.ensureInitialized();
Global.initialize().then((e) {
new Global();
runApp(ChatApp());
Global();
runApp(const ChatApp());
if (Platform.isAndroid) {
// android状态栏为透明的沉浸set赋值MaterialApp组件会覆盖掉这个值
SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.transparent);
SystemUiOverlayStyle systemUiOverlayStyle = const SystemUiOverlayStyle(statusBarColor: Colors.transparent);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
}
});
@ -35,8 +35,6 @@ class ChatApp extends StatefulWidget {
class _ChatAppState extends State<ChatApp> {
@override
void initState() {
// TODO: implement initState
@ -48,13 +46,11 @@ class _ChatAppState extends State<ChatApp> {
Widget build(BuildContext context) {
return MaterialApp(
title: 'AI聊天',
home: Homepage(),
home: const Homepage(),
//
routes: <String, WidgetBuilder>{
'/HomePage': (BuildContext context) => Homepage(),
'/HomePage': (BuildContext context) => const Homepage(),
},
debugShowMaterialGrid: false,
//
debugShowCheckedModeBanner: false,

View File

@ -11,12 +11,11 @@ class BaseEntity {
//
factory BaseEntity.fromJson(json) {
Map<String, dynamic> responseData = jsonDecode(json);
int code = responseData["Code"];
int result = responseData["Result"];
String message = responseData["Message"]; //
dynamic data = responseData["Data"];
return BaseEntity(code: code, result: result, message: message, data: data);
Map<String, dynamic> responseData = json;
dynamic data = json["choices"][0]["message"]["content"];
return BaseEntity(data: data);
}
//

View File

@ -9,13 +9,13 @@ class NetworkConfig {
static int SELECT_INDEX = 0;
static List BASE_URLS = [
"http://127.0.0.1:7860/",
"http://127.0.0.1:7860/",
"http://127.0.0.1:7860/",
"http://117.50.182.144:5000",
"http://117.50.182.144:5000",
"http://117.50.182.144:5000",
];
static List BASE_URLS_AI = [
"http://127.0.0.1:7860/",
"http://117.50.182.144:5000",
];
@ -35,4 +35,6 @@ class NetworkConfig {
static const String login = "login"; //
static const String chat = "/v1/chat/completions"; //
}

View File

@ -60,15 +60,7 @@ class RequestCenter {
responseType: ResponseType.json));
_dioLog!.interceptors.add(DioLogInterceptor());
// if (NetworkConfig.isAgent) {
// (_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
// client.findProxy = (uri) {
// return "PROXY 192.168.1.231:8888";
// };
// //Https包设置
// client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
// };
// }
}
}
@ -77,7 +69,6 @@ class RequestCenter {
{RequestMethod? method}) async {
Map<String, dynamic> headers = {
"AppId": NetworkConfig.AppId,
/*"BossId": NetworkConfig.BossId,*/
"userId": NetworkConfig.userId,
"Version": NetworkConfig.Version,
"Language": NetworkConfig.Language
@ -133,22 +124,12 @@ class RequestCenter {
}
// post
Future<BaseEntity?> request(path, Map<String, dynamic> parmeters, Function(BaseEntity dataEntity) success, Function(ErrorEntity errorEntity) error,
Future<BaseEntity?> request(path, Object parmeters, Function(BaseEntity dataEntity) success, Function(ErrorEntity errorEntity) error,
{RequestMethod? method}) async {
Map<String, dynamic> headers = {
"AppId": NetworkConfig.AppId,
/*"BossId": NetworkConfig.BossId,*/
"userId": NetworkConfig.userId,
"Version": NetworkConfig.Version,
"Language": NetworkConfig.Language
};
parmeters.addAll(headers);
//
Map<String, dynamic> parmetersSign = sign(parmeters);
try {
FormData formData = FormData.fromMap(parmetersSign);
Response response = await _dio!.post(path, data: formData);
if (response != null && response.statusCode == 200) {
//FormData formData = FormData.fromMap(parmeters);
Response response = await _dio!.post(path, data: parmeters);
if (response.statusCode == 200) {
BaseEntity entity = BaseEntity.fromJson(response.data);
success(entity);
return entity;

55
lib/tools/HomeModel.dart Normal file
View File

@ -0,0 +1,55 @@
import 'dart:async';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../beans/HallEpgListBean.dart';
import '../common/Global.dart';
import '../network/BaseEntity.dart';
import '../network/NetworkConfig.dart';
import '../network/RequestCenter.dart';
class HomeModel {
StreamController streamController = StreamController.broadcast();
HomeModel() {
setup();
}
void setup() {
//
}
//
Future<void> chat(message, character) async {
var nowTime = DateTime.now(); //
var nTime = nowTime.millisecondsSinceEpoch; //()13
RequestCenter.instance.request(NetworkConfig.chat, {
"messages": [
{"role": "user", "content": message}
],
"mode": "chat",
"character": character
}, (BaseEntity dataEntity) {
String json = dataEntity.data;
streamController.sink.add({
'code': "chat", //
'data': json,
});
}, (ErrorEntity errorEntity) {
streamController.sink.add({
'code': "0", //
'data': errorEntity.message,
});
});
}
//
invokeNativeMethod(String method, Map<String, Object> map) async {
dynamic args;
try {
args = await Global.method.invokeMethod(method, map);
} on PlatformException catch (e) {}
}
}

View File

@ -1,4 +1,10 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'HomeModel.dart';
import 'Message.dart';
@ -10,29 +16,55 @@ class Homepage extends StatefulWidget {
}
class _HomepageState extends State<Homepage> {
List<Message> list = [];
final TextEditingController _chatController = TextEditingController();
String chatText = "";
late StreamSubscription subscription;
final HomeModel viewModel = HomeModel();
final TextEditingController _controller1 = TextEditingController();
String text = "";
String data = '';
Future<void> chat() async {
viewModel.chat(text,'Assistant');
}
@override
void initState() {
// TODO: implement initState
super.initState();
list = [Message('你好', false), Message('你好', true)];
//
_chatController.addListener(() {
chatText = _chatController.text;
print("内容监听1${_chatController.text}");
//
_controller1.addListener(() {
print(_controller1.text);
});
subscription = viewModel.streamController.stream.listen((newData) {
String code = newData['code'];
if (code.isNotEmpty) {
if (code == "chat") {
//
data = newData['data'];
setState(() {
});
//EasyLoading.showToast(data);
print("data" + data.toString());
}
} else {
EasyLoading.dismiss();
}
});
}
void _textFieldChanged1(String str) {
text = str;
}
@override
void dispose() {
_chatController.dispose();
// TODO: implement dispose
subscription.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(

View File

@ -35,6 +35,8 @@ dependencies:
cupertino_icons: ^1.0.6
flutter_easyloading: ^3.0.5
crypto: ^3.0.3
shared_preferences: ^2.0.7
json_annotation: ^4.9.0
dev_dependencies:
flutter_test:
@ -46,6 +48,8 @@ dev_dependencies:
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^3.0.0
build_runner: ^2.4.11
json_serializable: ^6.8.0
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec