302 lines
10 KiB
Dart
302 lines
10 KiB
Dart
import 'dart:async';
|
|
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
|
import 'package:hive_flutter/hive_flutter.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:pwa_ios/model/interaction_config_data.dart';
|
|
import 'package:pwa_ios/model/interaction_data.dart';
|
|
|
|
import 'package:pwa_ios/model/json_form_data.dart';
|
|
import 'package:pwa_ios/model/save_interaction.dart';
|
|
|
|
import 'package:pwa_ios/model/userdata_model.dart';
|
|
import 'package:pwa_ios/repository/hive_repository.dart';
|
|
import 'package:pwa_ios/utils/mockapi.dart';
|
|
import 'package:pwa_ios/utils/sessionmanager.dart';
|
|
import 'package:pwa_ios/utils/util.dart';
|
|
import 'package:pwa_ios/viewmodel/configprovider.dart';
|
|
import 'package:pwa_ios/viewmodel/interactionprovider.dart';
|
|
import 'package:pwa_ios/viewmodel/loginprovider.dart';
|
|
import 'package:pwa_ios/viewmodel/viewinteractionprovider.dart';
|
|
import 'package:pwa_ios/views/home_screen.dart';
|
|
import 'package:pwa_ios/views/konectarpage.dart';
|
|
import 'package:pwa_ios/views/login.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:openid_client/openid_client.dart';
|
|
import 'package:flutter_web_plugins/url_strategy.dart';
|
|
import 'package:internet_connection_checker/internet_connection_checker.dart';
|
|
//import 'openid/openid_io.dart' if (dart.library.html) 'openid_browser.dart';
|
|
|
|
const keycloakUri = 'https://sso.konectar.io/auth/realms/konectar';
|
|
const scopes = ['profile'];
|
|
|
|
Credential? credential;
|
|
|
|
late final Client client;
|
|
UserInfo? userInfo;
|
|
Timer? mytimer;
|
|
// Future<Client> getClient() async {
|
|
// var uri = Uri.parse(keycloakUri);
|
|
// if (!kIsWeb && Platform.isAndroid)
|
|
|
|
// var clientId = 'appwildcard';
|
|
|
|
// var issuer = await Issuer.discover(uri);
|
|
// return Client(issuer, clientId);
|
|
// }
|
|
|
|
// _asyncMethod() async {
|
|
// //client = await getClient();
|
|
// var credential = await authenticate(client, scopes: scopes);
|
|
// userInfo = await credential.getUserInfo();
|
|
// // setState(() {
|
|
|
|
// // });
|
|
// }
|
|
|
|
Future main() async {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
//await execute(InternetConnectionChecker());
|
|
|
|
// Create customized instance which can be registered via dependency injection
|
|
// final InternetConnectionChecker customInstance =
|
|
// InternetConnectionChecker.createInstance(
|
|
// checkTimeout: const Duration(milliseconds: 1),
|
|
// checkInterval: const Duration(milliseconds: 1),
|
|
// );
|
|
|
|
// // Check internet connection with created instance
|
|
// await execute(customInstance);
|
|
await Hive.initFlutter();
|
|
|
|
Hive.registerAdapter(SaveInteractionAdapter());
|
|
Hive.registerAdapter(InteractionConfigDataAdapter());
|
|
|
|
Hive.registerAdapter(InteractionResultDataAdapter());
|
|
Hive.registerAdapter(FormFieldDataAdapter());
|
|
Hive.registerAdapter(ValidationAdapter());
|
|
Hive.registerAdapter(SectionListAdapter());
|
|
Hive.registerAdapter(InputClassAdapter());
|
|
Hive.registerAdapter(InteractionWidgetAdapter());
|
|
|
|
Hive.registerAdapter(UserDataAdapter());
|
|
Hive.registerAdapter(SendSaveJsonAdapter());
|
|
Hive.registerAdapter(MultipleSectionListAdapter());
|
|
Hive.registerAdapter(SaveAdapter());
|
|
Hive.registerAdapter(SaveInteractionFormJsonAdapter());
|
|
await Hive.openBox<SaveInteraction>('InteractionDataBox');
|
|
await Hive.openBox<UserData>("UserDataBox");
|
|
|
|
await Hive.openBox<InteractionConfigData>('InteractionConfigDataBox');
|
|
// final ConfigDataProvider configDataProvider = ConfigDataProvider();
|
|
final ConfigDataProvider configDataProvider = ConfigDataProvider();
|
|
//configDataProvider = fetchInteactionConfigData();
|
|
// final ViewInteractionProvider viewInteractionProvider =
|
|
// ViewInteractionProvider();
|
|
// List<SaveInteraction> savedList =
|
|
// await viewInteractionProvider.getAllRecords();
|
|
|
|
// SendSavedDataJson json = SendSavedDataJson(data: savedList);
|
|
// print(json.toString());
|
|
// await MockApiCall().postFormData(json).then((value) async {
|
|
// await configDataProvider.initConfigUIData().then((value) {
|
|
activateTimer();
|
|
// });
|
|
// });
|
|
// await configDataProvider.initConfigUIData();
|
|
|
|
// await provider.initConfigUIData();
|
|
if (!kIsWeb &&
|
|
kDebugMode &&
|
|
defaultTargetPlatform == TargetPlatform.android) {
|
|
await InAppWebViewController.setWebContentsDebuggingEnabled(kDebugMode);
|
|
}
|
|
// await initDirectory();
|
|
|
|
// await PushNotificationService().setupInteractedMessage();
|
|
|
|
// RemoteMessage? initialMessage =
|
|
// await FirebaseMessaging.instance.getInitialMessage();
|
|
// if (initialMessage != null) {
|
|
// // App received a notification when it was killed
|
|
// }
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
// FirebaseMessaging.instance.getToken().then((value) {
|
|
// String? token = value;
|
|
// print("token: $token");
|
|
// });
|
|
usePathUrlStrategy();
|
|
// client = await getClient();
|
|
// //credential = await getRedirectResult(client, scopes: scopes);
|
|
// credential = await authenticate(client, scopes: scopes);
|
|
// userInfo = await credential!.getUserInfo();
|
|
//runApp(const MyApp());
|
|
// activateTimer();
|
|
SharedPreferences.getInstance().then((instance) async {
|
|
//StorageService().sharedPreferencesInstance = instance;
|
|
bool isloggedIn = instance.getBool('isloggedin') ?? false;
|
|
if (!isloggedIn) {
|
|
await configDataProvider.initConfigUIData();
|
|
}
|
|
runApp(
|
|
MultiProvider(
|
|
providers: [
|
|
ChangeNotifierProvider(create: (_) => InteractionProvider()),
|
|
ChangeNotifierProvider(create: (_) => LoginProvider()),
|
|
ChangeNotifierProvider(create: (_) => ViewInteractionProvider()),
|
|
ChangeNotifierProvider(create: (_) => ConfigDataProvider()),
|
|
ChangeNotifierProvider<HiveDataRepository>(
|
|
create: (_) => HiveDataRepository(
|
|
Hive.box<InteractionConfigData>('InteractionConfigDataBox'))),
|
|
],
|
|
child: MaterialApp(
|
|
debugShowCheckedModeBanner: false,
|
|
title: 'Dynamic Links Example',
|
|
initialRoute: '/',
|
|
routes: <String, WidgetBuilder>{
|
|
'/': (BuildContext context) => FutureBuilder<bool>(
|
|
future: SessionManager().isLoggedIn(),
|
|
builder: (context, snapshot) {
|
|
print("Data_is : $snapshot");
|
|
if (snapshot.connectionState == ConnectionState.waiting) {
|
|
return const CircularProgressIndicator();
|
|
} else if (snapshot.hasError) {
|
|
return Text('Error: ${snapshot.error}');
|
|
} else {
|
|
final isLoggedIn = snapshot.data ?? false;
|
|
print("isLoggedIn_is : $isLoggedIn");
|
|
|
|
return isLoggedIn ? const HomeScreen() : const LoginScreen();
|
|
}
|
|
},
|
|
), //userInfo != null ? const Home() : OpenidScreen(credential: credential,),
|
|
// '/details': (BuildContext context) => const HomeScreen(),
|
|
},
|
|
),
|
|
),
|
|
);
|
|
});
|
|
}
|
|
|
|
cancelTimer() {
|
|
mytimer?.cancel();
|
|
}
|
|
|
|
activateTimer() {
|
|
mytimer = Timer.periodic(const Duration(minutes: 5), (timer) async {
|
|
if (await InternetConnectionChecker().hasConnection) {
|
|
//code to run on every 2 minutes 5 seconds
|
|
print("timer started ");
|
|
final ConfigDataProvider configDataProvider = ConfigDataProvider();
|
|
final InteractionProvider viewInteractionProvider = InteractionProvider();
|
|
if (await checkRecordsAvailable()) {
|
|
String jsonstr = await formJsonForSync();
|
|
|
|
await MockApiCall().postSavedData(jsonstr).then((value) async {
|
|
await deleteRecords();
|
|
await configDataProvider.initConfigUIData().then((value) async {
|
|
await viewInteractionProvider.initConfigData().then((value) {
|
|
activateTimer();
|
|
});
|
|
|
|
print("ended");
|
|
});
|
|
});
|
|
} else {
|
|
await configDataProvider.initConfigUIData().then((value) async {
|
|
await viewInteractionProvider.initConfigData().then((value) {
|
|
activateTimer();
|
|
});
|
|
|
|
print("ended");
|
|
});
|
|
}
|
|
}
|
|
print("Interval called 2 mins");
|
|
});
|
|
|
|
print("timer");
|
|
print(mytimer?.isActive);
|
|
}
|
|
|
|
Future<void> execute(
|
|
InternetConnectionChecker internetConnectionChecker,
|
|
) async {
|
|
// Simple check to see if we have Internet
|
|
// ignore: avoid_print
|
|
print('''The statement 'this machine is connected to the Internet' is: ''');
|
|
final bool isConnected = await InternetConnectionChecker().hasConnection;
|
|
// ignore: avoid_print
|
|
print(
|
|
isConnected.toString(),
|
|
);
|
|
// returns a bool
|
|
|
|
// We can also get an enum instead of a bool
|
|
// ignore: avoid_print
|
|
print(
|
|
'Current status: ${await InternetConnectionChecker().connectionStatus}',
|
|
);
|
|
// Prints either InternetConnectionStatus.connected
|
|
// or InternetConnectionStatus.disconnected
|
|
|
|
// actively listen for status updates
|
|
final StreamSubscription<InternetConnectionStatus> listener =
|
|
InternetConnectionChecker().onStatusChange.listen(
|
|
(InternetConnectionStatus status) {
|
|
switch (status) {
|
|
case InternetConnectionStatus.connected:
|
|
// ignore: avoid_print
|
|
print('Data connection is available.');
|
|
break;
|
|
case InternetConnectionStatus.disconnected:
|
|
// ignore: avoid_print
|
|
print('You are disconnected from the internet.');
|
|
break;
|
|
}
|
|
},
|
|
);
|
|
|
|
// close listener after 30 seconds, so the program doesn't run forever
|
|
await Future<void>.delayed(const Duration(seconds: 30));
|
|
await listener.cancel();
|
|
}
|
|
|
|
class Home extends StatefulWidget {
|
|
const Home({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
State<Home> createState() => _HomeState();
|
|
}
|
|
|
|
class _HomeState extends State<Home> with WidgetsBindingObserver {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: Container(
|
|
child: Center(
|
|
child: TextButton(
|
|
onPressed: () {
|
|
// Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context) => MyApp()));
|
|
Navigator.push(
|
|
context,
|
|
MaterialPageRoute(builder: (context) => const MyApp())
|
|
);
|
|
},
|
|
child: const Text('click'),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
// Hive.close();
|
|
super.dispose();
|
|
}
|
|
}
|