Skip to content

Commit 7917e13

Browse files
committed
feat: initialized Oscilloscope Screen
1 parent cab14ed commit 7917e13

20 files changed

+1548
-139
lines changed

.gitignore

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,25 @@ migrate_working_dir/
3434
.pub/
3535
/build/
3636

37+
# macOS
38+
**/Flutter/ephemeral/
39+
**/Pods/
40+
**/macos/Flutter/GeneratedPluginRegistrant.swift
41+
**/macos/Flutter/ephemeral
42+
**/xcuserdata/
43+
44+
# Windows
45+
**/windows/flutter/ephemeral/
46+
**/windows/flutter/generated_plugin_registrant.cc
47+
**/windows/flutter/generated_plugin_registrant.h
48+
**/windows/flutter/generated_plugins.cmake
49+
50+
# Linux
51+
**/linux/flutter/ephemeral/
52+
**/linux/flutter/generated_plugin_registrant.cc
53+
**/linux/flutter/generated_plugin_registrant.h
54+
**/linux/flutter/generated_plugins.cmake
55+
3756
# Symbolication related
3857
app.*.symbols
3958

assets/images/channel_parameters.gif

10.7 KB
Loading

assets/images/data_analysis.png

15 KB
Loading

assets/images/timebase.png

3.2 KB
Loading

assets/images/xymode.png

21.1 KB
Loading

lib/main.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
33
import 'package:pslab/view/connect_device_screen.dart';
44
import 'package:pslab/view/faq_screen.dart';
55
import 'package:pslab/view/instruments_screen.dart';
6+
import 'package:pslab/view/oscilloscope_screen.dart';
67

