Files
derma_flutter/lib/page/home/home_page.dart
zhutao 99a1ce601e 1
2025-08-22 14:15:02 +08:00

77 lines
2.0 KiB
Dart

import 'package:derma_flutter/router/config/route_paths.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.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 {
var photo = await _picker.pickImage(source: ImageSource.camera);
if (photo != null) {
_startDetect(photo.path);
}
}
///选择图片
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 {
EasyLoading.show(
status: 'Skin analysis in progress, please wait...',
maskType: EasyLoadingMaskType.clear,
);
var res = await skinDetectApi(path);
EasyLoading.dismiss();
context.push(RoutePaths.detail, extra: res);
}
@override
Widget build(BuildContext context) {
super.build(context);
return Scaffold(
resizeToAvoidBottomInset: false,
body: AppBackend(
child: Column(
children: [
AppHeader(),
UploadBox(
onPhoto: _handTakePhoto,
onSelect: _handPickImage,
),
TipBox(),
],
),
),
);
}
@override
bool get wantKeepAlive => true;
}