upgrade gradle

This commit is contained in:
2024-12-27 22:36:48 +06:30
parent 6261595f78
commit d422761e51
16 changed files with 361 additions and 281 deletions

View File

@@ -1,68 +1,99 @@
import 'dart:async';
import 'dart:io';
import 'package:connectivity/connectivity.dart';
import 'package:fcs/config.dart';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'api_helper.dart';
enum ConnectivityStatus { none, online }
class NetworkConnectivity {
final log = Logger('NetworkConnectivity');
static final NetworkConnectivity instance = NetworkConnectivity._internal();
static String? hostName;
static String _hostName = "";
static ConnectivityStatus? _currentResult;
NetworkConnectivity._internal() {
_initialise();
var uri = Uri.parse(Config.instance.apiURL);
hostName = uri.host;
log.info("host name:$hostName");
_hostName = uri.host;
log.info("host name:$_hostName");
}
Connectivity connectivity = Connectivity();
final StreamController _controller = StreamController.broadcast();
final StreamController<ConnectivityStatus> _controller =
StreamController.broadcast();
Stream get statusStream => _controller.stream;
Stream<ConnectivityStatus> get statusStream => _controller.stream;
Timer? _checkTimer;
void _initialise() async {
ConnectivityResult result = await connectivity.checkConnectivity();
_checkStatus(result);
await _checkStatus(await connectivity.checkConnectivity());
connectivity.onConnectivityChanged.listen((result) {
_checkStatus(result);
if (_currentResult == null) {
_checkStatus(result);
} else {
_checkTimer?.cancel();
_checkTimer = Timer(const Duration(seconds: 7), () {
_checkTimer?.cancel();
_checkStatus(result);
});
}
});
}
void _checkStatus(ConnectivityResult result) async {
Future<void> _checkStatus(List<ConnectivityResult> result) async {
bool isOnline = false;
// lookup if connectivity is not none
if (result != ConnectivityResult.none) {
if (!result.contains(ConnectivityResult.none) && !kIsWeb) {
try {
final hostNameLookup = await InternetAddress.lookup(hostName ?? "");
final hostNameLookup = await InternetAddress.lookup(_hostName);
if (hostNameLookup.isNotEmpty &&
hostNameLookup[0].rawAddress.isNotEmpty) {
if (await checkHeartbeat()) {
isOnline = true;
}
} else
} else {
isOnline = false;
} on SocketException catch (_) {
}
isOnline = true;
} on Exception catch (_) {
isOnline = false;
}
}
if (!_controller.isClosed)
_controller.sink.add({"isOnline": isOnline});
_addStream(isOnline || kIsWeb
? ConnectivityStatus.online
: ConnectivityStatus.none);
}
Future<bool> checkHeartbeat() async {
var result = await requestAPI("/hb", "GET");
var status = result["status"];
if (status != null && status != "") {
return true;
try {
var result = await requestAPI("/hb", "GET");
var status = result["status"];
if (status != null && status != "") {
return true;
}
} catch (e) {
return false;
}
return false;
}
void disposeStream() => _controller.close();
_addStream(ConnectivityStatus? updateResult) async {
if (updateResult == null) return;
if (updateResult == _currentResult) return;
_currentResult = updateResult;
if (!_controller.isClosed) {
log.info("sink: $_currentResult");
_controller.sink.add(_currentResult!);
}
}
}

View File

@@ -19,11 +19,8 @@ Future<void> main() async {
Config(
flavor: Flavor.DEV,
color: Colors.blue,
apiURL: "http://192.168.100.150:9090",
// apiURL: "https://asia-northeast1-fcs-dev1.cloudfunctions.net/API13",
// reportURL: "http://petrok.mokkon.com:7071",
// reportProjectID: "fcs-dev",
// bucketName: "gs://fcs-dev1-us",
// apiURL: "http://192.168.100.150:9090",
apiURL: "https://asia-northeast1-fcs-dev1.cloudfunctions.net/API13",
level: Level.ALL);
runApp(App(title: "FCS - Dev"));
}

View File

@@ -19,9 +19,6 @@ Future<void> main() async {
flavor: Flavor.PRODUCTION,
color: Colors.blue,
apiURL: "https://asia-northeast1-fcs-prod1.cloudfunctions.net/API13",
// reportURL: "http://petrok.mokkon.com:8092",
// reportProjectID: "fcs-prod",
// bucketName: "gs://fcs-prod1",
level: Level.ALL);
runApp(App(title: "FCS"));
}

View File

@@ -7,7 +7,7 @@ import 'package:fcs/pages/widgets/local_app_bar.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:package_info/package_info.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';

View File

@@ -14,7 +14,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:share/share.dart';
import 'package:share_plus/share_plus.dart';
import '../../pagination/paginator_listview.dart';
import 'invitation_create.dart';

View File

@@ -9,7 +9,7 @@ import 'package:fcs/helpers/shared_pref.dart';
import 'package:fcs/pages/main/model/base_model.dart';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
import 'package:package_info/package_info.dart';
import 'package:package_info_plus/package_info_plus.dart';
class MainModel extends ChangeNotifier {
final log = Logger('MainModel');
@@ -36,7 +36,7 @@ class MainModel extends ChangeNotifier {
MainModel() {
NetworkConnectivity.instance.statusStream.listen((data) {
bool _isOnline = data["isOnline"];
bool _isOnline = data != ConnectivityStatus.none;
if (_isOnline && !this.isOnline) {
_init();
}

View File

@@ -8,7 +8,7 @@ import 'package:fcs/pages/widgets/local_app_bar.dart';
import 'package:fcs/pages/widgets/progress.dart';
import 'package:flutter/material.dart';
import 'package:flutter_pdfview/flutter_pdfview.dart';
import 'package:share/share.dart';
import 'package:share_plus/share_plus.dart';
class PDFScreen extends StatefulWidget {
final String? title;
@@ -112,8 +112,7 @@ class _PDFScreenState extends State<PDFScreen> with WidgetsBindingObserver {
_share() async {
final RenderBox box = context.findRenderObject() as RenderBox;
await Share.shareFiles([file!.path],
mimeTypes: ["application/pdf"],
await Share.shareXFiles([XFile(file!.path)],
subject: "File",
sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size);
}