You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
6.2 KiB

import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:image_picker/image_picker.dart';
import 'package:medicine_app/mine_page.dart';
import 'package:medicine_app/prediction_list_page.dart';
import 'package:medicine_app/request_util.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:medicine_app/slide_page_route.dart';
import 'home_page.dart';
void main() {
Request.initialize();
runApp(MedicineApp());
if (Platform.isAndroid) {
SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.transparent);
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
}
}
class MedicineApp extends StatefulWidget {
@override
State<MedicineApp> createState() => _MedicineAppState();
}
class _MedicineAppState extends State<MedicineApp> {
final _pageList = [
HomePage(),
MinePage(),
];
final _pageViewController = PageController();
int _currentPageIndex = 0;
void _bottomAppBarTap(index) {
setState(() {
_currentPageIndex = index;
});
_pageViewController.animateToPage(index, duration: Duration(milliseconds: 300), curve: Curves.ease);
}
Color _bottomAppBarItemColor(int index, BuildContext context) {
return _currentPageIndex == index ? Theme.of(context).selectedRowColor : Theme.of(context).unselectedWidgetColor;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: '中药识别',
home: Scaffold(
body: PageView(
physics: NeverScrollableScrollPhysics(),
children: _pageList,
controller: _pageViewController,
),
floatingActionButton: Builder(
builder: (BuildContext context) {
return SizedBox(
width: 48,
height: 48,
child: FloatingActionButton(
backgroundColor: Theme.of(context).selectedRowColor,
onPressed: () async {
final ImagePicker _picker = ImagePicker();
final XFile? picture =
await _picker.pickImage(source: ImageSource.camera, maxHeight: 299, maxWidth: 299);
if (picture != null) {
Navigator.push(
context,
SlidePageRoute(
builder: PredictionListPage(path: picture.path),
),
);
} else {
Fluttertoast.showToast(
msg: "取消上传",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
timeInSecForIosWeb: 1,
backgroundColor: Theme.of(context).unselectedWidgetColor,
textColor: Colors.white,
fontSize: 13,
);
}
},
child: Icon(
Icons.photo_camera,
color: Colors.white70,
),
),
);
},
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
bottomNavigationBar: Container(
height: 55,
child: BottomAppBar(
color: Colors.grey.shade50,
elevation: 6,
shape: CircularNotchedRectangle(),
child: Builder(
builder: (BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Expanded(
flex: 2,
child: GestureDetector(
onTap: () => _bottomAppBarTap(0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
_currentPageIndex == 0 ? Icons.home_rounded : Icons.home_outlined,
color: _bottomAppBarItemColor(0, context),
),
Text(
"首页",
style: TextStyle(
fontSize: 10,
fontWeight: FontWeight.w500,
color: _bottomAppBarItemColor(0, context)),
),
],
),
)),
Expanded(flex: 1, child: Container()),
Expanded(
flex: 2,
child: GestureDetector(
onTap: () => _bottomAppBarTap(1),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
_currentPageIndex == 1 ? Icons.person_rounded : Icons.person_outline_rounded,
color: _bottomAppBarItemColor(1, context),
),
Text(
"我的",
style: TextStyle(
fontSize: 10, fontWeight: FontWeight.w500, color: _bottomAppBarItemColor(1, context)),
)
],
),
),
)
],
);
},
),
),
),
),
theme: Theme.of(context).copyWith(
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
primaryColor: Colors.deepOrange,
primaryColorLight: Colors.white,
primaryColorDark: Colors.black87,
accentColor: Colors.deepOrange[400]?.withAlpha(224),
selectedRowColor: Colors.deepOrangeAccent[700]),
);
}
}
bool isDebug() {
return kDebugMode;
}