77 lines
2.0 KiB
Dart
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: ListView(
|
|
children: [
|
|
AppHeader(),
|
|
UploadBox(
|
|
onPhoto: _handTakePhoto,
|
|
onSelect: _handPickImage,
|
|
),
|
|
TipBox(),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
bool get wantKeepAlive => true;
|
|
}
|