2024-02-18 22:12:08 +08:00
|
|
|
|
import 'package:amap_flutter_map/amap_flutter_map.dart';
|
|
|
|
|
import 'package:autosos_flutter/const_config.dart';
|
2024-02-22 19:22:03 +08:00
|
|
|
|
import 'package:autosos_flutter/pages/home/widgets/image_block.dart';
|
2024-02-22 18:31:34 +08:00
|
|
|
|
import 'package:autosos_flutter/pages/home/widgets/number_block.dart';
|
2024-02-18 22:12:08 +08:00
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
2024-03-07 18:00:47 +08:00
|
|
|
|
import '../../config/theme_colors.dart';
|
|
|
|
|
|
2024-02-18 22:12:08 +08:00
|
|
|
|
class HomePage extends StatefulWidget {
|
|
|
|
|
const HomePage({super.key});
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
State<HomePage> createState() => _HomePageState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _HomePageState extends State<HomePage> {
|
2024-02-22 18:04:03 +08:00
|
|
|
|
bool enabled = false;
|
2024-02-23 20:12:18 +08:00
|
|
|
|
late AMapController _mapController;
|
2024-02-18 22:12:08 +08:00
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Scaffold(
|
2024-02-22 18:31:34 +08:00
|
|
|
|
appBar: AppBar(
|
2024-02-22 19:36:35 +08:00
|
|
|
|
title: const Text(
|
|
|
|
|
"首页",
|
|
|
|
|
style: TextStyle(color: Colors.white),
|
|
|
|
|
),
|
|
|
|
|
actions: const [
|
|
|
|
|
Text("今日在线时长?小时", style: TextStyle(color: Colors.white))
|
|
|
|
|
],
|
|
|
|
|
flexibleSpace: Container(
|
|
|
|
|
decoration: const BoxDecoration(
|
|
|
|
|
image: DecorationImage(
|
|
|
|
|
image: AssetImage("images/4.0x/home_top_bg.png"),
|
|
|
|
|
fit: BoxFit.cover)),
|
|
|
|
|
)),
|
|
|
|
|
backgroundColor: const Color(0xFFF3F3F3),
|
2024-02-22 18:31:34 +08:00
|
|
|
|
body: Padding(
|
2024-02-22 19:36:35 +08:00
|
|
|
|
padding: const EdgeInsets.all(10),
|
2024-02-22 18:31:34 +08:00
|
|
|
|
child: Column(
|
2024-02-22 20:28:10 +08:00
|
|
|
|
children: [
|
|
|
|
|
buildTopWidget(),
|
|
|
|
|
buildMiddleWidget(),
|
|
|
|
|
buildBottomWidget()
|
|
|
|
|
],
|
2024-02-22 18:31:34 +08:00
|
|
|
|
),
|
|
|
|
|
));
|
2024-02-22 18:04:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget buildTopWidget() {
|
2024-02-22 19:36:35 +08:00
|
|
|
|
return Container(
|
|
|
|
|
padding: const EdgeInsets.all(20),
|
|
|
|
|
decoration: const BoxDecoration(
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
borderRadius: BorderRadius.all(Radius.circular(5))),
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
2024-02-23 18:05:43 +08:00
|
|
|
|
Row(
|
2024-02-22 19:36:35 +08:00
|
|
|
|
children: [
|
2024-02-23 18:05:43 +08:00
|
|
|
|
enabled
|
|
|
|
|
? const Text(
|
|
|
|
|
"接单中",
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 23,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
color: Colors.black),
|
|
|
|
|
)
|
|
|
|
|
: const Text(
|
|
|
|
|
"停止接单",
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 23,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
color: Colors.grey),
|
|
|
|
|
)
|
2024-02-22 19:36:35 +08:00
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Switch(
|
|
|
|
|
value: enabled,
|
|
|
|
|
onChanged: (value) => setState(() {
|
|
|
|
|
enabled = value;
|
|
|
|
|
}),
|
2024-02-22 20:28:10 +08:00
|
|
|
|
activeColor: ThemeColors.primary,
|
2024-02-22 19:36:35 +08:00
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
margin: const EdgeInsets.only(left: 10, right: 10),
|
|
|
|
|
width: 1,
|
|
|
|
|
height: 20,
|
|
|
|
|
color: Colors.grey,
|
|
|
|
|
),
|
|
|
|
|
Column(
|
|
|
|
|
children: [
|
|
|
|
|
enabled
|
|
|
|
|
? Image.asset("images/3.0x/order_receiving_star.png")
|
|
|
|
|
: Image.asset("images/3.0x/order_receiving_end.png"),
|
|
|
|
|
const Text("订单")
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
GridView.count(
|
|
|
|
|
physics: const NeverScrollableScrollPhysics(),
|
|
|
|
|
shrinkWrap: true,
|
|
|
|
|
crossAxisCount: 3,
|
|
|
|
|
childAspectRatio: 1.5,
|
|
|
|
|
children: const [
|
|
|
|
|
NumberBlock(title: "钱包(元)", number: "111"),
|
|
|
|
|
NumberBlock(title: "总订单数", number: "111"),
|
|
|
|
|
NumberBlock(title: "总金额(元)", number: "111"),
|
|
|
|
|
ImageBlock(title: "提现", imgUrl: "images/3.0x/tixian_ic.png"),
|
|
|
|
|
ImageBlock(
|
|
|
|
|
title: "个人中心", imgUrl: "images/3.0x/gerenzhongxin_ic.png"),
|
|
|
|
|
ImageBlock(title: "设置", imgUrl: "images/3.0x/shezhi_ic.png"),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
2024-02-18 22:12:08 +08:00
|
|
|
|
);
|
|
|
|
|
}
|
2024-02-22 20:28:10 +08:00
|
|
|
|
|
|
|
|
|
Widget buildMiddleWidget() {
|
|
|
|
|
return Container(
|
|
|
|
|
margin: const EdgeInsets.only(top: 10),
|
|
|
|
|
padding: const EdgeInsets.all(20),
|
|
|
|
|
decoration: const BoxDecoration(
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
borderRadius: BorderRadius.all(Radius.circular(5))),
|
|
|
|
|
child: Column(
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
const Text(
|
|
|
|
|
"非事故拖车",
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
color: ThemeColors.primary,
|
|
|
|
|
fontSize: 19,
|
|
|
|
|
fontWeight: FontWeight.bold),
|
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
height: 20,
|
|
|
|
|
margin: const EdgeInsets.only(left: 10),
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
border: Border.all(color: Colors.grey, width: 1),
|
|
|
|
|
borderRadius:
|
|
|
|
|
const BorderRadius.all(Radius.circular(10))),
|
|
|
|
|
child: const Padding(
|
|
|
|
|
padding: EdgeInsets.all(3),
|
|
|
|
|
child: Text(
|
|
|
|
|
"最近订单",
|
|
|
|
|
style: TextStyle(fontSize: 8),
|
|
|
|
|
),
|
|
|
|
|
))
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
const Text("已完成")
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
const Divider(),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
margin: const EdgeInsets.only(right: 10),
|
|
|
|
|
child: Image.asset("images/3.0x/time_ic.png"),
|
|
|
|
|
),
|
|
|
|
|
const Text(
|
|
|
|
|
"2024-01-23 16:36:03",
|
|
|
|
|
style: TextStyle(fontSize: 12, color: Color(0xFF9B9B9B)),
|
|
|
|
|
),
|
|
|
|
|
],
|
2024-02-23 18:05:43 +08:00
|
|
|
|
),
|
|
|
|
|
Container(
|
|
|
|
|
child: Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
margin: const EdgeInsets.only(right: 10),
|
|
|
|
|
child: const Icon(
|
|
|
|
|
Icons.circle,
|
|
|
|
|
size: 5,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
const Text(
|
|
|
|
|
"宁波市鄞州区下应街道湖下路286号",
|
|
|
|
|
style: TextStyle(fontWeight: FontWeight.bold),
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
const Row(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.baseline,
|
|
|
|
|
textBaseline: TextBaseline.alphabetic,
|
|
|
|
|
children: [
|
|
|
|
|
Text(
|
|
|
|
|
"¥",
|
|
|
|
|
style: TextStyle(
|
|
|
|
|
fontSize: 13,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
Text(
|
|
|
|
|
"50",
|
|
|
|
|
style:
|
|
|
|
|
TextStyle(fontSize: 32, fontWeight: FontWeight.bold),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
2024-02-22 20:28:10 +08:00
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget buildBottomWidget() {
|
2024-02-23 20:12:18 +08:00
|
|
|
|
AMapWidget map = AMapWidget(
|
2024-02-23 18:20:48 +08:00
|
|
|
|
///必须正确设置的合规隐私声明,否则SDK不会工作,会造成地图白屏等问题。
|
|
|
|
|
privacyStatement: ConstConfig.amapPrivacyStatement,
|
|
|
|
|
apiKey: ConstConfig.amapApiKeys,
|
2024-02-23 20:12:18 +08:00
|
|
|
|
mapType: MapType.navi,
|
|
|
|
|
scaleEnabled: false,
|
|
|
|
|
myLocationStyleOptions: MyLocationStyleOptions(
|
|
|
|
|
true,
|
|
|
|
|
circleFillColor: Colors.lightBlue,
|
|
|
|
|
circleStrokeColor: Colors.blue,
|
|
|
|
|
circleStrokeWidth: 1,
|
|
|
|
|
),
|
|
|
|
|
onMapCreated: (AMapController controller){
|
|
|
|
|
setState(() {
|
|
|
|
|
_mapController = controller;
|
|
|
|
|
getApprovalNumber();
|
|
|
|
|
});
|
|
|
|
|
},
|
2024-02-23 18:20:48 +08:00
|
|
|
|
);
|
|
|
|
|
return Expanded(
|
2024-02-23 20:12:18 +08:00
|
|
|
|
child: Stack(
|
|
|
|
|
children: [
|
|
|
|
|
Container(
|
|
|
|
|
margin: const EdgeInsets.only(top: 10,bottom: 10),
|
|
|
|
|
decoration: const BoxDecoration(
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
borderRadius: BorderRadius.all(Radius.circular(5))),
|
|
|
|
|
child: map,
|
|
|
|
|
),
|
|
|
|
|
Positioned(
|
|
|
|
|
bottom: 20,
|
|
|
|
|
right: 20,
|
|
|
|
|
child: Image.asset("images/3.0x/current_location.png",width: 30,height: 30,),
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
)
|
2024-02-23 18:20:48 +08:00
|
|
|
|
);
|
2024-02-22 20:28:10 +08:00
|
|
|
|
}
|
2024-02-23 20:12:18 +08:00
|
|
|
|
|
|
|
|
|
///获取审图号
|
|
|
|
|
void getApprovalNumber() async {
|
|
|
|
|
//普通地图审图号
|
|
|
|
|
String? mapContentApprovalNumber =
|
|
|
|
|
await _mapController.getMapContentApprovalNumber();
|
|
|
|
|
//卫星地图审图号
|
|
|
|
|
String? satelliteImageApprovalNumber =
|
|
|
|
|
await _mapController.getSatelliteImageApprovalNumber();
|
|
|
|
|
print('地图审图号(普通地图): $mapContentApprovalNumber');
|
|
|
|
|
print('地图审图号(卫星地图): $satelliteImageApprovalNumber');
|
|
|
|
|
}
|
2024-02-18 22:12:08 +08:00
|
|
|
|
}
|