aim_pointer/lib/main.dart

446 lines
18 KiB
Dart
Raw Normal View History

2024-08-16 19:37:14 +08:00
import 'package:flutter/material.dart';
2024-08-17 18:09:43 +08:00
import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart';
2024-08-16 19:37:14 +08:00
import 'package:get/get.dart';
2024-08-17 18:09:43 +08:00
import 'package:flutter_app_update/flutter_app_update.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
2024-08-16 19:37:14 +08:00
// import 'controller/scence_map.dart';
2024-08-17 18:09:43 +08:00
import 'appbar/appbar.dart';
import 'login_in/connect/index.dart';
import 'login_in/connect/my_routes.dart';
import 'login_in/getx/index.dart';
import 'login_in/getx/real_data.dart';
import 'login_in/user/loginprefs.dart';
2024-08-16 19:37:14 +08:00
import 'screens/aimpoint_page.dart';
2024-08-17 18:09:43 +08:00
import 'screens/setting_page.dart';
2024-08-16 19:37:14 +08:00
2024-08-17 18:09:43 +08:00
Connect connect = Connect();
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []); //设置全屏
Get.put(RealController());
LoginPrefs loginPrefs = LoginPrefs();
String value =
await loginPrefs.init(); // await 关键字必须用在异步方法中 await等待异步方法执行完毕 异步方法必须用变量接收
if ('ok' == value) {
connect.init();
runApp(const EntryPage());
}
2024-08-16 19:37:14 +08:00
}
2024-08-17 18:09:43 +08:00
class EntryPage extends StatefulWidget {
const EntryPage({super.key});
@override
State<EntryPage> createState() => _EntryPageState();
}
class _EntryPageState extends State<EntryPage> {
@override
void initState() {
super.initState();
}
2024-08-16 19:37:14 +08:00
@override
Widget build(BuildContext context) {
2024-08-17 18:09:43 +08:00
return ValueListenableBuilder<bool>(
valueListenable: MyApp.isDarkMode,
builder: (context, isDarkMode, child) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: const MyApp(),
initialRoute: "home",
onGenerateRoute: onGenerateRoute,
localizationsDelegates: GlobalMaterialLocalizations.delegates,
supportedLocales: const [
Locale('en', ''),
Locale('zh', ''),
Locale('he', ''),
Locale('es', ''),
Locale('ru', ''),
Locale('ko', ''),
Locale('hi', ''),
],
theme: isDarkMode ? ThemeData.dark() : ThemeData.light(),
// home: child,
);
},
child: const Text(""),
2024-08-16 19:37:14 +08:00
);
}
}
2024-08-17 18:09:43 +08:00
TextStyle textStyle = const TextStyle(fontSize: 15);
2024-08-16 19:37:14 +08:00
2024-08-17 18:09:43 +08:00
class MyApp extends StatefulWidget {
const MyApp({super.key});
static ValueNotifier<bool> isDarkMode = ValueNotifier<bool>(false);
2024-08-16 19:37:14 +08:00
@override
2024-08-17 18:09:43 +08:00
State<MyApp> createState() => _MyAppState();
2024-08-16 19:37:14 +08:00
}
2024-08-17 18:09:43 +08:00
//是否是竖屏用于修改appbar 的高度
late bool isPortrait;
class _MyAppState extends State<MyApp> {
//当前底部导航栏索引
var _currentIndex = 1.obs;
late double appBarHeight;
var url = 'http://v5.rdc.pub/apk/';
///Flutter侧处理升级对话框
///[forcedUpgrade] 是否强制升级
_showUpdateDialog(bool forcedUpgrade, String version) {
showDialog(
context: context,
barrierDismissible: !forcedUpgrade,
builder: (BuildContext context) {
return PopScope(
child: AlertDialog(
title: const Text('发现新版本'),
content: Text(
version,
style: const TextStyle(fontSize: 20),
),
actions: <Widget>[
if (!forcedUpgrade)
TextButton(
child: const Text('稍后升级'),
onPressed: () => Navigator.of(context).pop(),
),
TextButton(
child: const Text('升级'),
onPressed: () {
_appUpdate();
if (!forcedUpgrade) {
Navigator.of(context).pop();
}
},
),
],
),
);
},
);
}
_appUpdate() {
UpdateModel model = UpdateModel(
"${url}app-release.apk",
"app-release.apk",
"ic_launcher",
"",
);
AzhonAppUpdate.update(model).then((value) => debugPrint('//////$value'));
}
bool comarableVersion(String version1, String version2) {
List<int> v1 = version1.split('.').map(int.parse).toList();
List<int> v2 = version2.split('.').map(int.parse).toList();
bool result = true;
for (int i = 0; i < 3; i++) {
if (v1[i] > v2[i]) {
result = true;
break;
} else if (v1[i] < v2[i]) {
result = false;
break;
}
}
return result;
}
@override
void initState() {
GexRegister().registerDependencies();
super.initState();
SchedulerBinding.instance.addPostFrameCallback((_) async {
// 当前版本
// PackageInfo packageInfo = await PackageInfo.fromPlatform();
// String version = packageInfo.version;
// String packageName = packageInfo.packageName;
// print("---$packageName,$version");
// var response =
// await http.Client().get(Uri.parse("${url}output-metadata.json"));
// Map json = jsonDecode(response.body);
// String onLineVersion = json["elements"][0]["versionName"] ?? "";
// // 获取线上版本
// if (comarableVersion(version, onLineVersion) &&
// version != onLineVersion) {
// //升级弹窗
// _showUpdateDialog(false, onLineVersion);
// }
// AzhonAppUpdate.listener((map) {
// debugPrint(map['type']);
// });
});
}
final RealController controller1 = Get.find();
final List<Widget> _pages = [
ScenceMap(),
ScenceMap(),
ScenceMap(),
ScenceMap(),
SettingPortrait()
];
2024-08-16 19:37:14 +08:00
@override
Widget build(BuildContext context) {
2024-08-17 18:09:43 +08:00
final size = MediaQuery.of(context).size;
return OrientationBuilder(builder: ((context, orientation) {
isPortrait = Orientation.portrait == orientation ? true : false;
appBarHeight = Orientation.portrait == orientation ? 56.0 : 34.0;
return Scaffold(
resizeToAvoidBottomInset: false,
drawerEdgeDragWidth: 0.0, // 禁止通过滑动打开drawer
endDrawer: _currentIndex.value == 1
? Drawer(
width: size.width * .8,
child: const AimPointer(),
)
: null,
appBar: PreferredSize(
preferredSize: Size.fromHeight(appBarHeight),
child: CustomAppBar(appBarHeight: 56, currentIndex: _currentIndex),
),
body: OrientationBuilder(
builder: (context, orientation) {
if (!isPortrait) {
return Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
child: _pages[_currentIndex.value],
),
const VerticalDivider(
width: 1, // 设置高度为1
thickness: 1,
),
SizedBox(
width: 48,
child: SafeArea(
child: LayoutBuilder(builder: (context, constraints) {
// 根据屏幕宽度判断横屏或竖屏
// if (!isPortrait) {
// // 横屏布局
return Column(
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Column(
children: [
IconButton(
onPressed: () {
setState(() {
_currentIndex.value = 0;
});
},
icon: const Icon(
Icons.date_range_rounded),
color: _currentIndex.value == 0
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
Align(
alignment: Alignment.center,
child: Text(
'实时',
style: TextStyle(
fontSize: 12,
color: _currentIndex.value == 0
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
),
),
],
),
const Divider(
height: 1, // 设置高度为1
thickness: 1,
),
//
Column(
children: [
IconButton(
onPressed: () {
setState(() {
_currentIndex.value = 1;
});
},
icon: const Icon(Icons.map_outlined),
color: _currentIndex.value == 1
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
Align(
alignment: Alignment.center,
child: Text(
'桩点',
style: TextStyle(
fontSize: 12,
color: _currentIndex.value == 1
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
),
),
],
),
const Divider(),
Column(
children: [
IconButton(
onPressed: () {
setState(() {
_currentIndex.value = 2;
});
},
icon:
const Icon(Icons.my_location_sharp),
color: _currentIndex.value == 2
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
Align(
alignment: Alignment.center,
child: Text(
'任务',
style: TextStyle(
fontSize: 12,
color: _currentIndex.value == 2
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
),
),
],
),
const Divider(),
Column(
children: [
IconButton(
onPressed: () {
setState(() {
_currentIndex.value = 3;
});
},
icon: const Icon(
Icons.table_chart_outlined),
color: _currentIndex.value == 3
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
Align(
alignment: Alignment.center,
child: Text(
'历史',
style: TextStyle(
fontSize: 12,
color: _currentIndex.value == 3
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
),
),
],
),
const Divider(),
Column(
children: [
IconButton(
onPressed: () {
setState(() {
_currentIndex.value = 4;
});
},
icon: const Icon(Icons.settings),
color: _currentIndex.value == 4
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
Align(
alignment: Alignment.center,
child: Text(
'设置',
style: TextStyle(
fontSize: 12,
color: _currentIndex.value == 4
? const Color.fromARGB(
255, 60, 95, 123)
: Colors.grey,
),
),
),
],
)
]);
//
}),
),
)
]);
} //
else {
// 竖屏布局,保持原有底部导航栏样式
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Expanded(
flex: 12,
child: _pages[_currentIndex.value],
),
// VerticalDivider(),
Expanded(
flex: 1,
child: SizedBox(
height: 58,
child: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
currentIndex: _currentIndex.value,
onTap: (index) {
setState(() {
_currentIndex.value = index;
});
},
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.date_range_rounded),
label: "实时"),
BottomNavigationBarItem(
icon: Icon(Icons.map_outlined),
label: "桩点"),
BottomNavigationBarItem(
icon: Icon(Icons.my_location_sharp),
label: "对点"),
BottomNavigationBarItem(
icon: Icon(Icons.table_chart_outlined),
label: "历史"),
BottomNavigationBarItem(
icon: Icon(Icons.settings), label: "设置"),
]),
),
)
]);
}
},
));
}));
2024-08-16 19:37:14 +08:00
}
}