Home and Alarms page
This commit is contained in:
@@ -5,7 +5,6 @@ import 'package:thingsboard_app/core/context/tb_context.dart';
|
||||
import 'package:thingsboard_app/modules/main/main_page.dart';
|
||||
|
||||
import 'device_details_page.dart';
|
||||
import 'devices_page.dart';
|
||||
|
||||
class DeviceRoutes extends TbRoutes {
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart';
|
||||
import 'package:thingsboard_app/core/entity/entities_base.dart';
|
||||
import 'package:thingsboard_client/thingsboard_client.dart';
|
||||
|
||||
mixin DevicesBase on EntitiesBase<DeviceInfo> {
|
||||
mixin DevicesBase on EntitiesBaseWithPageLink<DeviceInfo> {
|
||||
|
||||
@override
|
||||
String get title => 'Devices';
|
||||
@@ -21,35 +21,56 @@ mixin DevicesBase on EntitiesBase<DeviceInfo> {
|
||||
}
|
||||
|
||||
@override
|
||||
void onEntityDetails(DeviceInfo device) {
|
||||
void onEntityTap(DeviceInfo device) {
|
||||
navigateTo('/device/${device.id!.id}');
|
||||
}
|
||||
|
||||
@override
|
||||
Widget buildEntityCard(BuildContext context, DeviceInfo device, bool briefView) {
|
||||
Widget? buildHeading(BuildContext context) {
|
||||
return Text('Hobo Devices!');
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
Widget buildEntityListCard(BuildContext context, DeviceInfo device) {
|
||||
return _buildEntityListCard(context, device, false);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget buildEntityListWidgetCard(BuildContext context, DeviceInfo device) {
|
||||
return _buildEntityListCard(context, device, true);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget buildEntityGridCard(BuildContext context, DeviceInfo device) {
|
||||
return Text(device.name);
|
||||
}
|
||||
|
||||
Widget _buildEntityListCard(BuildContext context, DeviceInfo device, bool listWidgetCard) {
|
||||
return Row(
|
||||
mainAxisSize: briefView ? MainAxisSize.min : MainAxisSize.max,
|
||||
mainAxisSize: listWidgetCard ? MainAxisSize.min : MainAxisSize.max,
|
||||
children: [
|
||||
Container(
|
||||
width: briefView ? 58 : 60,
|
||||
width: listWidgetCard ? 58 : 60,
|
||||
height: listWidgetCard ? 58 : 60,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFFEEEEEE),
|
||||
borderRadius: BorderRadius.horizontal(left: Radius.circular(briefView ? 4 : 6))
|
||||
borderRadius: BorderRadius.horizontal(left: Radius.circular(listWidgetCard ? 4 : 6))
|
||||
),
|
||||
child: Center(
|
||||
child: Icon(Icons.devices_other, color: Color(0xFFC2C2C2))
|
||||
),
|
||||
),
|
||||
Flexible(
|
||||
fit: briefView ? FlexFit.loose : FlexFit.tight,
|
||||
fit: listWidgetCard ? FlexFit.loose : FlexFit.tight,
|
||||
child:
|
||||
Container(
|
||||
padding: EdgeInsets.symmetric(vertical: briefView ? 9 : 10, horizontal: 16),
|
||||
padding: EdgeInsets.symmetric(vertical: listWidgetCard ? 9 : 10, horizontal: 16),
|
||||
child: Row(
|
||||
mainAxisSize: briefView ? MainAxisSize.min : MainAxisSize.max,
|
||||
mainAxisSize: listWidgetCard ? MainAxisSize.min : MainAxisSize.max,
|
||||
children: [
|
||||
Flexible(
|
||||
fit: briefView ? FlexFit.loose : FlexFit.tight,
|
||||
fit: listWidgetCard ? FlexFit.loose : FlexFit.tight,
|
||||
child:
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
@@ -75,7 +96,7 @@ mixin DevicesBase on EntitiesBase<DeviceInfo> {
|
||||
],
|
||||
)
|
||||
),
|
||||
(!briefView ? Column(
|
||||
(!listWidgetCard ? Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Text(entityDateFormat.format(DateTime.fromMillisecondsSinceEpoch(device.createdTime!)),
|
||||
|
||||
12
lib/modules/device/devices_list.dart
Normal file
12
lib/modules/device/devices_list.dart
Normal file
@@ -0,0 +1,12 @@
|
||||
import 'package:thingsboard_app/core/context/tb_context.dart';
|
||||
import 'package:thingsboard_app/core/entity/entities_base.dart';
|
||||
import 'package:thingsboard_app/core/entity/entities_list.dart';
|
||||
import 'package:thingsboard_app/modules/device/devices_base.dart';
|
||||
import 'package:thingsboard_client/thingsboard_client.dart';
|
||||
|
||||
class DevicesList extends BaseEntitiesPageLinkWidget<DeviceInfo> with DevicesBase, EntitiesListStateBase {
|
||||
|
||||
DevicesList(TbContext tbContext) : super(tbContext);
|
||||
|
||||
}
|
||||
|
||||
15
lib/modules/device/devices_list_widget.dart
Normal file
15
lib/modules/device/devices_list_widget.dart
Normal file
@@ -0,0 +1,15 @@
|
||||
import 'package:thingsboard_app/core/context/tb_context.dart';
|
||||
import 'package:thingsboard_app/core/entity/entities_list_widget.dart';
|
||||
import 'package:thingsboard_app/modules/device/devices_base.dart';
|
||||
import 'package:thingsboard_client/thingsboard_client.dart';
|
||||
|
||||
class DevicesListWidget extends EntitiesListPageLinkWidget<DeviceInfo> with DevicesBase {
|
||||
|
||||
DevicesListWidget(TbContext tbContext, {EntitiesListWidgetController? controller}): super(tbContext, controller: controller);
|
||||
|
||||
@override
|
||||
void onViewAll() {
|
||||
navigateTo('/devices');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,99 +1,30 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:thingsboard_app/core/context/tb_context.dart';
|
||||
import 'package:thingsboard_app/core/entity/entities_page.dart';
|
||||
import 'package:thingsboard_app/modules/device/devices_base.dart';
|
||||
import 'package:thingsboard_client/thingsboard_client.dart';
|
||||
import 'package:thingsboard_app/core/context/tb_context_widget.dart';
|
||||
import 'package:thingsboard_app/modules/device/devices_list.dart';
|
||||
import 'package:thingsboard_app/widgets/tb_app_bar.dart';
|
||||
|
||||
class DevicesPage extends EntitiesPage<DeviceInfo> with DevicesBase {
|
||||
class DevicesPage extends TbContextWidget<DevicesPage, _DevicesPageState> {
|
||||
|
||||
DevicesPage(TbContext tbContext) : super(tbContext);
|
||||
|
||||
@override
|
||||
String get noMoreItemsText => 'No more devices';
|
||||
|
||||
@override
|
||||
String get searchHint => 'Search devices';
|
||||
_DevicesPageState createState() => _DevicesPageState();
|
||||
|
||||
}
|
||||
|
||||
/* bottomNavigationBar: BottomAppBar(
|
||||
shape: CircularNotchedRectangle(),
|
||||
notchMargin: 4.0,
|
||||
child: new Row(
|
||||
children: <Widget>[
|
||||
IconButton(icon: Icon(Icons.refresh), onPressed: () {
|
||||
refresh();
|
||||
},),
|
||||
Spacer(),
|
||||
IconButton(icon: Icon(Icons.search), onPressed: () {
|
||||
_searchModeNotifier.value = true;
|
||||
}),
|
||||
_simplePopup(),
|
||||
],
|
||||
class _DevicesPageState extends TbContextState<DevicesPage, _DevicesPageState> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var devicesList = DevicesList(tbContext);
|
||||
return Scaffold(
|
||||
appBar: TbAppBar(
|
||||
tbContext,
|
||||
title: Text(devicesList.title)
|
||||
),
|
||||
),
|
||||
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
|
||||
floatingActionButton: FloatingActionButton(
|
||||
child: const Icon(Icons.add), onPressed: () {},),
|
||||
body: devicesList
|
||||
);
|
||||
}
|
||||
|
||||
Widget _simplePopup() => PopupMenuButton<int>(
|
||||
itemBuilder: (context) => [
|
||||
PopupMenuItem(
|
||||
value: 1,
|
||||
child: Text("First"),
|
||||
),
|
||||
PopupMenuItem(
|
||||
value: 2,
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.work),
|
||||
title: Text('Second'),
|
||||
)
|
||||
),
|
||||
],
|
||||
icon: Icon(Icons.settings),
|
||||
);
|
||||
|
||||
SpeedDial speedDial(context) => SpeedDial(
|
||||
animatedIcon: AnimatedIcons.menu_close,
|
||||
animatedIconTheme: IconThemeData(size: 22),
|
||||
backgroundColor: Theme.of(context).colorScheme.secondary,
|
||||
foregroundColor: Colors.white,
|
||||
visible: true,
|
||||
curve: Curves.bounceIn,
|
||||
children: [
|
||||
// FAB 1
|
||||
SpeedDialChild(
|
||||
child: Icon(Icons.refresh),
|
||||
backgroundColor: Theme.of(context).colorScheme.secondary,
|
||||
foregroundColor: Colors.white,
|
||||
onTap: () {
|
||||
refresh();
|
||||
/* setState(() {
|
||||
var rng = Random();
|
||||
var pageSize = 1 + rng.nextInt(9);
|
||||
futureDevices = tbContext.tbClient.getDeviceService().getTenantDeviceInfos(PageLink(pageSize));
|
||||
}); */
|
||||
},
|
||||
label: 'Refresh',
|
||||
labelStyle: TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 16.0),
|
||||
),
|
||||
// FAB 2
|
||||
SpeedDialChild(
|
||||
child: Icon(Icons.logout),
|
||||
backgroundColor: Theme.of(context).colorScheme.secondary,
|
||||
foregroundColor: Colors.white,
|
||||
onTap: () {
|
||||
tbClient.logout(requestConfig: RequestConfig(ignoreErrors: true));
|
||||
},
|
||||
label: 'Logout',
|
||||
labelStyle: TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 16.0),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
import 'package:thingsboard_app/core/context/tb_context.dart';
|
||||
import 'package:thingsboard_app/core/entity/entities_widget.dart';
|
||||
import 'package:thingsboard_app/modules/device/devices_base.dart';
|
||||
import 'package:thingsboard_client/thingsboard_client.dart';
|
||||
|
||||
class DevicesWidget extends EntitiesWidget<DeviceInfo> with DevicesBase {
|
||||
|
||||
DevicesWidget(TbContext tbContext, {EntitiesWidgetController? controller}): super(tbContext, controller: controller);
|
||||
|
||||
@override
|
||||
void onViewAll() {
|
||||
navigateTo('/devices');
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user