Home and Alarms page

This commit is contained in:
Igor Kulikov
2021-05-14 20:29:36 +03:00
parent 8e06f29694
commit ed654e46bd
41 changed files with 1112 additions and 534 deletions

View File

@@ -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 {

View File

@@ -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!)),

View 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);
}

View 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');
}
}

View File

@@ -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),
)
],
);
}
*/

View File

@@ -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');
}
}