247 lines
8.0 KiB
Dart
247 lines
8.0 KiB
Dart
//import 'dart:nativewrappers/_internal/vm/lib/core_patch.dart';
|
|
|
|
import 'package:dashboard/hardware/heartbeatmice.dart';
|
|
|
|
import 'ui/plot.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'util/mouse_cursor.dart';
|
|
import 'package:logging/logging.dart';
|
|
import 'dart:core';
|
|
|
|
void main() {
|
|
Logger.root.level = Level.ALL;
|
|
Logger.root.onRecord.listen((record){
|
|
|
|
print('[${record.time.hour}:${record.time.minute}:${record.time.second}][${record.level.name}][${record.loggerName}] ${record.message}');
|
|
});
|
|
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 SoftwareMouseCursor(
|
|
child : MaterialApp(
|
|
title: 'Heart Beat Mice',
|
|
theme: ThemeData(
|
|
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
|
|
useMaterial3: true,
|
|
),
|
|
home: const MyHomePage(title: 'Heart Beat Mice Coba'),
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
class MyHomePage extends StatefulWidget {
|
|
const MyHomePage({super.key, required this.title});
|
|
|
|
final String title;
|
|
|
|
@override
|
|
State<MyHomePage> createState() => _MyHomePageState();
|
|
}
|
|
|
|
class _MyHomePageState extends State<MyHomePage> {
|
|
late HeartBeatMice device;
|
|
Logger log = Logger("_MyHomePageState");
|
|
int index = 1;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
device = HeartBeatMice();
|
|
device.init();
|
|
}
|
|
@override
|
|
void dispose() {
|
|
super.dispose();
|
|
device.dispose();
|
|
}
|
|
|
|
Widget myProbe(double height,double width, int index){
|
|
return Column(
|
|
children: <Widget>[
|
|
Text("Analog $index"),
|
|
Column(children: [
|
|
Row(children: [
|
|
Row(children: [
|
|
IconButton(
|
|
onPressed: () async {device.offset[index-1].wipeUp();} ,
|
|
icon: const Icon(Icons.arrow_drop_up_outlined)),
|
|
const Text("Offset"),
|
|
IconButton(
|
|
onPressed: () async {device.offset[index-1].wipeDown();} ,
|
|
icon: const Icon(Icons.arrow_drop_down_outlined))
|
|
]),
|
|
Row(children: [
|
|
IconButton(
|
|
onPressed: () async {device.gain[index-1].wipeUp();} ,
|
|
icon: const Icon(Icons.arrow_drop_up_outlined)),
|
|
const Text("Gain"),
|
|
IconButton(
|
|
onPressed: () async {device.gain[index-1].wipeDown();} ,
|
|
icon: const Icon(Icons.arrow_drop_down_outlined)),
|
|
]),
|
|
],),
|
|
],
|
|
),
|
|
SizedBox (
|
|
height: height.toDouble(),
|
|
width: width,
|
|
child : Plot(
|
|
title: "Analog $index",
|
|
aspectRatio: (height/ width),
|
|
minY: -5,
|
|
maxY: 5,
|
|
maxTimeSeconds: 0.5,
|
|
sampleTimeMicross: 1,
|
|
readAnalog: () async { return device.readAnalog(index); }
|
|
),
|
|
),
|
|
],
|
|
);
|
|
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
double height = 300;
|
|
double width = (MediaQuery.of(context).size.width-100);
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
|
|
title: Text(widget.title),
|
|
),
|
|
body:
|
|
Row(children: [
|
|
IconButton(
|
|
onPressed: () {setState(() {index = ((index -1) < 1 ) ? 1 : index;});} ,
|
|
icon: const Icon(Icons.navigate_before)),
|
|
SizedBox(
|
|
width: width,
|
|
child: myProbe(height, width, index)
|
|
),
|
|
IconButton(
|
|
onPressed: () {setState(() {index = ((index +1) > 16) ? 16 : index;});} ,
|
|
icon: const Icon(Icons.navigate_next)),
|
|
],)
|
|
);
|
|
}
|
|
}
|
|
|
|
// ListView.builder(
|
|
// itemCount: 1,
|
|
// itemBuilder: (context, i){
|
|
// var index = i+1;
|
|
// return ;
|
|
// },
|
|
// )
|
|
|
|
// SizedBox(
|
|
// width: width,
|
|
// child: ListView.builder(
|
|
// itemCount: 4,
|
|
// itemBuilder: (context, i){
|
|
// var index = i+8;
|
|
// return Column(
|
|
// children: <Widget>[
|
|
// Text("Analog $index"),
|
|
// SizedBox (
|
|
// height: height.toDouble(),
|
|
// width: width,
|
|
// child : Plot(
|
|
// title: "Analog $index",
|
|
// aspectRatio: (height/ width),
|
|
// minY: -5,
|
|
// maxY: 5,
|
|
// maxTimeSeconds: 0.5,
|
|
// sampleTimeMicross: 1,
|
|
// readAnalog: () async { return device.readAnalog(index); }
|
|
// ),
|
|
// ),
|
|
// ],
|
|
// );
|
|
// },
|
|
// )),
|
|
// SizedBox(
|
|
// width: width,
|
|
// child: ListView.builder(
|
|
// itemCount: 4,
|
|
// itemBuilder: (context, i){
|
|
// var index = i+4;
|
|
// return Column(
|
|
// children: <Widget>[
|
|
// Text("Analog $index"),
|
|
// SizedBox (
|
|
// height: height.toDouble(),
|
|
// width: width,
|
|
// child : Plot(
|
|
// title: "Analog $index",
|
|
// aspectRatio: (height/ width),
|
|
// minY: -5,
|
|
// maxY: 5,
|
|
// maxTimeSeconds: 0.5,
|
|
// sampleTimeMicross: 1,
|
|
// readAnalog: () async { return device.readAnalog(index); }
|
|
// ),
|
|
// ),
|
|
// ],
|
|
// );
|
|
// },
|
|
// )),
|
|
// SizedBox(
|
|
// width: width,
|
|
// child: ListView.builder(
|
|
// itemCount: 4,
|
|
// itemBuilder: (context, i){
|
|
// var index = i;
|
|
// return Column(
|
|
// children: <Widget>[
|
|
// Text("Analog $index"),
|
|
// SizedBox (
|
|
// height: height.toDouble(),
|
|
// width: width,
|
|
// child : Plot(
|
|
// title: "Analog $index",
|
|
// aspectRatio: (height/ width),
|
|
// minY: -5,
|
|
// maxY: 5,
|
|
// maxTimeSeconds: 0.5,
|
|
// sampleTimeMicross: 1,
|
|
// readAnalog: () async { return device.readAnalog(index); }
|
|
// ),
|
|
// ),
|
|
// ],
|
|
// );
|
|
// },
|
|
// )),
|
|
|
|
|
|
// Column(children: [
|
|
// Row(children: [
|
|
// Row(children: [
|
|
// IconButton(
|
|
// onPressed: () async {device.offset[index].wipeUp();} ,
|
|
// icon: const Icon(Icons.arrow_drop_up_outlined)),
|
|
// const Text("Offset"),
|
|
// IconButton(
|
|
// onPressed: () async {device.offset[index].wipeDown();} ,
|
|
// icon: const Icon(Icons.arrow_drop_down_outlined))
|
|
// ]),
|
|
// Row(children: [
|
|
// IconButton(
|
|
// onPressed: () async {device.gain[index].wipeUp();} ,
|
|
// icon: const Icon(Icons.arrow_drop_up_outlined)),
|
|
// const Text("Gain"),
|
|
// IconButton(
|
|
// onPressed: () async {device.gain[index].wipeDown();} ,
|
|
// icon: const Icon(Icons.arrow_drop_down_outlined)),
|
|
// ]),
|
|
// ],),
|
|
// ],
|
|
// ),
|