Browse Source

开发完善个人信息页面

ios
Jolie 4 months ago
parent
commit
9ef936cccc
4 changed files with 850 additions and 453 deletions
  1. 4
      lib/main.dart
  2. 222
      lib/pages/mine/user_info_controller.dart
  3. 837
      lib/pages/mine/user_info_page.dart
  4. 240
      pubspec.lock

4
lib/main.dart

@ -4,6 +4,7 @@ import 'package:dating_touchme_app/config/env_config.dart';
import 'package:dating_touchme_app/network/network_service.dart';
import 'package:dating_touchme_app/pages/main_page.dart';
import 'package:dating_touchme_app/pages/mine/login_page.dart';
import 'package:dating_touchme_app/pages/mine/user_info_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
@ -73,7 +74,8 @@ class MyApp extends StatelessWidget {
// token不为空token为空
if (token != null && token.isNotEmpty) {
return MainPage();
// return MainPage();
return UserInfoPage();
} else {
return LoginPage();
}

222
lib/pages/mine/user_info_controller.dart

@ -0,0 +1,222 @@
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:image_picker/image_picker.dart';
class UserInfoController extends GetxController {
//
final gender = 'male'.obs; //
final nickname = ''.obs;
final birthday = ''.obs;
final education = ''.obs;
final invitationCode = ''.obs;
final avatarUrl = ''.obs;
//
final isSubmitting = false.obs;
// GetStorage实例
final storage = GetStorage();
//
void selectGender(String selectedGender) {
gender.value = selectedGender;
//
print('选择的性别: $selectedGender');
//
SmartDialog.showToast('已选择${selectedGender == 'male' ? '' : ''}');
}
//
void selectBirthday(String selectedDate) {
birthday.value = selectedDate;
//
print('选择的出生日期: $selectedDate');
//
SmartDialog.showToast('出生日期已选择');
}
//
void selectEducation(String selectedEducation) {
education.value = selectedEducation;
//
print('选择的学历: $selectedEducation');
//
SmartDialog.showToast('学历已选择');
}
// -
Future<void> handleCameraCapture() async {
try {
//
final ImagePicker picker = ImagePicker();
final XFile? photo = await picker.pickImage(source: ImageSource.camera);
if (photo != null) {
await processSelectedImage(File(photo.path));
}
} catch (e) {
print('拍照失败: $e');
//
if (e.toString().contains('permission') || e.toString().contains('权限')) {
SmartDialog.showToast('相机权限被拒绝,请在设置中允许访问相机');
} else if (e.toString().contains('camera') || e.toString().contains('相机')) {
SmartDialog.showToast('设备没有可用的相机');
} else {
SmartDialog.showToast('拍照失败,请重试');
}
}
}
Future<void> handleGallerySelection() async {
try {
//
final ImagePicker picker = ImagePicker();
final XFile? image = await picker.pickImage(source: ImageSource.gallery);
if (image != null) {
await processSelectedImage(File(image.path));
}
} catch (e) {
print('选择图片失败: $e');
//
if (e.toString().contains('permission') || e.toString().contains('权限')) {
SmartDialog.showToast('相册权限被拒绝,请在设置中允许访问相册');
} else {
SmartDialog.showToast('选择图片失败,请重试');
}
}
}
//
Future<void> processSelectedImage(File imageFile) async {
try {
//
SmartDialog.showLoading(msg: '正在处理头像...');
// URL
// 使URL
avatarUrl.value = imageFile.path;
//
final currentUserInfo = storage.read('userInfo') ?? {};
if (currentUserInfo is Map<String, dynamic>) {
currentUserInfo['avatarUrl'] = imageFile.path;
await storage.write('userInfo', currentUserInfo);
}
SmartDialog.dismiss();
SmartDialog.showToast('头像设置成功');
} catch (e) {
SmartDialog.dismiss();
print('处理图片失败: $e');
SmartDialog.showToast('处理图片失败');
}
}
//
void selectAvatar() {
// UI交互在页面中实现
//
}
//
bool _validateForm() {
//
if (nickname.value.isEmpty) {
SmartDialog.showToast('请输入昵称');
return false;
}
//
if (birthday.value.isEmpty) {
SmartDialog.showToast('请选择出生日期');
return false;
}
//
if (education.value.isEmpty) {
SmartDialog.showToast('请选择学历');
return false;
}
return true;
}
//
Map<String, dynamic> _buildSubmitParams() {
return {
'gender': gender.value == 'male' ? 1 : 2, // 1:, 2:
'nickname': nickname.value,
'birthday': birthday.value,
'education': education.value,
if (invitationCode.value.isNotEmpty) 'invitationCode': invitationCode.value,
if (avatarUrl.value.isNotEmpty) 'avatarUrl': avatarUrl.value,
};
}
//
Future<void> submitUserInfo() async {
//
if (!_validateForm()) {
return;
}
isSubmitting.value = true;
try {
//
final params = _buildSubmitParams();
// UserApi中的完善用户信息接口
// UserApi中添加updateUserInfo方法
// API定义
// API
//
await Future.delayed(const Duration(seconds: 1));
//
print('提交用户信息参数: $params');
//
// final response = await _userApi.updateUserInfo(params);
//
// if (response.data.isSuccess) {
//
final currentUserInfo = storage.read('userInfo') ?? {};
if (currentUserInfo is Map<String, dynamic>) {
currentUserInfo.addAll({
'gender': gender.value,
'nickname': nickname.value,
'birthday': birthday.value,
'education': education.value,
});
await storage.write('userInfo', currentUserInfo);
}
//
SmartDialog.showToast('信息提交成功!');
//
Future.delayed(const Duration(milliseconds: 1500), () {
// 使
// Get.offAllNamed('/main');
});
// } else {
// Get.snackbar('错误', response.data.message);
// }
} catch (e) {
print('提交用户信息失败: $e');
//
SmartDialog.showToast('提交失败,请重试');
} finally {
isSubmitting.value = false;
}
}
}

837
lib/pages/mine/user_info_page.dart

@ -1,393 +1,566 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:dating_touchme_app/generated/assets.dart';
import 'package:get/get.dart';
import 'user_info_controller.dart';
class UserInfoPage extends StatefulWidget {
class UserInfoPage extends StatelessWidget {
const UserInfoPage({Key? key}) : super(key: key);
@override
State<UserInfoPage> createState() => _UserInfoPageState();
}
class _UserInfoPageState extends State<UserInfoPage> {
String _gender = 'male'; //
String _nickname = '强壮的瘦子';
String _birthday = '';
String _education = '';
String _invitationCode = '';
//
void _showAvatarOptions(UserInfoController controller) {
showCupertinoModalPopup(
context: Get.context!,
builder: (context) => CupertinoActionSheet(
title: const Text('选择头像'),
actions: <Widget>[
CupertinoActionSheetAction(
child: const Text('拍照'),
onPressed: () async {
Navigator.pop(context);
await controller.handleCameraCapture();
},
),
CupertinoActionSheetAction(
child: const Text('从相册选择'),
onPressed: () async {
Navigator.pop(context);
await controller.handleGallerySelection();
},
),
],
cancelButton: CupertinoActionSheetAction(
child: const Text('取消'),
isDestructiveAction: true,
onPressed: () {
Navigator.pop(context);
},
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
//
Positioned.fill(
child: Image.asset(
Assets.imagesBgInformation,
fit: BoxFit.cover,
),
//
void _showEducationPicker(UserInfoController controller) {
final List<String> educationOptions = ['大专以下', '大专', '本科', '硕士及以上'];
showModalBottomSheet(
context: Get.context!,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(8),
topRight: Radius.circular(8),
),
),
builder: (BuildContext context) {
return Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: Colors.white, //
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(8),
topRight: Radius.circular(8),
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
//
Stack(
alignment: Alignment.center,
children: [
// -
Align(
alignment: Alignment.centerLeft,
child: IconButton(
icon: const Icon(Icons.close),
onPressed: () {
Navigator.pop(context);
},
),
),
// -
Text(
'学历',
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
//
SafeArea(
child: SingleChildScrollView(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Column(
children: [
//
const SizedBox(height: 20),
Text(
'完善信息',
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
color: Color.fromRGBO(51, 51, 51, 1),
),
],
),
const SizedBox(height: 16),
//
for (String education in educationOptions)
Container(
margin: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), // 106
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: controller.education.value == education
? const Color.fromRGBO(123, 104, 238, 1) //
: const Color.fromRGBO(247, 247, 247, 1),
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 25), //
minimumSize: const Size(double.infinity, 48), // 48
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(32),
),
elevation: 0,
),
onPressed: () {
Navigator.pop(context);
controller.selectEducation(education);
},
child: Text(
education,
style: TextStyle(
color: controller.education.value == education ? Colors.white : Colors.black,
fontSize: 16,
),
),
),
const SizedBox(height: 30),
//
Stack(
),
//
const SizedBox(height: 20),
],
),
);
},
);
}
//
void _showDatePicker(UserInfoController controller) {
//
final now = DateTime.now();
final maxDate = DateTime(now.year - 18); // 18
final minDate = DateTime(now.year - 80); // 80
// 25
DateTime initialDate = DateTime(now.year - 25);
if (controller.birthday.value.isNotEmpty) {
try {
final List<String> dateParts = controller.birthday.value.split('-');
if (dateParts.length == 3) {
initialDate = DateTime(
int.parse(dateParts[0]),
int.parse(dateParts[1]),
int.parse(dateParts[2]),
);
//
if (initialDate.isBefore(minDate)) initialDate = minDate;
if (initialDate.isAfter(maxDate)) initialDate = maxDate;
}
} catch (e) {
print('解析日期失败: $e');
}
}
//
DateTime? selectedDate = initialDate;
showCupertinoModalPopup(
context: Get.context!,
builder: (BuildContext context) {
return Container(
height: 300,
color: CupertinoColors.white,
child: Column(
children: [
//
Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
CupertinoButton(
child: const Text('取消'),
onPressed: () {
Navigator.pop(context);
},
),
CupertinoButton(
child: const Text('确定'),
onPressed: () {
Navigator.pop(context);
if (selectedDate != null) {
// YYYY-MM-DD
final formattedDate = '${selectedDate!.year}-'
'${selectedDate!.month.toString().padLeft(2, '0')}-'
'${selectedDate!.day.toString().padLeft(2, '0')}';
controller.selectBirthday(formattedDate);
}
},
),
],
),
),
//
Expanded(
child: CupertinoDatePicker(
mode: CupertinoDatePickerMode.date,
initialDateTime: initialDate,
minimumDate: minDate,
maximumDate: maxDate,
onDateTimeChanged: (DateTime dateTime) {
selectedDate = dateTime;
},
use24hFormat: true,
backgroundColor: CupertinoColors.white,
),
),
],
),
);
},
);
}
@override
Widget build(BuildContext context) {
return GetX<UserInfoController>(
init: UserInfoController(),
builder: (controller) {
return Scaffold(
body: Stack(
children: [
//
Positioned.fill(
child: Image.asset(
Assets.imagesBgInformation,
fit: BoxFit.cover,
),
),
//
SafeArea(
child: SingleChildScrollView(
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Column(
children: [
Container(
width: 85,
height: 85,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.grey,
//
const SizedBox(height: 20),
const Text(
'完善信息',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Color.fromRGBO(51, 51, 51, 1),
),
child: ClipOval(
//
child: Image.asset(
Assets.imagesAvatarsExample,
fit: BoxFit.cover,
),
const SizedBox(height: 25),
//
GestureDetector(
onTap: () => _showAvatarOptions(controller),
child: Stack(
children: [
Container(
width: 85,
height: 85,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.grey,
),
child: ClipOval(
// avatarUrl显示头像
child: controller.avatarUrl.value.isNotEmpty
? Image.file(
File(controller.avatarUrl.value),
fit: BoxFit.cover,
width: 85,
height: 85,
)
: Image.asset(
Assets.imagesAvatarsExample,
fit: BoxFit.cover,
),
),
),
Positioned(
bottom: 0,
right: 0,
child: Container(
width: 20,
height: 20,
child: Stack(
children: [
Center(
child: Image.asset(
Assets.imagesBgEditAvatars,
),
),
Center(
child: Image.asset(
Assets.imagesEditAvatarsIcon,
width: 12,
height: 12,
),
),
],
),
),
),
],
),
),
const SizedBox(height: 25),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'性别 (注册后不可修改)',
style: TextStyle(
fontSize: 15,
color: Color.fromRGBO(144, 144, 144, 1),
fontWeight: FontWeight.w500,
),
),
),
Positioned(
bottom: 0,
right: 0,
child: Container(
width: 30,
height: 30,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.blue,
const SizedBox(height: 10),
Row(
children: [
GestureDetector(
onTap: () => controller.selectGender('male'),
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: controller.gender.value == 'male' ? Colors.black : Colors.grey[200],
),
child: Row(
children: [
Image.asset(
Assets.imagesManIcon,
width: 20,
height: 20,
color: controller.gender.value == 'male' ? Colors.white : Colors.black,
),
const SizedBox(width: 5),
],
),
),
),
child: Image.asset(
Assets.imagesBgEditAvatars,
width: 16,
height: 16,
color: Colors.white,
const SizedBox(width: 20),
GestureDetector(
onTap: () => controller.selectGender('female'),
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: controller.gender.value == 'female' ? Colors.pink : Colors.grey[200],
),
child: Row(
children: [
Image.asset(
Assets.imagesWomenIcon,
width: 20,
height: 20,
color: controller.gender.value == 'female' ? Colors.white : Colors.black,
),
const SizedBox(width: 5),
],
),
),
),
],
),
const SizedBox(height: 25),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'昵称',
style: TextStyle(
fontSize: 15,
color: Color.fromRGBO(144, 144, 144, 1),
fontWeight: FontWeight.w500,
),
),
),
],
),
const SizedBox(height: 30),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'性别 (注册后不可修改)',
style: TextStyle(
fontSize: 16,
color: Color.fromRGBO(144, 144, 144, 1),
fontWeight: FontWeight.w500,
const SizedBox(height: 10),
Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(32),
color: Color.fromRGBO(247, 247, 247, 1),
),
child: Row(
children: [
Expanded(
child: TextField(
controller: TextEditingController(text: controller.nickname.value),
onChanged: (value) {
controller.nickname.value = value;
},
decoration: const InputDecoration(
border: InputBorder.none,
hintText: '请输入昵称',
hintStyle: TextStyle(color: Colors.grey),
),
),
),
],
),
),
),
),
const SizedBox(height: 10),
Row(
children: [
const SizedBox(height: 25),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'年龄',
style: TextStyle(
fontSize: 15,
color: Color.fromRGBO(144, 144, 144, 1),
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 10),
GestureDetector(
onTap: () {
setState(() {
_gender = 'male';
});
// Cupertino日期选择器
_showDatePicker(controller);
},
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: _gender == 'male' ? Colors.black : Colors.grey[200],
borderRadius: BorderRadius.circular(32),
color: Color.fromRGBO(247, 247, 247, 1),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Image.asset(
Assets.imagesManIcon,
width: 20,
height: 20,
color: _gender == 'male' ? Colors.white : Colors.black,
Text(
controller.birthday.value.isEmpty ? '请选择你的出生日期' : controller.birthday.value,
style: TextStyle(
color: controller.birthday.value.isEmpty ? Colors.grey : Colors.black,
),
),
const SizedBox(width: 5),
const Icon(Icons.arrow_forward_ios, color: Colors.grey),
],
),
),
),
const SizedBox(width: 20),
const SizedBox(height: 25),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'学历',
style: TextStyle(
fontSize: 15,
color: Color.fromRGBO(144, 144, 144, 1),
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 10),
GestureDetector(
onTap: () {
setState(() {
_gender = 'female';
});
//
_showEducationPicker(controller);
},
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: _gender == 'female' ? Colors.pink : Colors.grey[200],
borderRadius: BorderRadius.circular(32),
color: Color.fromRGBO(247, 247, 247, 1),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Image.asset(
Assets.imagesWomenIcon,
width: 20,
height: 20,
color: _gender == 'female' ? Colors.white : Colors.black,
Text(
controller.education.value.isEmpty ? '请选择你的学历' : controller.education.value,
style: TextStyle(
color: controller.education.value.isEmpty ? Colors.grey : Colors.black,
),
),
const SizedBox(width: 5),
const Icon(Icons.arrow_forward_ios, color: Colors.grey),
],
),
),
),
],
),
const SizedBox(height: 30),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'昵称',
style: TextStyle(
fontSize: 16,
color: Colors.black,
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 10),
Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Colors.white,
),
child: Row(
children: [
Expanded(
child: TextField(
controller: TextEditingController(text: _nickname),
onChanged: (value) {
_nickname = value;
},
decoration: const InputDecoration(
border: InputBorder.none,
),
const SizedBox(height: 25),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'邀请码 (非必填)',
style: TextStyle(
fontSize: 15,
color: Color.fromRGBO(144, 144, 144, 1),
fontWeight: FontWeight.w500,
),
),
TextButton(
onPressed: () {
//
),
const SizedBox(height: 10),
Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(32),
color: Color.fromRGBO(247, 247, 247, 1),
),
child: TextField(
onChanged: (value) {
controller.invitationCode.value = value;
},
child: const Text(
'随机',
style: TextStyle(
color: Colors.grey,
),
decoration: const InputDecoration(
hintText: '请输入邀请码',
hintStyle: TextStyle(color: Colors.grey),
border: InputBorder.none,
),
),
],
),
),
const SizedBox(height: 30),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'年龄',
style: TextStyle(
fontSize: 16,
color: Colors.black,
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 10),
GestureDetector(
onTap: () {
//
_selectDate();
},
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Colors.white,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
_birthday.isEmpty ? '请选择你的出生日期' : _birthday,
style: TextStyle(
color: _birthday.isEmpty ? Colors.grey : Colors.black,
),
),
const Icon(Icons.arrow_forward_ios, color: Colors.grey),
],
),
),
),
const SizedBox(height: 30),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'学历',
style: TextStyle(
fontSize: 16,
color: Colors.black,
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 10),
GestureDetector(
onTap: () {
//
_selectEducation();
},
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Colors.white,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
_education.isEmpty ? '请选择你的学历' : _education,
style: TextStyle(
color: _education.isEmpty ? Colors.grey : Colors.black,
const SizedBox(height: 50),
//
SizedBox(
width: double.infinity,
height: 50,
child: ElevatedButton(
onPressed: controller.isSubmitting.value
? null
: controller.submitUserInfo,
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blue,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(25),
),
),
const Icon(Icons.arrow_forward_ios, color: Colors.grey),
],
),
),
),
const SizedBox(height: 30),
//
const Align(
alignment: Alignment.centerLeft,
child: Text(
'邀请码 (非必填)',
style: TextStyle(
fontSize: 16,
color: Colors.black,
fontWeight: FontWeight.w500,
),
),
),
const SizedBox(height: 10),
Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: Colors.white,
),
child: TextField(
onChanged: (value) {
_invitationCode = value;
},
decoration: const InputDecoration(
hintText: '请输入邀请码',
hintStyle: TextStyle(color: Colors.grey),
border: InputBorder.none,
),
),
),
const SizedBox(height: 50),
//
SizedBox(
width: double.infinity,
height: 50,
child: ElevatedButton(
onPressed: () {
//
_submitUserInfo();
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blue,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(25),
),
),
child: const Text(
'开始交友',
style: TextStyle(
fontSize: 18,
color: Colors.white,
child: controller.isSubmitting.value
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
color: Colors.white,
strokeWidth: 2,
),
)
: const Text(
'开始交友',
style: TextStyle(
fontSize: 18,
color: Colors.white,
),
),
),
),
),
const SizedBox(height: 30),
],
),
const SizedBox(height: 30),
],
),
),
),
],
),
],
),
);
}
//
void _selectDate() {
//
//
setState(() {
_birthday = '1990-01-01';
});
}
//
void _selectEducation() {
//
//
setState(() {
_education = '本科';
});
}
//
void _submitUserInfo() {
//
print('提交用户信息:');
print('性别: $_gender');
print('昵称: $_nickname');
print('生日: $_birthday');
print('学历: $_education');
print('邀请码: $_invitationCode');
//
if (_birthday.isEmpty || _education.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('请完善所有必填信息')),
);
return;
}
//
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('信息提交成功')),
);
},
);
}
}

