Commit 1c1e22c6 authored by 关振斌's avatar 关振斌

update ios design

parent 545df9e8
......@@ -136,6 +136,15 @@ class UserAPI {
// return ApplePayEntity.fromMap(response['data']);
}
static Future<int> sceneGeneral(Map<String, dynamic> parameters) async {
var response = await HttpUtil().post(
'/scene/sceneGeneral/${parameters['detailId']}',
data: parameters['arr'],
);
return response['status'];
// return ApplePayEntity.fromMap(response['data']);
}
// /api/
// openAi/createConversion
......
......@@ -62,7 +62,7 @@ class DetailData {
String? _updateTime;
int? _isDelete;
int? _isShow;
Null? _value;
String? _value;
int? _sort;
DetailData(
......@@ -74,7 +74,7 @@ class DetailData {
String? updateTime,
int? isDelete,
int? isShow,
Null? value,
String? value,
int? sort}) {
if (id != null) {
this._id = id;
......@@ -124,8 +124,8 @@ class DetailData {
set isDelete(int? isDelete) => _isDelete = isDelete;
int? get isShow => _isShow;
set isShow(int? isShow) => _isShow = isShow;
Null? get value => _value;
set value(Null? value) => _value = value;
String? get value => _value;
set value(String? value) => _value = value;
int? get sort => _sort;
set sort(int? sort) => _sort = sort;
......
......@@ -130,34 +130,34 @@ class ApplicationController extends GetxController {
bottomTabs = <BottomNavigationBarItem>[
// ignore: unnecessary_new
const BottomNavigationBarItem(
icon: Image(image: AssetImage("assets/images/home.png"), width: 24.0),
icon: Image(image: AssetImage("assets/images/home.png"), width: 30.0),
activeIcon: Image(
image: AssetImage("assets/images/home-selected.png"), width: 24.0),
image: AssetImage("assets/images/home-selected.png"), width: 30.0),
label: '百晓通',
backgroundColor: AppColors.primaryBackground,
),
const BottomNavigationBarItem(
icon:
Image(image: AssetImage("assets/images/product.png"), width: 24.0),
Image(image: AssetImage("assets/images/product.png"), width: 30.0),
activeIcon: Image(
image: AssetImage("assets/images/product-selected.png"),
width: 24.0),
width: 30.0),
label: '创作',
backgroundColor: AppColors.primaryBackground,
),
const BottomNavigationBarItem(
icon: Image(
image: AssetImage("assets/images/assistant.png"), width: 24.0),
image: AssetImage("assets/images/assistant.png"), width: 30.0),
activeIcon: Image(
image: AssetImage("assets/images/assistant-selected.png"),
width: 24.0),
width: 30.0),
label: '私人助理',
backgroundColor: AppColors.primaryBackground,
),
const BottomNavigationBarItem(
icon: Image(image: AssetImage("assets/images/my.png"), width: 24.0),
icon: Image(image: AssetImage("assets/images/my.png"), width: 30.0),
activeIcon: Image(
image: AssetImage("assets/images/my-selected.png"), width: 24.0),
image: AssetImage("assets/images/my-selected.png"), width: 30.0),
label: '我的',
backgroundColor: AppColors.primaryBackground,
),
......
......@@ -103,8 +103,9 @@ class ApplicationPage extends GetView<ApplicationController> {
// letIndexChange: (index) => true,
// ),
return Obx(() => BottomNavigationBar(
// #363b48
backgroundColor: Color.fromARGB(0, 54, 59, 72),
backgroundColor: Color.fromARGB(120, 0, 0, 0),
//
// Color.fromARGB(255, 54, 59, 72),
// Color.argb(255, 82, 88, 103)
......@@ -114,6 +115,7 @@ class ApplicationPage extends GetView<ApplicationController> {
items: controller.bottomTabs,
currentIndex: controller.state.page,
// fixedColor: AppColors.primaryElement,
landscapeLayout: BottomNavigationBarLandscapeLayout.spread,
type: BottomNavigationBarType.fixed,
onTap: controller.handleNavBarTap,
showSelectedLabels: true,
......
......@@ -107,8 +107,21 @@ class GridWidget extends GetView<AssistantController> {
increaseWidthBy: -10.00,
callback: () {},
// controller.requestPurchase,
gradient:
Gradients.cosmicFusion,
gradient: const LinearGradient(
colors: [
// 61, 63, 84
// 180deg,
// #be6afb,
// #9c67f6,
// #7965f8
Color(0xFFbe6afb),
Color(0xFF9c67f6),
Color(0xFF7965f8)
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
// shadowColor: Gradients
// .backToFuture.colors.last
// .withOpacity(0.25),
......
import 'dart:convert';
import 'package:chart/common/apis/apis.dart';
import 'package:chart/common/entities/detail.dart';
import 'package:chart/common/store/user.dart';
import 'package:chart/common/values/server.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_client_sse/flutter_client_sse.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'index.dart';
class CreationDetailController extends GetxController {
static CreationDetailController get to => Get.put(CreationDetailController());
late var sse;
CreationDetailController();
final scrollController = ScrollController();
Map<String, TextEditingController> inputControllerMap = {
'input1': TextEditingController(),
'input2': TextEditingController(),
};
final state = CreationDetailState();
// final
......@@ -19,15 +33,100 @@ class CreationDetailController extends GetxController {
);
}
void updateState(String title, List<DetailData> items) {
getController(int key) {
return inputControllerMap['input$key'];
}
void updateState(String id, String title, List<DetailData> items) {
state.title = title;
state.detailList.value = [];
state.id = id;
// state.detailList.value = [];
items.sort((a, b) => a.sort! - b.sort!);
// input1
state.detailList.addAll(items);
}
void hideKeyboard() => FocusManager.instance.primaryFocus?.unfocus();
void genInner() async {
await initEventSource();
TextEditingController input1 = inputControllerMap['input1']!;
TextEditingController input2 = inputControllerMap['input2']!;
if (input1.text.trim().isEmpty || input2.text.trim().isEmpty) {
EasyLoading.showToast("请输入完整内容");
} else {
state.detailList.forEach((el) {
if (el.sort == 1) {
el.value = input1.text;
} else {
el.value = input2.text;
}
});
hideKeyboard();
EasyLoading.show(status: "AI正在生成中...");
try {
state.isLoading = true;
await NewsAPI.sendMessageByDetailId(state.detailList.value, state.id);
if (state.genText.isNotEmpty) {
state.genText = '';
}
// state.isLoading = false;
} catch (e) {
state.isLoading = false;
// EasyLoading.dismiss();
}
EasyLoading.dismiss();
}
}
initEventSource() async {
final _this = this;
// if (UserStore.to.isLogin) {
sse = SSEClient.subscribeToSSE(
url: "$SERVER_API_URL/openAi/connect/${UserStore.to.profile.id}",
header: {}).listen((event) async {
print('$event 1213213131');
if (event.data!.trim().isEmpty) {
return;
} else if (event.id == "[DONE]") {
// await UserAPI.saveResp({
// "conversionId": state.conversionId,
// "content": state.messageList[0].text,
// });
_this.state.isLoading = false;
return;
}
Map<String, dynamic> jsonMap = jsonDecode("${event.data}");
state.genText = state.genText + "${jsonMap['content']}";
});
// print(sse);
}
bool back() {
state.detailList.value = [];
inputControllerMap['input1']!.text = '';
inputControllerMap['input2']!.text = '';
state.genText = '';
return true;
}
/// 在 widget 内存中分配后立即调用。
@override
void onInit() {
// _focusNode.addListener(() {
// if (_focusNode.hasFocus) {//有焦点
// }else{ //失去焦点
// }
// });
// scrollController.addListener(() {
// print('scrollController$scrollController');
// });
super.onInit();
}
......@@ -46,6 +145,8 @@ class CreationDetailController extends GetxController {
/// dispose 释放内存
@override
void dispose() {
print(21321);
SSEClient.unsubscribeFromSSE();
super.dispose();
}
}
......@@ -7,5 +7,17 @@ class CreationDetailState {
set title(value) => _title.value = value;
get title => _title.value;
final _id = "".obs;
set id(value) => _id.value = value;
get id => _id.value;
final _genText = "".obs;
set genText(value) => _genText.value = value;
get genText => _genText.value;
final _isLoading = false.obs;
set isLoading(value) => _isLoading.value = value;
get isLoading => _isLoading.value;
RxList detailList = [].obs;
}
......@@ -21,28 +21,23 @@ class CreationDetailPage extends GetView<CreationDetailController> {
image: DecorationImage(
image: Image.asset("assets/images/background.png").image,
fit: BoxFit.cover),
// gradient: LinearGradient(
// begin: Alignment.topCenter,
// end: Alignment.bottomCenter,
// // background: linear-gradient(180deg, #0F172A 0%, #0F1B38 100%);
// colors: [
// Color(0xFF0F172A),
// Color(0xFF0F1B38),
// ],
// ),
),
child: Obx(() => Scaffold(
child: Obx(
() => WillPopScope(
onWillPop: () async {
return controller.back();
},
child: Scaffold(
backgroundColor: Color.fromARGB(0, 29, 33, 60),
appBar: AppBar(
backgroundColor: Color.fromARGB(0, 29, 33, 60),
title: Text('${controller.state.title}'),
elevation: 0),
body: Container(
child: SafeArea(
child: _buildView(),
),
)),
)),
);
));
},
);
}
......
import 'package:chart/common/entities/detail.dart';
import 'package:chart/pages/frame/android_pay_list/widgets/helloword.dart';
import 'package:flutter/material.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:get/get.dart';
import 'package:gradient_borders/gradient_borders.dart';
import 'package:gradient_widgets/gradient_widgets.dart';
import '../index.dart';
......@@ -11,113 +14,256 @@ class HelloWidget extends GetView<CreationDetailController> {
@override
Widget build(BuildContext context) {
return Obx(() => Container(
padding: EdgeInsets.symmetric(
return Obx(() => Column(
children: [
Expanded(
child: ListView(
reverse: !controller.state.genText.isEmpty,
controller: controller.scrollController,
children: [
GestureDetector(
onTap: () {
controller.hideKeyboard();
},
child: Container(
color: const Color.fromARGB(0, 0, 0, 0),
padding: const EdgeInsets.symmetric(
horizontal: 10,
),
child: Column(
child: Stack(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: controller.state.detailList.map((element) {
children: [
...controller.state.detailList.map((element) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text('${element.label}'),
TextField(
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 10, vertical: 20),
child: Row(
children: [
Container(
width: 3,
height: 22,
decoration: BoxDecoration(
color:
const Color(0xFFb05ddd),
borderRadius:
BorderRadius.circular(
20)),
margin: const EdgeInsets.only(
right: 5),
),
Text('${element.label}',
style: const TextStyle(
fontSize: 16,
fontWeight:
FontWeight.w500)),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 10),
child: TextField(
textInputAction:
TextInputAction.next,
// focusNode: _focusNode,
controller: controller
.getController(element.sort),
// coo ._remarkControllers[t.key],
decoration: InputDecoration(
isDense: true,
hintText: '${element.placeHolder}',
filled: true,
// isDense: true,
hintText:
'${element.placeHolder}',
// filled: true,
// fillColor: fillColor ?? Colors.grey[100],
contentPadding: const EdgeInsets.only(
contentPadding:
const EdgeInsets.only(
left: 18,
top: 15,
bottom: 15,
),
// suffixIcon: IconButton(
// onPressed: sendMessage,
// icon: Icon(
// Icons.send,
// size: 30,
// ),
// // rgba(123, 238, 251, 1.00)
// // rgba(122, 239, 251, 1.00)
// color: Color.fromRGBO(123, 238, 251, 1),
// ),
// Icon(Icons.abc_rounded),
// border: const InputBorder()
// border: OutlineInputBorder(
// borderRadius: BorderRadius.circular(10),
// borderSide: const BorderSide(
// width: 10,
// style: BorderStyle.solid,
// ),
// ),
// rgba(116, 112, 249, 1.00)
enabledBorder: const GradientOutlineInputBorder(
enabledBorder:
const GradientOutlineInputBorder(
// rgba(140, 197, 208, 1.00)
// borderRadius: BorderRadius.circular(10),
gradient: LinearGradient(colors: [
gradient:
LinearGradient(colors: [
Color(0xFFb05ddd),
Color(0xFFb05ddd),
]),
width: 1,
),
disabledBorder: const GradientOutlineInputBorder(
// rgba(140, 197, 208, 1.00)
// borderRadius: BorderRadius.circular(10),
// ignore: prefer_const_literals_to_create_immutables
gradient: LinearGradient(colors: [
disabledBorder:
const GradientOutlineInputBorder(
gradient:
LinearGradient(colors: [
Color(0xFFb05ddd),
Color(0xFFb05ddd),
]),
width: 1,
),
// OutlineInputBorder(
// borderRadius:
// BorderRadius.circular(10),
// borderSide: const BorderSide(
// width: 5,
// style: BorderStyle.solid,
// ),
// ),
focusedBorder: const GradientOutlineInputBorder(
focusedBorder:
const GradientOutlineInputBorder(
// rgba(140, 197, 208, 1.00)
// borderRadius: BorderRadius.circular(10),
gradient: LinearGradient(colors: [
gradient:
LinearGradient(colors: [
Color(0xFFb05ddd),
Color(0xFFb05ddd),
]),
width: 1,
),
// focusedBorder: OutlineInputBorder(
// borderRadius: BorderRadius.circular(10),
// borderSide: const BorderSide(
// width: 5,
// style: BorderStyle.solid,
// ),
// ),
),
style: TextStyle(
style: const TextStyle(
// color: AppColors.primaryText,
fontWeight: FontWeight.w400,
fontSize: 14,
),
maxLines: 1,
// autocorrect: false, // 自动纠正
// obscureText: isPassword, // 隐藏输入内容, 密码框
),
)),
],
);
}).toList(),
// children: controller.state.detailList
// .map((element) => element.label)
// .toList()
// children: [
// Text('${controller.state.detailList.length}'),
// ],
)));
controller.state.genText.isEmpty
? SizedBox.shrink()
: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 10, vertical: 20),
child: Row(
children: [
Container(
width: 3,
height: 22,
decoration: BoxDecoration(
color: const Color(
0xFFb05ddd),
borderRadius:
BorderRadius.circular(
20)),
margin: const EdgeInsets.only(
right: 5),
),
const Text('生成结果',
style: TextStyle(
fontSize: 16,
fontWeight:
FontWeight.w500)),
],
),
),
Padding(
padding:
const EdgeInsets.symmetric(
horizontal: 10),
child: Container(
padding:
const EdgeInsets.all(20),
width: Get.width,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
4),
gradient:
const LinearGradient(
colors: [
// 61, 63, 84
Color.fromARGB(
75, 61, 63, 84),
Color.fromARGB(
75, 51, 52, 80),
Color.fromARGB(
75, 43, 43, 77)
],
begin:
Alignment.topCenter,
end: Alignment
.bottomCenter,
),
),
child: Text(controller
.state.genText))),
const SizedBox(
height: 20,
)
],
)
],
)
],
)),
),
])),
KeyboardVisibilityBuilder(builder: (context, visible) {
return Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [
// 61, 63, 84
Color.fromARGB(135, 61, 63, 84),
Color.fromARGB(135, 51, 52, 80),
Color.fromARGB(135, 43, 43, 77)
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
// color: Colors.red,
padding: EdgeInsets.only(
top: 10,
bottom: visible ? 10 : 50,
),
// EdgeInsets.all(visible ? 10 : 30),
child: Obx(() => GradientButton(
isEnabled: !controller.state.isLoading,
increaseHeightBy: 10.00,
increaseWidthBy: Get.width * .7,
callback: controller.genInner,
shapeRadius: const BorderRadius.all(Radius.circular(5)),
// controller.requestPurchase,
// gradient: Gradients.cosmicFusion,
// background-image: linear-gradient(180deg, #3d3f54, #333450, #2b2b4d);
elevation: 0,
gradient: const LinearGradient(
colors: [
// 61, 63, 84
// 180deg,
// #be6afb,
// #9c67f6,
// #7965f8
Color(0xFFbe6afb),
Color(0xFF9c67f6),
Color(0xFF7965f8)
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
child: Text(
controller.state.isLoading
? 'AI正在生成中...'
: controller.state.genText.isEmpty
? 'AI生成'
: '重新生成',
style: TextStyle(
fontSize: 14, fontWeight: FontWeight.w500)),
))
// decoration: ,
// height: visible ? 100 : 200,
);
}),
],
));
}
}
......@@ -37,10 +37,11 @@ class CreationController extends GetxController {
size: 30,
));
Vibrate.feedback(FeedbackType.impact);
final res = await UserAPI.getDetailParamsByDetailId(item.classifyId);
final res = await UserAPI.getDetailParamsByDetailId(item.id);
EasyLoading.dismiss();
CreationDetailController.to.updateState(item.detailName, res.data!);
CreationDetailController.to
.updateState('${item.id}', item.detailName, res.data!);
Get.toNamed(AppRoutes.CREATION_PAGE_DETAIL);
//
}
......
......@@ -96,7 +96,7 @@ class GridWidget extends GetView<CreationController> {
image: Image.network(
'${controller.list[index].icon}')
.image,
fit: BoxFit.fitWidth,
fit: BoxFit.fitHeight,
// colorFilter: ColorFilter.mode(Colors.red, BlendMode.colorBurn),
),
),
......@@ -105,18 +105,31 @@ class GridWidget extends GetView<CreationController> {
MainAxisAlignment.end,
children: [
GradientButton(
child: Text('2.8万人使用',
child: const Text('2.8万人使用',
style: TextStyle(
fontSize: 10)),
increaseHeightBy: -10.00,
increaseWidthBy: -10.00,
callback: () {},
callback: () {
controller.onTap(
controller.list[index]);
},
// controller.requestPurchase,
gradient:
Gradients.cosmicFusion,
shadowColor: Gradients
.backToFuture.colors.last
.withOpacity(0.25),
gradient: const LinearGradient(
colors: [
// 61, 63, 84
// 180deg,
// #be6afb,
// #9c67f6,
// #7965f8
Color(0xFFbe6afb),
Color(0xFF9c67f6),
Color(0xFF7965f8)
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
)
],
)
......
......@@ -19,47 +19,36 @@ class PayListPage extends GetView<PayListController> {
@override
Widget build(BuildContext context) {
final c = Get.put(PayListController());
return Scaffold(
// appBar: transparentAppBar(
// title: Text(
// "套餐选择",
// style: TextStyle(
// color: AppColors.primaryElementText,
// fontFamily: 'Montserrat',
// fontSize: 18,
// fontWeight: FontWeight.w600,
// ),
// ),
// leading: IconButton(
// tooltip: '返回上一页',
// icon: const Icon(
// Icons.arrow_back,
// color: AppColors.primaryElementText,
// ),
// onPressed: () async {
// // Get.back();
// // Get.offAll(ApplicationPage());
// // await Get.off(ApplicationPage());
// // Get.toNamed(AppRoutes.Application);
// Get.back();
// // await Get.toNamed();
// // Navigator.of(context).pop();
// //_nextPage(-1);
// },
// ),
// ),
// _buildView
body: Container(
width: double.infinity,
return Container(
// color: Colors.amber,
height: double.infinity,
// padding: EdgeInsets.symmetric(horizontal: 20),
// width: Get.width,
decoration: BoxDecoration(
image: DecorationImage(
image: Image.asset("assets/images/bg1.png").image,
image: Image.asset("assets/images/background.png").image,
fit: BoxFit.cover),
),
child: _buildView()),
child: Scaffold(
appBar: AppBar(
elevation: 0,
backgroundColor: const Color.fromARGB(0, 0, 0, 0),
title: Text("订阅中心"),
),
backgroundColor: const Color.fromARGB(0, 0, 0, 0),
body: _buildView()
// Container(
// // child: Text("12312"),
// // width: double.infinity,
// // height: double.infinity,
// // // padding: EdgeInsets.symmetric(horizontal: 20),
// // decoration: BoxDecoration(
// // image: DecorationImage(
// // image: Image.asset("assets/images/bg1.png").image,
// // fit: BoxFit.cover),
// // ),
// // child:
// ),
),
);
}
}
import 'package:chart/common/routers/names.dart';
import 'package:chart/common/store/user.dart';
import 'package:flutter/material.dart';
import 'package:flutter_vibrate/flutter_vibrate.dart';
import 'package:get/get.dart';
import 'package:glassy/glassy_button.dart';
import 'package:glassy/glassy_card.dart';
import 'package:glassy/glassy_config.dart';
import 'package:gradient_widgets/gradient_widgets.dart';
import 'package:url_launcher/url_launcher.dart';
import '../index.dart';
const color = Color(0xff8AFBFF);
/// hellowrod
class PayItemWidget extends GetView<PayListController> {
@override
Widget build(BuildContext context) {
final c = Get.put(UserStore());
return Container(
// padding: EdgeInsets.only(top: 40, bottom: 40),
child: Column(
children: [
Container(
// padding: EdgeInsets.all(0),
// color: Colors.red,
height: Get.mediaQuery.size.height * 0.35,
child: Stack(
// ignore: prefer_const_literals_to_create_immutables
children: [
Align(
alignment: Alignment.topLeft,
child: InkWell(
onTap: () => Get.back(),
child: Container(
// color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20, vertical: 20),
child: Icon(
Icons.close_outlined,
color: Colors.white,
),
)),
),
Align(
alignment: Alignment.topRight,
child: InkWell(
// restorePurchases
onTap: controller.restorePurchases,
child: Container(
// color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20, vertical: 20),
child: Text(
"恢复购买",
style: TextStyle(color: color, fontSize: 16),
),
)),
),
Obx(() => c.profile.expireTime == null
? Text("")
: Align(
alignment: Alignment.bottomCenter,
child: Container(
// color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20, vertical: 0),
child: RichText(
text: TextSpan(children: [
TextSpan(
text: '您的VIP会员资格将于',
style: TextStyle(
color: color,
fontSize: 14,
),
),
TextSpan(
text:
" ${c.profile.expireTime.year}-${c.profile.expireTime.month}-${c.profile.expireTime.day} "),
TextSpan(
text: '过期,如果您是自动续费会员将会在过期日前一天自动续费。',
style: TextStyle(
color: color,
fontSize: 14,
),
),
// Text(
// "您的VIP会员资格将于" +
// "${c.profile.expireTime.year}-${c.profile.expireTime.month}-${c.profile.expireTime.day}" +
// "过期,如果您是自动续费会员将会在过期日前一天自动续费。",
// textAlign: TextAlign.center,
// style: TextStyle(
// color: color,
// fontSize: 14,
// ),
// )
])),
),
)),
// Text("data"),
// ignore: prefer_const_constructors
Align(
alignment: Alignment.centerLeft,
child: Image(
image: AssetImage("assets/images/left.png"),
width: Get.mediaQuery.size.height * 0.17,
),
// child: Container(
// width: getRelativeHeight(0.13),
// height: getRelativeHeight(0.13),
// decoration: BoxDecoration(
// border:
// Border.all(width: 15, color: circleColor.withOpacity(0.6)),
// shape: BoxShape.circle,
// ),
// ),
),
Align(
alignment: Alignment.center,
child: Image(
image: AssetImage("assets/images/center.png"),
width: Get.mediaQuery.size.height * 0.21,
),
// child: Container(
// width: getRelativeHeight(0.11),
// height: getRelativeHeight(0.11),
// decoration: BoxDecoration(
// border:
// Border.all(width: 15, color: circleColor.withOpacity(0.25)),
// shape: BoxShape.circle,
// ),
// ),
),
Align(
alignment: Alignment.centerRight,
child: Image(
image: AssetImage("assets/images/you.png"),
width: Get.mediaQuery.size.height * 0.17,
),
// child: Container(
// width: getRelativeHeight(0.11),
// height: getRelativeHeight(0.11),
// decoration: BoxDecoration(
// border:
// Border.all(width: 15, color: circleColor.withOpacity(0.17)),
// shape: BoxShape.circle,
// ),
// ),
),
],
)),
Expanded(
child: Container(
padding: EdgeInsets.all(10),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Icon(Icons.send, color: color),
Text(" 选择自己需要的套餐",
style: TextStyle(color: color, fontSize: 20))
],
),
Container(
margin: EdgeInsets.only(top: 20),
padding: EdgeInsets.only(left: 10),
height: Get.mediaQuery.size.height * 0.14,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Obx(() => controller.state.selected ==
'com.wudi.monthly_pass_chat'
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
Row(
// crossAxisAlignment
children: [
Icon(Icons.check, color: color),
Text("月卡(31)天会员",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("1.6元/天",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("无限次与AI助手聊天",
style: TextStyle(
color: color, fontSize: 16))
],
)
],
)
: controller.state.selected ==
'com.wudi.app.monthly_pass'
? Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
Row(
// crossAxisAlignment
children: [
Icon(Icons.check, color: color),
Text("月卡(30天)会员",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("无限聊天",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("解锁所有高级功能",
style: TextStyle(
color: color, fontSize: 16))
],
)
],
)
: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
Row(
// crossAxisAlignment
children: [
Icon(Icons.check, color: color),
Text("年卡(365)天会员",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("1.3元/天",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("无限次与AI助手聊天",
style: TextStyle(
color: color, fontSize: 16))
],
)
],
)),
Image(
image: AssetImage("assets/images/center-1.png"),
width: Get.mediaQuery.size.height * 0.17,
),
],
),
),
Obx(() => Container(
margin: EdgeInsets.only(top: 20),
child: Row(
// final String? productId;
// final String? price;
// final String? currency;
// final String? localizedPrice;
// final String? title;
// final String? description;
// final String? introductoryPrice;
children: controller.state.items
.asMap()
.keys
.map(
(item) => Expanded(
child: InkWell(
onTap: () {
Vibrate.feedback(
FeedbackType.selection);
controller.state.selected = controller
.state.items[item].productId!;
//
// c.requestPurchase(item);
},
child: GlassyCard(
config: GlassyConfig(
backgroundColor: controller
.state
.items[item]
.productId! ==
controller.state.selected
? color
: Colors.grey),
child: Container(
height: 100,
padding: EdgeInsets.only(
top: 16,
left: 16,
right: 16,
bottom: 16),
// color: Colors.pink,
child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceAround,
children: [
Text(
'${controller.state.items[item].localizedPrice!}',
style: TextStyle(
color: Colors.white),
),
Text(
"${item == 0 ? '按月订阅' : item == 1 ? '按年订阅' : '周卡(7天)'}",
maxLines: 2,
overflow: TextOverflow.clip,
style: TextStyle(
color: Colors.white),
)
],
)),
))),
)
.toList(),
),
)),
// GlassyButton(onPressed: () {}, child: Text("GradientButton"))
Expanded(
child: Container(
margin: EdgeInsets.only(top: 20),
child: GradientButton(
child: Text('立即解锁'),
increaseHeightBy: 15.00,
increaseWidthBy: 200.00,
callback: controller.requestPurchase,
gradient: Gradients.cosmicFusion,
shadowColor:
Gradients.backToFuture.colors.last.withOpacity(0.25),
),
)),
// Expanded(
// child: Container(
// child: Row(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Icon(
// Icons.shield_moon,
// color: Colors.white,
// ),
// Text(
// "由App Store提供担保。随时随地取消",
// style: TextStyle(color: Colors.white),
// )
// ]),
// )),
Expanded(
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
InkWell(
onTap: () async {
Get.toNamed(AppRoutes.USER_EULA);
// final Uri _url = Uri.parse(
// 'https://docs.qq.com/doc/DY3pybXJ5Y1JLQm13');
// await launchUrl(_url);
},
child: RichText(
text: TextSpan(children: [
TextSpan(text: 'Tap To view the '),
TextSpan(
text: 'EULA',
style: TextStyle(color: color)),
]),
),
// child: Text(
// "Tap To view the EULA",
// style: TextStyle(color: Colors.white),
// ),
),
]),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.shield_moon,
color: Colors.white,
),
Text(
"由App Store提供担保。随时随地取消",
style: TextStyle(color: Colors.white),
)
]),
])))
// Container(
// padding: EdgeInsets.symmetric(horizontal: 40, vertical: 20),
// width: double.infinity,
// child:
// )
],
),
),
)
],
),
);
// Center(
// child:
// Obx(() => Text(
// "${controller.state.items.length}",
// style: TextStyle(color: Colors.amber, fontSize: 40),
// )),
// );
}
}
......@@ -9,6 +9,7 @@ import 'package:glassy/glassy_config.dart';
import 'package:gradient_widgets/gradient_widgets.dart';
import 'package:url_launcher/url_launcher.dart';
import '../index.dart';
// import 'package:flutter_barrage/flutter_barrage.dart';
const color = Color(0xff8AFBFF);
......@@ -17,70 +18,38 @@ class PayItemWidget extends GetView<PayListController> {
@override
Widget build(BuildContext context) {
final c = Get.put(UserStore());
return Container(
padding: EdgeInsets.only(top: 40, bottom: 40),
child: Column(
return ListView(
children: [
Container(
// padding: EdgeInsets.all(0),
// color: Colors.red,
height: Get.mediaQuery.size.height * 0.35,
child: Stack(
// ignore: prefer_const_literals_to_create_immutables
children: [
Align(
alignment: Alignment.topLeft,
child: InkWell(
onTap: () => Get.back(),
child: Container(
// color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20, vertical: 20),
child: Icon(
Icons.close_outlined,
color: Colors.white,
),
)),
),
Align(
alignment: Alignment.topRight,
child: InkWell(
// restorePurchases
onTap: controller.restorePurchases,
child: Container(
// color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20, vertical: 20),
child: Text(
"恢复购买",
style: TextStyle(color: color, fontSize: 16),
),
)),
),
Obx(() => c.profile.expireTime == null
? Text("")
? const Text(
"您还不是 VIP 会员",
style: TextStyle(
color: Color.fromARGB(255, 160, 165, 184),
fontSize: 14,
),
)
: Align(
alignment: Alignment.bottomCenter,
alignment: Alignment.center,
child: Container(
// color: Colors.amber,
padding: EdgeInsets.symmetric(
horizontal: 20, vertical: 0),
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 0),
child: RichText(
textAlign: TextAlign.center,
text: TextSpan(children: [
TextSpan(
const TextSpan(
text: '您的VIP会员资格将于',
style: TextStyle(
color: color,
color: Color.fromARGB(255, 160, 165, 184),
fontSize: 14,
),
),
TextSpan(
text:
" ${c.profile.expireTime.year}-${c.profile.expireTime.month}-${c.profile.expireTime.day} "),
TextSpan(
const TextSpan(
text: '过期,如果您是自动续费会员将会在过期日前一天自动续费。',
style: TextStyle(
color: color,
color: Color.fromARGB(255, 160, 165, 184),
fontSize: 14,
),
),
......@@ -97,349 +66,7 @@ class PayItemWidget extends GetView<PayListController> {
])),
),
)),
// Text("data"),
// ignore: prefer_const_constructors
Align(
alignment: Alignment.centerLeft,
child: Image(
image: AssetImage("assets/images/left.png"),
width: Get.mediaQuery.size.height * 0.17,
),
// child: Container(
// width: getRelativeHeight(0.13),
// height: getRelativeHeight(0.13),
// decoration: BoxDecoration(
// border:
// Border.all(width: 15, color: circleColor.withOpacity(0.6)),
// shape: BoxShape.circle,
// ),
// ),
),
Align(
alignment: Alignment.center,
child: Image(
image: AssetImage("assets/images/center.png"),
width: Get.mediaQuery.size.height * 0.21,
),
// child: Container(
// width: getRelativeHeight(0.11),
// height: getRelativeHeight(0.11),
// decoration: BoxDecoration(
// border:
// Border.all(width: 15, color: circleColor.withOpacity(0.25)),
// shape: BoxShape.circle,
// ),
// ),
),
Align(
alignment: Alignment.centerRight,
child: Image(
image: AssetImage("assets/images/you.png"),
width: Get.mediaQuery.size.height * 0.17,
),
// child: Container(
// width: getRelativeHeight(0.11),
// height: getRelativeHeight(0.11),
// decoration: BoxDecoration(
// border:
// Border.all(width: 15, color: circleColor.withOpacity(0.17)),
// shape: BoxShape.circle,
// ),
// ),
),
],
)),
Expanded(
child: Container(
padding: EdgeInsets.all(10),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Icon(Icons.send, color: color),
Text(" 选择自己需要的套餐",
style: TextStyle(color: color, fontSize: 20))
],
),
Container(
margin: EdgeInsets.only(top: 20),
padding: EdgeInsets.only(left: 10),
height: Get.mediaQuery.size.height * 0.14,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Obx(() => controller.state.selected ==
'com.wudi.monthly_pass_chat'
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
Row(
// crossAxisAlignment
children: [
Icon(Icons.check, color: color),
Text("月卡(31)天会员",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("1.6元/天",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("无限次与AI助手聊天",
style: TextStyle(
color: color, fontSize: 16))
],
)
],
)
: controller.state.selected ==
'com.wudi.app.monthly_pass'
? Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
Row(
// crossAxisAlignment
children: [
Icon(Icons.check, color: color),
Text("月卡(30天)会员",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("无限聊天",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("解锁所有高级功能",
style: TextStyle(
color: color, fontSize: 16))
],
)
],
)
: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
Row(
// crossAxisAlignment
children: [
Icon(Icons.check, color: color),
Text("年卡(365)天会员",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("1.3元/天",
style: TextStyle(
color: color, fontSize: 16))
],
),
Row(
children: [
Icon(Icons.check, color: color),
Text("无限次与AI助手聊天",
style: TextStyle(
color: color, fontSize: 16))
],
)
],
)),
Image(
image: AssetImage("assets/images/center-1.png"),
width: Get.mediaQuery.size.height * 0.17,
),
],
),
),
Obx(() => Container(
margin: EdgeInsets.only(top: 20),
child: Row(
// final String? productId;
// final String? price;
// final String? currency;
// final String? localizedPrice;
// final String? title;
// final String? description;
// final String? introductoryPrice;
children: controller.state.items
.asMap()
.keys
.map(
(item) => Expanded(
child: InkWell(
onTap: () {
Vibrate.feedback(
FeedbackType.selection);
controller.state.selected = controller
.state.items[item].productId!;
//
// c.requestPurchase(item);
},
child: GlassyCard(
config: GlassyConfig(
backgroundColor: controller
.state
.items[item]
.productId! ==
controller.state.selected
? color
: Colors.grey),
child: Container(
height: 100,
padding: EdgeInsets.only(
top: 16,
left: 16,
right: 16,
bottom: 16),
// color: Colors.pink,
child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceAround,
children: [
Text(
'${controller.state.items[item].localizedPrice!}',
style: TextStyle(
color: Colors.white),
),
Text(
"${item == 0 ? '按月订阅' : item == 1 ? '按年订阅' : '周卡(7天)'}",
maxLines: 2,
overflow: TextOverflow.clip,
style: TextStyle(
color: Colors.white),
)
],
)),
))),
)
.toList(),
),
)),
// GlassyButton(onPressed: () {}, child: Text("GradientButton"))
Expanded(
child: Container(
margin: EdgeInsets.only(top: 20),
child: GradientButton(
child: Text('立即解锁'),
increaseHeightBy: 15.00,
increaseWidthBy: 200.00,
callback: controller.requestPurchase,
gradient: Gradients.cosmicFusion,
shadowColor:
Gradients.backToFuture.colors.last.withOpacity(0.25),
),
)),
// Expanded(
// child: Container(
// child: Row(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Icon(
// Icons.shield_moon,
// color: Colors.white,
// ),
// Text(
// "由App Store提供担保。随时随地取消",
// style: TextStyle(color: Colors.white),
// )
// ]),
// )),
Expanded(
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
InkWell(
onTap: () async {
Get.toNamed(AppRoutes.USER_EULA);
// final Uri _url = Uri.parse(
// 'https://docs.qq.com/doc/DY3pybXJ5Y1JLQm13');
// await launchUrl(_url);
},
child: RichText(
text: TextSpan(children: [
TextSpan(text: 'Tap To view the '),
TextSpan(
text: 'EULA',
style: TextStyle(color: color)),
]),
),
// child: Text(
// "Tap To view the EULA",
// style: TextStyle(color: Colors.white),
// ),
),
]),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.shield_moon,
color: Colors.white,
),
Text(
"由App Store提供担保。随时随地取消",
style: TextStyle(color: Colors.white),
)
]),
])))
// Container(
// padding: EdgeInsets.symmetric(horizontal: 40, vertical: 20),
// width: double.infinity,
// child:
// )
],
),
),
)
],
),
);
// Center(
// child:
// Obx(() => Text(
// "${controller.state.items.length}",
// style: TextStyle(color: Colors.amber, fontSize: 40),
// )),
// );
}
}
......@@ -65,6 +65,9 @@ class HomeController extends GetxController {
/// 事件
void sendMessage(Chat.ChatMessage message) async {
if (state.isLoading || message.text.trim().isEmpty) {
return;
}
Vibrate.feedback(FeedbackType.impact);
final textMessage = Chat.ChatMessage(
......
......@@ -80,9 +80,11 @@ class HomePage extends GetView<HomeController> {
Text("订阅",
style: TextStyle(
color: Color.fromARGB(255, 95, 54, 0),
fontSize: 16))
fontSize: 16)),
]),
callback: () {})
callback: () {
Get.toNamed(AppRoutes.PAY_LIST);
})
// IconButton(
// tooltip: '返回上一页',
......@@ -96,7 +98,7 @@ class HomePage extends GetView<HomeController> {
// },
// ),
),
body: Container(
body: SizedBox(
width: double.infinity,
height: double.infinity,
// color: Color.fromARGB(0, 255, 255, 0),
......@@ -109,18 +111,19 @@ class HomePage extends GetView<HomeController> {
textInputAction: TextInputAction.send,
sendOnEnter: true,
// showTraillingBeforeSend: true,
inputDisabled: cc.state.isLoading,
inputTextStyle: TextStyle(color: Colors.white),
// inputToolbarStyle: BoxDecoration(
// color: Color.fromARGB(0, 54, 59, 72),
// borderRadius: BorderRadius.only(
// topLeft: Radius.circular(16),
// topRight: Radius.circular(16)),
// ),
// inputDisabled: cc.state.isLoading,
inputTextStyle: const TextStyle(color: Colors.white),
inputToolbarStyle: const BoxDecoration(
color: Color.fromARGB(120, 0, 0, 0),
// Color.fromARGB(0, 54, 59, 72),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16),
topRight: Radius.circular(16)),
),
inputToolbarMargin: EdgeInsets.all(0),
sendButtonBuilder: null,
inputToolbarPadding:
EdgeInsets.only(top: 15, right: 15, left: 15, bottom: 10),
inputToolbarPadding: const EdgeInsets.only(
top: 15, right: 15, left: 15, bottom: 10),
),
currentUser: _user,
onSend: cc.sendMessage,
......
......@@ -20,12 +20,12 @@ class MyPage extends GetView<MyController> {
id: "my",
builder: (_) {
return Scaffold(
backgroundColor: Color.fromARGB(255, 29, 33, 60),
backgroundColor: Color.fromARGB(0, 29, 33, 60),
appBar: AppBar(
elevation: 0,
title: const Text("我的"),
bottomOpacity: 0.1,
backgroundColor: Color.fromARGB(255, 29, 33, 60),
backgroundColor: Color.fromARGB(0, 29, 33, 60),
),
body: SafeArea(
child: _buildView(),
......
......@@ -7,7 +7,7 @@ packages:
name: _flutterfire_internals
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.17"
version: "1.1.0"
alipay_kit:
dependency: "direct main"
description:
......@@ -273,7 +273,7 @@ packages:
name: easy_container
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
version: "1.0.4+1"
equatable:
dependency: transitive
description:
......@@ -329,42 +329,42 @@ packages:
name: firebase_auth
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.10"
version: "4.4.0"
firebase_auth_platform_interface:
dependency: transitive
description:
name: firebase_auth_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "6.11.12"
version: "6.13.0"
firebase_auth_web:
dependency: transitive
description:
name: firebase_auth_web
url: "https://pub.dartlang.org"
source: hosted
version: "5.2.9"
version: "5.3.0"
firebase_core:
dependency: transitive
description:
name: firebase_core
url: "https://pub.dartlang.org"
source: hosted
version: "2.7.1"
version: "2.9.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "4.5.3"
version: "4.6.0"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.2"
version: "2.3.0"
firebase_phone_auth_handler:
dependency: "direct main"
description:
......@@ -384,6 +384,13 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_barrage:
dependency: "direct main"
description:
name: flutter_barrage
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.2"
flutter_blurhash:
dependency: transitive
description:
......@@ -453,7 +460,7 @@ packages:
name: flutter_inapp_purchase
url: "https://pub.dartlang.org"
source: hosted
version: "5.4.0"
version: "5.4.1"
flutter_inappwebview:
dependency: transitive
description:
......@@ -461,6 +468,48 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "5.7.2+3"
flutter_keyboard_visibility:
dependency: "direct main"
description:
name: flutter_keyboard_visibility
url: "https://pub.dartlang.org"
source: hosted
version: "5.4.0"
flutter_keyboard_visibility_linux:
dependency: transitive
description:
name: flutter_keyboard_visibility_linux
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
flutter_keyboard_visibility_macos:
dependency: transitive
description:
name: flutter_keyboard_visibility_macos
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
flutter_keyboard_visibility_platform_interface:
dependency: transitive
description:
name: flutter_keyboard_visibility_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
flutter_keyboard_visibility_web:
dependency: transitive
description:
name: flutter_keyboard_visibility_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
flutter_keyboard_visibility_windows:
dependency: transitive
description:
name: flutter_keyboard_visibility_windows
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
flutter_link_previewer:
dependency: transitive
description:
......@@ -678,14 +727,14 @@ packages:
name: image_picker
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.7"
version: "0.8.7+1"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.6+1"
version: "0.8.6+6"
image_picker_for_web:
dependency: transitive
description:
......@@ -699,7 +748,7 @@ packages:
name: image_picker_ios
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.7+1"
version: "0.8.7+2"
image_picker_platform_interface:
dependency: transitive
description:
......@@ -860,7 +909,7 @@ packages:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.13"
version: "2.0.14"
path_provider_android:
dependency: transitive
description:
......@@ -874,7 +923,7 @@ packages:
name: path_provider_foundation
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.3"
version: "2.2.1"
path_provider_linux:
dependency: transitive
description:
......@@ -965,7 +1014,7 @@ packages:
name: pointycastle
url: "https://pub.dartlang.org"
source: hosted
version: "3.6.2"
version: "3.7.2"
process:
dependency: transitive
description:
......@@ -1035,49 +1084,49 @@ packages:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.18"
version: "2.1.0"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.17"
version: "2.1.0"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
version: "2.2.0"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
version: "2.2.0"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
version: "2.2.0"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.6"
version: "2.1.0"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
version: "2.2.0"
sign_in_with_apple:
dependency: "direct main"
description:
......@@ -1215,14 +1264,14 @@ packages:
name: url_launcher_android
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.25"
version: "6.0.26"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
version: "6.1.3"
url_launcher_linux:
dependency: transitive
description:
......@@ -1285,35 +1334,35 @@ packages:
name: video_player
url: "https://pub.dartlang.org"
source: hosted
version: "2.6.0"
version: "2.6.1"
video_player_android:
dependency: transitive
description:
name: video_player_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.2"
version: "2.4.4"
video_player_avfoundation:
dependency: transitive
description:
name: video_player_avfoundation
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.1"
version: "2.4.3"
video_player_platform_interface:
dependency: transitive
description:
name: video_player_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.2"
version: "6.1.0"
video_player_web:
dependency: transitive
description:
name: video_player_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.15"
version: "2.0.16"
visibility_detector:
dependency: transitive
description:
......
......@@ -120,6 +120,9 @@ dependencies:
device_info_plus: ^8.1.0
app_settings: ^4.2.0
loading_animation_widget: ^1.2.0+4
flutter_keyboard_visibility: ^5.4.0
flutter_barrage: ^0.5.2
# package:bubble/bubble.dart
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment