Files
fcs/lib/pages/help.dart
2020-05-29 07:45:27 +06:30

120 lines
3.4 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:archive/archive.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:http_server/http_server.dart';
import 'package:logging/logging.dart';
import 'package:path_provider/path_provider.dart';
import 'package:provider/provider.dart';
import 'package:fcs/model/main_model.dart';
import 'package:fcs/vo/setting.dart';
import 'package:fcs/widget/progress.dart';
typedef void ProfileCallback();
class Help extends StatefulWidget {
const Help({Key key}) : super(key: key);
@override
_HelpState createState() => _HelpState();
}
class _HelpState extends State<Help> {
final log = Logger('Help');
bool isLoading = false;
HttpServer httpServer;
// WebViewController _controller;
String url = "";
@override
void initState() {
super.initState();
MainModel mainModel = Provider.of<MainModel>(context, listen: false);
var isBuyer = mainModel.isBuyer();
this.url = "http://localhost:7777/web/index.html" +
(isBuyer ? "?is_buyer=true" : "?is_buyer=false");
_run(mainModel.setting);
}
void _run(Setting setting) async {
await _download(setting);
final directory = await getApplicationDocumentsDirectory();
var staticFiles = new VirtualDirectory('${directory.path}')
..allowDirectoryListing = true;
HttpServer.bind('0.0.0.0', 7777).then((server) async {
httpServer = server;
log.info('Server running');
server.listen(staticFiles.serveRequest);
// _controller.loadUrl(url);
log.info("locad url:$url");
}, onError: (e) {
log.warning("Error===>:$e");
});
}
Future<void> dispose() async {
super.dispose();
if (httpServer != null) await httpServer.close(force: true);
}
Future<void> _download(Setting setting) async {
final directory = (await getApplicationDocumentsDirectory()).path;
var file = File('$directory/${setting.helpFileName()}');
if (await file.exists()) {
return;
}
String url = setting.helpURL;
var req = await http.Client().get(Uri.parse(url));
File zippedFile = await file.writeAsBytes(req.bodyBytes);
File prev = File('$directory/web');
if (await prev.exists()) {
await prev.delete(recursive: true);
}
var bytes = zippedFile.readAsBytesSync();
var archive = ZipDecoder().decodeBytes(bytes);
for (var file in archive) {
var fileName = '$directory/web/${file.name}';
if (file.isFile) {
var outFile = File(fileName);
outFile = await outFile.create(recursive: true);
await outFile.writeAsBytes(file.content);
}
}
}
@override
Widget build(BuildContext context) {
return LocalProgress(
inAsyncCall: isLoading,
child: Scaffold(
appBar: AppBar(
iconTheme: IconThemeData(
color: Colors.black, //change your color here
),
centerTitle: true,
backgroundColor: Colors.white,
title: ClipRRect(
child: Image.asset("assets/logo.png", height: 40),
borderRadius: new BorderRadius.circular(15.0),
)),
body:Text("abc"),
// body: WebView(
// initialUrl: url,
// javascriptMode: JavascriptMode.unrestricted,
// onWebViewCreated: (WebViewController webViewController) {
// _controller = webViewController;
// },
// ),
),
);
}
}