Я сделал ОЧЕНЬ ПРОСТОЕ приложение для компании, в которой я работаю. Приложение просто открывает страницу в браузере, когда оно открывается (оно работает так же, как ярлык для сайта, кажется, глупо sh, но для очень простые люди).
Но у меня 2 проблемы.
1 - Я поставил функцию, чтобы открыть страницу в initState. Но скажем, пользователь однажды открыл приложение и снова вернулся в приложение. функция не будет работать, потому что приложение было построено ранее. Есть ли способ запускать функцию каждый раз, когда приложение показывает?
2 - Чтобы решить вышеуказанную проблему, я создал кнопку, по которой пользователь нажимает и вызывает функцию, и это нормально. Но у меня также есть компания lo go над кнопкой, и когда я открываю приложение, кнопка загружается раньше, чем lo go, и пользователь жаловался на это (размер изображения не проблема, его размер составляет всего 20 КБ). Есть ли способ заставить кнопку (и все) загружаться сразу после загрузки изображения? Поставить индикатор загрузки до того, как все загрузится.
Код:
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
**//the function:**
_launchURL() async {
const url =
'https://dev.testsite/pages/envio/document.php';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Error';
}
}
class _MyAppState extends State<MyApp> {
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) => _launchURL());
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Container(
color: Colors.blueGrey[100],
child: Column(
children: <Widget>[
SafeArea(
child: Padding(
padding: EdgeInsets.only(top: 5.0),
child: Image.asset(
'assets/logo.png', **//the image**
),
),
),
Padding(
padding: const EdgeInsets.fromLTRB(5.0, 40.0, 5.0, 30.0),
child: Text(
"Click the button if the \npage didn't load",
style: TextStyle(
fontSize: 18,
),
textAlign: TextAlign.center,
),
),
Padding(
padding: EdgeInsets.only(top: 30.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
SizedBox(
width: 250,
height: 150,
child: RaisedButton(
elevation: 20.0,
shape: StadiumBorder(
//borderRadius: new BorderRadius.circular(20.0),
side: BorderSide(
color: Color.fromRGBO(194, 39, 56, 1.0))),
color: Color.fromRGBO(194, 39, 56, 1.0),
onPressed: _launchURL,
child: Icon(Icons.arrow_right,
color: Color.fromRGBO(20, 21, 46, 1.0), size: 120),
),
),
],
),
),
],
),
),
),
);
}
}