RP-01_Flutter/lib/main.dart

165 lines
4.5 KiB
Dart
Raw Normal View History

2025-04-29 16:32:14 +08:00
import 'package:flutter/material.dart';
import 'Page/display_page.dart';
import 'Page/message_page.dart';
import 'Page/log_page.dart';
2025-04-30 17:01:25 +08:00
import 'device_managge.dart';
2025-04-29 16:32:14 +08:00
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'DMK-RP-01',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.lightBlue),
),
home: const MyHomePage(title: 'DMK-RP-01 上位机'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
// 这个 widget 是应用程序的主页。它是有状态的,这意味着它有一个 State 对象(在下面定义),其中包含影响其外观的字段。
// 这个类是状态的配置。它保存着由父级(在这种情况下是 App widget提供的值在这种情况下是标题
// 并由 State 的 build 方法使用。Widget 子类中的字段总是标记为 "final"。
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
// 添加状态变量记录当前页面
int _currentPageIndex = 0;
// 添加 GlobalKey
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
void _incrementCounter() {
setState(() {
_counter++;
});
}
// 添加页面切换方法
void _changePage(int index) {
setState(() {
_currentPageIndex = index;
});
Navigator.pop(context);
}
@override
Widget build(BuildContext context) {
Widget currentBody;
switch (_currentPageIndex) {
case 0:
currentBody = Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text('You have pushed the button this many times:'),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
);
break;
case 1:
currentBody = DisplayPage();
break;
case 2:
currentBody = MessagePage();
break;
case 3:
currentBody = LogPage();
break;
default:
currentBody = Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text('You have pushed the button this many times:'),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
);
}
return Scaffold(
// 将 GlobalKey 赋值给 Scaffold
key: _scaffoldKey,
appBar: AppBar(
leading: IconButton(
icon: const Icon(Icons.menu),
onPressed: () {
// 使用 GlobalKey 打开导航栏
_scaffoldKey.currentState?.openDrawer();
},
),
2025-04-30 17:01:25 +08:00
actions: [
IconButton(
icon: const Icon(Icons.settings),
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return const DeviceManagementDialog();
},
);
},
),
],
2025-04-29 16:32:14 +08:00
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: currentBody,
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
// 如果需要使用导航栏,需要添加 drawer 属性
drawer: Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
ListTile(
title: Text('主页'),
onTap: () => _changePage(0),
),
ListTile(
title: Text('展示'),
onTap: () => _changePage(1),
),
ListTile(
title: Text('报文'),
onTap: () => _changePage(2),
),
ListTile(
title: Text('日志'),
onTap: () => _changePage(3),
),
ListTile(
title: Text('设置'),
)
],
),
),
);
}
}