Partial web app support

This commit is contained in:
Igor Kulikov
2021-08-18 21:07:19 +03:00
parent 287e808fa8
commit b6361feca9
43 changed files with 169 additions and 107 deletions

View File

@@ -14,7 +14,7 @@ import 'package:thingsboard_client/thingsboard_client.dart';
import 'login_page_background.dart';
class LoginPage extends TbPageWidget<LoginPage, _LoginPageState> {
class LoginPage extends TbPageWidget {
LoginPage(TbContext tbContext) : super(tbContext);
@@ -23,7 +23,7 @@ class LoginPage extends TbPageWidget<LoginPage, _LoginPageState> {
}
class _LoginPageState extends TbPageState<LoginPage, _LoginPageState> {
class _LoginPageState extends TbPageState<LoginPage> {
final ButtonStyle _oauth2ButtonWithTextStyle =
OutlinedButton.styleFrom(padding: EdgeInsets.all(16),

View File

@@ -7,7 +7,7 @@ import 'package:thingsboard_app/core/context/tb_context_widget.dart';
import 'package:thingsboard_app/widgets/tb_app_bar.dart';
import 'package:thingsboard_app/widgets/tb_progress_indicator.dart';
class ResetPasswordRequestPage extends TbPageWidget<ResetPasswordRequestPage, _ResetPasswordRequestPageState> {
class ResetPasswordRequestPage extends TbPageWidget {
ResetPasswordRequestPage(TbContext tbContext) : super(tbContext);
@@ -16,7 +16,7 @@ class ResetPasswordRequestPage extends TbPageWidget<ResetPasswordRequestPage, _R
}
class _ResetPasswordRequestPageState extends TbPageState<ResetPasswordRequestPage, _ResetPasswordRequestPageState> {
class _ResetPasswordRequestPageState extends TbPageState<ResetPasswordRequestPage> {
final _isLoadingNotifier = ValueNotifier<bool>(false);

View File

@@ -1,6 +1,5 @@
import 'dart:async';
import 'dart:io';
import 'package:universal_platform/universal_platform.dart';
import 'package:device_info/device_info.dart';
import 'package:fluro/fluro.dart';
import 'package:flutter/foundation.dart';
@@ -13,7 +12,7 @@ import 'package:thingsboard_app/core/auth/oauth2/tb_oauth2_client.dart';
import 'package:thingsboard_app/modules/main/main_page.dart';
import 'package:thingsboard_app/utils/services/widget_action_handler.dart';
import 'package:thingsboard_client/thingsboard_client.dart';
import 'package:thingsboard_app/utils/services/tb_secure_storage.dart';
import 'package:thingsboard_app/utils/services/tb_app_storage.dart';
import 'package:thingsboard_app/core/context/tb_context_widget.dart';
enum NotificationType {
@@ -145,8 +144,9 @@ class TbContext {
return true;
}());
_initialized = true;
var storage = createAppStorage();
tbClient = ThingsboardClient(ThingsboardAppConstants.thingsBoardApiEndpoint,
storage: TbSecureStorage(),
storage: storage,
onUserLoaded: onUserLoaded,
onError: onError,
onLoadStarted: onLoadStarted,
@@ -156,15 +156,21 @@ class TbContext {
oauth2Client = TbOAuth2Client(tbContext: this, appSecretProvider: AppSecretProvider.local());
try {
if (Platform.isAndroid) {
if (UniversalPlatform.isAndroid) {
_androidInfo = await deviceInfoPlugin.androidInfo;
_oauth2PlatformType = PlatformType.ANDROID;
} else if (Platform.isIOS) {
} else if (UniversalPlatform.isIOS) {
_iosInfo = await deviceInfoPlugin.iosInfo;
_oauth2PlatformType = PlatformType.IOS;
} else {
_oauth2PlatformType = PlatformType.WEB;
}
if (UniversalPlatform.isAndroid || UniversalPlatform.isIOS) {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
packageName = packageInfo.packageName;
} else {
packageName = 'web.app';
}
PackageInfo packageInfo = await PackageInfo.fromPlatform();
packageName = packageInfo.packageName;
await tbClient.init();
} catch (e, s) {
log.error('Failed to init tbContext: $e', e, s);
@@ -337,9 +343,9 @@ class TbContext {
}
bool isPhysicalDevice() {
if (Platform.isAndroid) {
if (UniversalPlatform.isAndroid) {
return _androidInfo!.isPhysicalDevice;
} else if (Platform.isIOS) {
} else if (UniversalPlatform.isIOS) {
return _iosInfo!.isPhysicalDevice;
} else {
return false;
@@ -348,9 +354,9 @@ class TbContext {
String userAgent() {
String userAgent = 'Mozilla/5.0';
if (Platform.isAndroid) {
if (UniversalPlatform.isAndroid) {
userAgent += ' (Linux; Android ${_androidInfo!.version.release}; ${_androidInfo!.model})';
} else if (Platform.isIOS) {
} else if (UniversalPlatform.isIOS) {
userAgent += ' (${_iosInfo!.model})';
}
userAgent += ' AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36';

View File

@@ -12,13 +12,13 @@ abstract class TbContextStatelessWidget extends StatelessWidget with HasTbContex
}
}
abstract class TbContextWidget<W extends TbContextWidget<W,S>, S extends TbContextState<W,S>> extends StatefulWidget with HasTbContext {
abstract class TbContextWidget extends StatefulWidget with HasTbContext {
TbContextWidget(TbContext tbContext, {Key? key}) : super(key: key) {
setTbContext(tbContext);
}
}
abstract class TbContextState<W extends TbContextWidget<W,S>, S extends TbContextState<W,S>> extends State<W> with HasTbContext {
abstract class TbContextState<T extends TbContextWidget> extends State<T> with HasTbContext {
final bool handleLoading;
@@ -47,11 +47,11 @@ mixin TbMainState {
}
abstract class TbPageWidget<W extends TbPageWidget<W,S>, S extends TbPageState<W,S>> extends TbContextWidget<W,S> {
abstract class TbPageWidget extends TbContextWidget {
TbPageWidget(TbContext tbContext, {Key? key}) : super(tbContext, key: key);
}
abstract class TbPageState<W extends TbPageWidget<W,S>, S extends TbPageState<W,S>> extends TbContextState<W,S> with RouteAware {
abstract class TbPageState<W extends TbPageWidget> extends TbContextState<W> with RouteAware {
TbPageState({bool handleUserLoaded = false}): super(handleLoading: true);
@override
@@ -79,7 +79,7 @@ abstract class TbPageState<W extends TbPageWidget<W,S>, S extends TbPageState<W,
}
class TextContextWidget extends TbContextWidget<TextContextWidget, _TextContextWidgetState> {
class TextContextWidget extends TbContextWidget {
final String text;
@@ -90,7 +90,7 @@ class TextContextWidget extends TbContextWidget<TextContextWidget, _TextContextW
}
class _TextContextWidgetState extends TbContextState<TextContextWidget, _TextContextWidgetState> {
class _TextContextWidgetState extends TbContextState<TextContextWidget> {
@override
Widget build(BuildContext context) {

View File

@@ -193,7 +193,7 @@ class TimePageLinkController extends PageKeyController<TimePageLink> {
}
abstract class BaseEntitiesWidget<T, P> extends TbContextWidget<BaseEntitiesWidget<T, P>, BaseEntitiesState<T, P>> with EntitiesBase<T, P> {
abstract class BaseEntitiesWidget<T, P> extends TbContextWidget with EntitiesBase<T, P> {
final bool searchMode;
final PageKeyController<P> pageKeyController;
@@ -211,7 +211,7 @@ abstract class BaseEntitiesWidget<T, P> extends TbContextWidget<BaseEntitiesWidg
}
abstract class BaseEntitiesState<T, P> extends TbContextState<BaseEntitiesWidget<T, P>, BaseEntitiesState<T, P>> {
abstract class BaseEntitiesState<T, P> extends TbContextState<BaseEntitiesWidget<T, P>> {
late final PagingController<P, T> pagingController;
Completer<void>? _refreshCompleter;

View File

@@ -41,7 +41,7 @@ abstract class EntitiesListPageLinkWidget<T> extends EntitiesListWidget<T, PageL
}
abstract class EntitiesListWidget<T, P> extends TbContextWidget<EntitiesListWidget<T,P>, _EntitiesListWidgetState<T,P>> with EntitiesBase<T,P> {
abstract class EntitiesListWidget<T, P> extends TbContextWidget with EntitiesBase<T,P> {
final EntitiesListWidgetController? _controller;
@@ -58,7 +58,7 @@ abstract class EntitiesListWidget<T, P> extends TbContextWidget<EntitiesListWidg
}
class _EntitiesListWidgetState<T,P> extends TbContextState<EntitiesListWidget<T,P>, _EntitiesListWidgetState<T,P>> {
class _EntitiesListWidgetState<T,P> extends TbContextState<EntitiesListWidget<T,P>> {
final EntitiesListWidgetController? _controller;

View File

@@ -7,7 +7,7 @@ import 'package:thingsboard_app/widgets/tb_app_bar.dart';
import 'package:thingsboard_app/widgets/tb_progress_indicator.dart';
import 'package:thingsboard_client/thingsboard_client.dart';
abstract class EntityDetailsPage<T extends BaseData> extends TbPageWidget<EntityDetailsPage<T>, _EntityDetailsPageState<T>> {
abstract class EntityDetailsPage<T extends BaseData> extends TbPageWidget {
final labelTextStyle = TextStyle(
color: Color(0xFF757575),
@@ -56,7 +56,7 @@ abstract class EntityDetailsPage<T extends BaseData> extends TbPageWidget<Entity
}
class _EntityDetailsPageState<T extends BaseData> extends TbPageState<EntityDetailsPage<T>, _EntityDetailsPageState<T>> {
class _EntityDetailsPageState<T extends BaseData> extends TbPageState<EntityDetailsPage<T>> {
late Future<T?> entityFuture;
late ValueNotifier<String> titleValue;

View File

@@ -4,7 +4,7 @@ import 'package:thingsboard_app/core/context/tb_context.dart';
import 'package:thingsboard_app/core/context/tb_context_widget.dart';
import 'package:thingsboard_app/widgets/tb_progress_indicator.dart';
class ThingsboardInitApp extends TbPageWidget<ThingsboardInitApp, _ThingsboardInitAppState> {
class ThingsboardInitApp extends TbPageWidget {
ThingsboardInitApp(TbContext tbContext, {Key? key}) : super(tbContext, key: key);
@@ -13,7 +13,7 @@ class ThingsboardInitApp extends TbPageWidget<ThingsboardInitApp, _ThingsboardIn
}
class _ThingsboardInitAppState extends TbPageState<ThingsboardInitApp, _ThingsboardInitAppState> {
class _ThingsboardInitAppState extends TbPageState<ThingsboardInitApp> {
@override
void initState() {