240
pubspec.lock

@ -6,7 +6,7 @@ packages:
description:
name: _fe_analyzer_shared
sha256: f0bb5d1648339c8308cc0b9838d8456b3cfe5c91f9dc1a735b4d003269e5da9a
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "88.0.0"
analyzer:
@ -14,7 +14,7 @@ packages:
description:
name: analyzer
sha256: "0b7b9c329d2879f8f05d6c05b32ee9ec025f39b077864bdb5ac9a7b63418a98f"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "8.1.1"
ansicolor:
@ -22,7 +22,7 @@ packages:
description:
name: ansicolor
sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.3"
archive:
@ -30,7 +30,7 @@ packages:
description:
name: archive
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.0.7"
args:
@ -38,7 +38,7 @@ packages:
description:
name: args
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.7.0"
async:
@ -46,7 +46,7 @@ packages:
description:
name: async
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.13.0"
boolean_selector:
@ -54,7 +54,7 @@ packages:
description:
name: boolean_selector
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
build:
@ -62,7 +62,7 @@ packages:
description:
name: build
sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
build_config:
@ -70,7 +70,7 @@ packages:
description:
name: build_config
sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
build_daemon:
@ -78,7 +78,7 @@ packages:
description:
name: build_daemon
sha256: "409002f1adeea601018715d613115cfaf0e31f512cb80ae4534c79867ae2363d"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.1.0"
build_runner:
@ -86,7 +86,7 @@ packages:
description:
name: build_runner
sha256: a9461b8e586bf018dd4afd2e13b49b08c6a844a4b226c8d1d10f3a723cdd78c3
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.10.1"
built_collection:
@ -94,7 +94,7 @@ packages:
description:
name: built_collection
sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.1.1"
built_value:
@ -102,7 +102,7 @@ packages:
description:
name: built_value
sha256: a30f0a0e38671e89a492c44d005b5545b830a961575bbd8336d42869ff71066d
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "8.12.0"
characters:
@ -110,7 +110,7 @@ packages:
description:
name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
checked_yaml:
@ -118,7 +118,7 @@ packages:
description:
name: checked_yaml
sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.4"
clock:
@ -126,7 +126,7 @@ packages:
description:
name: clock
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.2"
code_builder:
@ -134,7 +134,7 @@ packages:
description:
name: code_builder
sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.11.0"
collection:
@ -142,7 +142,7 @@ packages:
description:
name: collection
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.19.1"
convert:
@ -150,7 +150,7 @@ packages:
description:
name: convert
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.2"
cross_file:
@ -158,23 +158,23 @@ packages:
description:
name: cross_file
sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.3.5"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.flutter-io.cn"
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
url: "https://pub.dev"
source: hosted
version: "3.0.6"
version: "3.0.7"
csslib:
dependency: transitive
description:
name: csslib
sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
cupertino_icons:
@ -182,7 +182,7 @@ packages:
description:
name: cupertino_icons
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.8"
dart_style:
@ -190,7 +190,7 @@ packages:
description:
name: dart_style
sha256: c87dfe3d56f183ffe9106a18aebc6db431fc7c98c31a54b952a77f3d54a85697
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.2"
dio:
@ -198,7 +198,7 @@ packages:
description:
name: dio
sha256: d90ee57923d1828ac14e492ca49440f65477f4bb1263575900be731a3dac66a9
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.9.0"
dio_web_adapter:
@ -206,7 +206,7 @@ packages:
description:
name: dio_web_adapter
sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
event_bus:
@ -214,7 +214,7 @@ packages:
description:
name: event_bus
sha256: "1a55e97923769c286d295240048fc180e7b0768902c3c2e869fe059aafa15304"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
fake_async:
@ -222,7 +222,7 @@ packages:
description:
name: fake_async
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.3"
ffi:
@ -230,7 +230,7 @@ packages:
description:
name: ffi
sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
file:
@ -238,7 +238,7 @@ packages:
description:
name: file
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "7.0.1"
file_selector_linux:
@ -246,7 +246,7 @@ packages:
description:
name: file_selector_linux
sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.9.3+2"
file_selector_macos:
@ -254,7 +254,7 @@ packages:
description:
name: file_selector_macos
sha256: "88707a3bec4b988aaed3b4df5d7441ee4e987f20b286cddca5d6a8270cab23f2"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.9.4+5"
file_selector_platform_interface:
@ -262,7 +262,7 @@ packages:
description:
name: file_selector_platform_interface
sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.6.2"
file_selector_windows:
@ -270,7 +270,7 @@ packages:
description:
name: file_selector_windows
sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.9.3+4"
fixnum:
@ -278,7 +278,7 @@ packages:
description:
name: fixnum
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
flutter:
@ -291,7 +291,7 @@ packages:
description:
name: flutter_lints
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.0.0"
flutter_localizations:
@ -304,7 +304,7 @@ packages:
description:
name: flutter_native_splash
sha256: "4fb9f4113350d3a80841ce05ebf1976a36de622af7d19aca0ca9a9911c7ff002"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.7"
flutter_plugin_android_lifecycle:
@ -312,7 +312,7 @@ packages:
description:
name: flutter_plugin_android_lifecycle
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.32"
flutter_screenutil:
@ -320,7 +320,7 @@ packages:
description:
name: flutter_screenutil
sha256: "8239210dd68bee6b0577aa4a090890342d04a136ce1c81f98ee513fc0ce891de"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.9.3"
flutter_smart_dialog:
@ -328,7 +328,7 @@ packages:
description:
name: flutter_smart_dialog
sha256: "0852df132cb03fd8fc5144eb404c31eb7eb50c22aecb1cc2504f2f598090d756"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.9.8+9"
flutter_test:
@ -346,7 +346,7 @@ packages:
description:
name: frontend_server_client
sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
get:
@ -354,7 +354,7 @@ packages:
description:
name: get
sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.7.2"
get_storage:
@ -362,7 +362,7 @@ packages:
description:
name: get_storage
sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
glob:
@ -370,7 +370,7 @@ packages:
description:
name: glob
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
graphs:
@ -378,7 +378,7 @@ packages:
description:
name: graphs
sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
hotreloader:
@ -386,7 +386,7 @@ packages:
description:
name: hotreloader
sha256: bc167a1163807b03bada490bfe2df25b0d744df359227880220a5cbd04e5734b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.3.0"
html:
@ -394,7 +394,7 @@ packages:
description:
name: html
sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.15.6"
http:
@ -402,7 +402,7 @@ packages:
description:
name: http
sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
http_multi_server:
@ -410,7 +410,7 @@ packages:
description:
name: http_multi_server
sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.2.2"
http_parser:
@ -418,7 +418,7 @@ packages:
description:
name: http_parser
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.1.2"
im_flutter_sdk:
@ -426,7 +426,7 @@ packages:
description:
name: im_flutter_sdk
sha256: "952bd7a4846d9645adf6bf67c781573aba2825e12bbedfa7bb9f8b234bb1410b"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.15.1"
im_flutter_sdk_android:
@ -434,7 +434,7 @@ packages:
description:
name: im_flutter_sdk_android
sha256: d809f8091b24bb70f55c8a1a040f7e0a27aef4756ac71549ce62e460f2151de6
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.15.1"
im_flutter_sdk_interface:
@ -442,7 +442,7 @@ packages:
description:
name: im_flutter_sdk_interface
sha256: "82aef6f78bc7e4afc26768631262535b641cc885220981cc9deb871abf14efa8"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.15.1"
im_flutter_sdk_ios:
@ -450,7 +450,7 @@ packages:
description:
name: im_flutter_sdk_ios
sha256: "5455ecd4e5877dd289051ca280ffb435d8f7f477a46f32bbb1bfc903dc03952a"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.15.1"
image:
@ -458,7 +458,7 @@ packages:
description:
name: image
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.5.4"
image_picker:
@ -466,7 +466,7 @@ packages:
description:
name: image_picker
sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
image_picker_android:
@ -474,7 +474,7 @@ packages:
description:
name: image_picker_android
sha256: ca2a3b04d34e76157e9ae680ef16014fb4c2d20484e78417eaed6139330056f6
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.8.13+7"
image_picker_for_web:
@ -482,7 +482,7 @@ packages:
description:
name: image_picker_for_web
sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
image_picker_ios:
@ -490,7 +490,7 @@ packages:
description:
name: image_picker_ios
sha256: e675c22790bcc24e9abd455deead2b7a88de4b79f7327a281812f14de1a56f58
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.8.13+1"
image_picker_linux:
@ -498,7 +498,7 @@ packages:
description:
name: image_picker_linux
sha256: "1f81c5f2046b9ab724f85523e4af65be1d47b038160a8c8deed909762c308ed4"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
image_picker_macos:
@ -506,7 +506,7 @@ packages:
description:
name: image_picker_macos
sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.2.2+1"
image_picker_platform_interface:
@ -514,7 +514,7 @@ packages:
description:
name: image_picker_platform_interface
sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.11.1"
image_picker_windows:
@ -522,7 +522,7 @@ packages:
description:
name: image_picker_windows
sha256: d248c86554a72b5495a31c56f060cf73a41c7ff541689327b1a7dbccc33adfae
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
intl:
@ -530,7 +530,7 @@ packages:
description:
name: intl
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.20.2"
io:
@ -538,7 +538,7 @@ packages:
description:
name: io
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.5"
json_annotation:
@ -546,7 +546,7 @@ packages:
description:
name: json_annotation
sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.9.0"
json_serializable:
@ -554,7 +554,7 @@ packages:
description:
name: json_serializable
sha256: "33a040668b31b320aafa4822b7b1e177e163fc3c1e835c6750319d4ab23aa6fe"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "6.11.1"
leak_tracker:
@ -562,7 +562,7 @@ packages:
description:
name: leak_tracker
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "11.0.2"
leak_tracker_flutter_testing:
@ -570,7 +570,7 @@ packages:
description:
name: leak_tracker_flutter_testing
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.10"
leak_tracker_testing:
@ -578,7 +578,7 @@ packages:
description:
name: leak_tracker_testing
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
lean_builder:
@ -586,7 +586,7 @@ packages:
description:
name: lean_builder
sha256: ef5cd5f907157eb7aa87d1704504b5a6386d2cbff88a3c2b3344477bab323ee9
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.1.2"
lints:
@ -594,7 +594,7 @@ packages:
description:
name: lints
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.1.1"
logging:
@ -602,7 +602,7 @@ packages:
description:
name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
matcher:
@ -610,7 +610,7 @@ packages:
description:
name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.12.17"
material_color_utilities:
@ -618,7 +618,7 @@ packages:
description:
name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.11.1"
meta:
@ -626,7 +626,7 @@ packages:
description:
name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.16.0"
mime:
@ -634,7 +634,7 @@ packages:
description:
name: mime
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
package_config:
@ -642,7 +642,7 @@ packages:
description:
name: package_config
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
path:
@ -650,7 +650,7 @@ packages:
description:
name: path
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
path_provider:
@ -658,7 +658,7 @@ packages:
description:
name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
path_provider_android:
@ -666,7 +666,7 @@ packages:
description:
name: path_provider_android
sha256: e122c5ea805bb6773bb12ce667611265980940145be920cd09a4b0ec0285cb16
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.20"
path_provider_foundation:
@ -674,7 +674,7 @@ packages:
description:
name: path_provider_foundation
sha256: efaec349ddfc181528345c56f8eda9d6cccd71c177511b132c6a0ddaefaa2738
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.4.3"
path_provider_linux:
@ -682,7 +682,7 @@ packages:
description:
name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
path_provider_platform_interface:
@ -690,7 +690,7 @@ packages:
description:
name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
path_provider_windows:
@ -698,7 +698,7 @@ packages:
description:
name: path_provider_windows
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.3.0"
petitparser:
@ -706,7 +706,7 @@ packages:
description:
name: petitparser
sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "7.0.1"
platform:
@ -714,7 +714,7 @@ packages:
description:
name: platform
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.6"
plugin_platform_interface:
@ -722,7 +722,7 @@ packages:
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
pool:
@ -730,7 +730,7 @@ packages:
description:
name: pool
sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.5.2"
posix:
@ -738,7 +738,7 @@ packages:
description:
name: posix
sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "6.0.3"
protobuf:
@ -746,7 +746,7 @@ packages:
description:
name: protobuf
sha256: "826d6a306be26f29e5cd9faeb0c97aad5897270341dab6dbd7b8acd675937006"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "5.0.0"
pub_semver:
@ -754,7 +754,7 @@ packages:
description:
name: pub_semver
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
pubspec_parse:
@ -762,7 +762,7 @@ packages:
description:
name: pubspec_parse
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
retrofit:
@ -770,7 +770,7 @@ packages:
description:
name: retrofit
sha256: "7d78824afa6eeeaf6ac58220910ee7a97597b39e93360d4bda230b7c6df45089"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.9.0"
retrofit_generator:
@ -778,7 +778,7 @@ packages:
description:
name: retrofit_generator
sha256: "47998fb9f214935e4eb00741aebc636ffcb62cb8ae73b474ac88127ce2744428"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "10.1.2"
shelf:
@ -786,7 +786,7 @@ packages:
description:
name: shelf
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.4.2"
shelf_web_socket:
@ -794,7 +794,7 @@ packages:
description:
name: shelf_web_socket
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.0"
sky_engine:
@ -807,7 +807,7 @@ packages:
description:
name: source_gen
sha256: "9098ab86015c4f1d8af6486b547b11100e73b193e1899015033cb3e14ad20243"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
source_helper:
@ -815,7 +815,7 @@ packages:
description:
name: source_helper
sha256: "6a3c6cc82073a8797f8c4dc4572146114a39652851c157db37e964d9c7038723"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.3.8"
source_span:
@ -823,7 +823,7 @@ packages:
description:
name: source_span
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.10.1"
stack_trace:
@ -831,7 +831,7 @@ packages:
description:
name: stack_trace
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.12.1"
stream_channel:
@ -839,7 +839,7 @@ packages:
description:
name: stream_channel
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
stream_transform:
@ -847,7 +847,7 @@ packages:
description:
name: stream_transform
sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
string_scanner:
@ -855,7 +855,7 @@ packages:
description:
name: string_scanner
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.4.1"
term_glyph:
@ -863,7 +863,7 @@ packages:
description:
name: term_glyph
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.2"
test_api:
@ -871,7 +871,7 @@ packages:
description:
name: test_api
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "0.7.6"
typed_data:
@ -879,7 +879,7 @@ packages:
description:
name: typed_data
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
universal_io:
@ -887,7 +887,7 @@ packages:
description:
name: universal_io
sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.2"
vector_math:
@ -895,7 +895,7 @@ packages:
description:
name: vector_math
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
vm_service:
@ -903,7 +903,7 @@ packages:
description:
name: vm_service
sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "15.0.2"
watcher:
@ -911,7 +911,7 @@ packages:
description:
name: watcher
sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.4"
web:
@ -919,7 +919,7 @@ packages:
description:
name: web
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
web_socket:
@ -927,7 +927,7 @@ packages:
description:
name: web_socket
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
web_socket_channel:
@ -935,7 +935,7 @@ packages:
description:
name: web_socket_channel
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.0.3"
xdg_directories:
@ -943,7 +943,7 @@ packages:
description:
name: xdg_directories
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
xml:
@ -951,7 +951,7 @@ packages:
description:
name: xml
sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "6.6.1"
xxh3:
@ -959,7 +959,7 @@ packages:
description:
name: xxh3
sha256: "399a0438f5d426785723c99da6b16e136f4953fb1e9db0bf270bd41dd4619916"
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
yaml:
@ -967,7 +967,7 @@ packages:
description:
name: yaml
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.flutter-io.cn"
url: "https://pub.dev"
source: hosted
version: "3.1.3"
sdks:

Loading…
Cancel
Save