78
void main() {
89
WidgetsFlutterBinding.ensureInitialized();
@@ -26,6 +27,7 @@ class MyApp extends StatelessWidget {
2627
initialRoute: '/',
2728
routes: {
2829
'/': (context) => const InstrumentsScreen(),
30+
'/oscilloscope': (context) => const OscilloscopeScreen(),
2931
'/connectDevice': (context) => const ConnectDeviceScreen(),
3032
'/faq': (context) => const FAQScreen(),
3133
},
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import 'package:flutter/material.dart';
2+
3+
class OscilloscopeStateProvider extends ChangeNotifier {
4+
int _selectedIndex = 0;
5+
6+
int get selectedIndex => _selectedIndex;
7+
8+
void updateSelectedIndex(int index) {
9+
_selectedIndex = index;
10+
notifyListeners();
11+
}
12+
}

lib/view/instruments_screen.dart

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import 'package:flutter/material.dart';
2+
import 'package:flutter/services.dart';
23
import 'package:pslab/constants.dart';
34
import 'package:pslab/view/widgets/applications_list_item.dart';
4-
import 'package:pslab/view/widgets/common_scaffold_widget.dart';
5+
import 'package:pslab/view/widgets/main_scaffold_widget.dart';
56

67
class InstrumentsScreen extends StatefulWidget {
78
const InstrumentsScreen({super.key});
@@ -11,9 +12,42 @@ class InstrumentsScreen extends StatefulWidget {
1112
}
1213

1314
class _InstrumentsScreenState extends State<InstrumentsScreen> {
15+
void _onItemTapped(int index) {
16+
switch (index) {
17+
case 0:
18+
Navigator.pushNamed(context, '/oscilloscope');
19+
break;
20+
default:
21+
break;
22+
}
23+
}
24+
25+
@override
26+
void initState() {
27+
WidgetsBinding.instance.addPostFrameCallback((_) {
28+
_setOrientation();
29+
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
30+
});
31+
super.initState();
32+
}
33+
34+
void _setOrientation() {
35+
SystemChrome.setPreferredOrientations([
36+
DeviceOrientation.portraitUp,
37+
DeviceOrientation.portraitDown,
38+
DeviceOrientation.landscapeLeft,
39+
DeviceOrientation.landscapeRight,
40+
]);
41+
}
42+
43+
@override
44+
void dispose() {
45+
super.dispose();
46+
}
47+
1448
@override
1549
Widget build(BuildContext context) {
16-
return CommonScaffold(
50+
return MainScaffold(
1751
index: 0,
1852
title: 'Instruments',
1953
body: SafeArea(
@@ -22,10 +56,13 @@ class _InstrumentsScreenState extends State<InstrumentsScreen> {
2256
child: ListView.builder(
2357
itemCount: instrumentHeadings.length,
2458
itemBuilder: (context, index) {
25-
return ApplicationsListItem(
26-
heading: instrumentHeadings[index],
27-
description: instrumentDesc[index],
28-
instrumentIcon: instrumentIcons[index],
59+
return GestureDetector(
60+
onTap: () => _onItemTapped(index),
61+
child: ApplicationsListItem(
62+
heading: instrumentHeadings[index],
63+
description: instrumentDesc[index],
64+
instrumentIcon: instrumentIcons[index],
65+
),
2966
);
3067
},
3168
),

lib/view/oscilloscope_screen.dart

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import 'package:fl_chart/fl_chart.dart';
2+
import 'package:flutter/material.dart';
3+
import 'package:flutter/services.dart';
4+
import 'package:flutter_screenutil/flutter_screenutil.dart';
5+
import 'package:provider/provider.dart';
6+
import 'package:pslab/view/widgets/channel_parameters_widget.dart';
7+
import 'package:pslab/view/widgets/common_scaffold_widget.dart';
8+
import 'package:pslab/view/widgets/data_analysis_widget.dart';
9+
import 'package:pslab/view/widgets/oscilloscope_screen_tabs.dart';
10+
import 'package:pslab/view/widgets/timebase_trigger_widget.dart';
11+
import 'package:pslab/view/widgets/xyplot_widget.dart';
12+
13+
import '../providers/oscilloscope_state_provider.dart';
14+
15+
class OscilloscopeScreen extends StatefulWidget {
16+
const OscilloscopeScreen({super.key});
17+
18+
@override
19+
State<StatefulWidget> createState() => _OscilloscopeScreenState();
20+
}
21+
22+
class _OscilloscopeScreenState extends State<OscilloscopeScreen> {
23+
@override
24+
void initState() {
25+
WidgetsBinding.instance.addPostFrameCallback((_) {
26+
_setLandscapeOrientation();
27+
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
28+
});
29+
super.initState();
30+
}
31+
32+
void _setLandscapeOrientation() {
33+
SystemChrome.setPreferredOrientations([
34+
DeviceOrientation.landscapeLeft,
35+
DeviceOrientation.landscapeRight,
36+
]);
37+
}
38+
39+
@override
40+
Widget build(BuildContext context) {
41+
return MultiProvider(
42+
providers: [
43+
ChangeNotifierProvider(create: (_) => OscilloscopeStateProvider()),
44+
],
45+
child: SafeArea(
46+
child: CommonScaffold(
47+
title: 'Oscilloscope',
48+
body: Container(
49+
margin: const EdgeInsets.only(left: 5, top: 5),
50+
child: Row(
51+
children: [
52+
Container(
53+
width: 310.w,
54+
margin: const EdgeInsets.only(right: 5),
55+
child: Column(
56+
children: [
57+
SizedBox(
58+
height: 380.h,
59+
child: LineChart(
60+
LineChartData(
61+
backgroundColor: Colors.black,
62+
titlesData: const FlTitlesData(show: false),
63+
borderData: FlBorderData(show: false),
64+
),
65+
),
66+
),
67+
Expanded(
68+
child: Consumer<OscilloscopeStateProvider>(
69+
builder: (context, provider, _) {
70+
switch (provider.selectedIndex) {
71+
case 0:
72+
return const ChannelParametersWidget();
73+
case 1:
74+
return const TimebaseTriggerWidget();
75+
case 2:
76+
return const DataAnalysisWidget(); // Replace with your widget for Tab 3
77+
case 3:
78+
return const XYPlotWidget();
79+
default:
80+
return const ChannelParametersWidget();
81+
}
82+
},
83+
),
84+
),
85+
],
86+
),
87+
),
88+
const Expanded(
89+
child: OscilloscopeScreenTabs(),
90+
)
91+
],
92+
),
93+
),
94+
),
95+
),
96+
);
97+
}
98+
}

0 commit comments

Comments
 (0)