Files
derma_flutter/lib/page/home/home_page.dart
2025-09-01 09:23:42 +08:00

93 lines
2.4 KiB
Dart

import 'dart:io';
import 'package:derma_flutter/router/config/route_paths.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'package:go_router/go_router.dart';
import 'package:image_picker/image_picker.dart';
import '../../api/endpoints/skin_api.dart';
import '../../widgets/common/app_backend.dart';
import '../../widgets/common/app_header.dart';
import 'widget/tip_widget.dart';
import 'widget/upload_widget.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin {
final ImagePicker _picker = ImagePicker();
///打开相机拍照
void _handTakePhoto() async {
try {
var photo = await _picker.pickImage(source: ImageSource.camera);
if (photo != null) {
_startDetect(photo.path);
}
} on PlatformException catch (e) {
EasyLoading.showToast(e.message ?? "");
}
}
///选择图片
void _handPickImage() async {
var result = await FilePicker.platform.pickFiles(
type: FileType.image,
allowMultiple: false,
);
if (result != null) {
_startDetect(result.files[0].path!);
}
}
///开始检测
void _startDetect(String path) async {
//压缩
final result = await FlutterImageCompress.compressWithFile(
path,
minWidth: 1080,
minHeight: 1920,
quality: 85,
rotate: 0,
);
EasyLoading.show(
status: 'Skin analysis in progress, please wait...',
maskType: EasyLoadingMaskType.clear,
);
var res = await skinDetectApi(result!);
EasyLoading.dismiss();
context.push(RoutePaths.detail, extra: res);
}
@override
Widget build(BuildContext context) {
super.build(context);
return Scaffold(
resizeToAvoidBottomInset: false,
body: AppBackend(
child: ListView(
children: [
AppHeader(),
UploadBox(
onPhoto: _handTakePhoto,
onSelect: _handPickImage,
),
TipBox(),
],
),
),
);
}
@override
bool get wantKeepAlive => true;
}