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 createState() => _HomePageState(); } class _HomePageState extends State 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: ListView( children: [ AppHeader(), UploadBox( onPhoto: _handTakePhoto, onSelect: _handPickImage, ), TipBox(), ], ), ), ); } @override bool get wantKeepAlive => true; }