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 { final log = Logger('Help'); bool isLoading = false; HttpServer httpServer; // WebViewController _controller; String url = ""; @override void initState() { super.initState(); MainModel mainModel = Provider.of(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 dispose() async { super.dispose(); if (httpServer != null) await httpServer.close(force: true); } Future _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; // }, // ), ), ); } }