我正在通过修改flutter书中的示例源文件来创建一个webview应用程序。当你运行应用程序时,启动画面会打开,然后移动到网页视图,但没有与启动画面相关的注释或解释,所以我不知道代码在哪里。
代码在这里
main.dart
import 'package:ch_08/screen/home_screen.dart';
import 'package:flutter/material.dart';
void main() {
// 플러터 프레임워크가 앱을 실행할 준비가 될때까지
// 기다림
WidgetsFlutterBinding.ensureInitialized();
runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
home: HomeScreen(),
),
);
}
home_screen.dart
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:webview_flutter/webview_flutter.dart';
class HomeScreen extends StatefulWidget {
//uri = 불러올 홈페이지 주소
final uri = Uri.parse('https://google.com');
HomeScreen({Key? key}) : super(key: key);
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
List<DateTime> clicked = [];
final clickWaitTime = const Duration(seconds: 1);
final controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(NavigationDelegate(onPageFinished: (String url) {
}));
@override
void initState() {
controller.loadRequest(widget.uri);
super.initState();
}
@override
Widget build(BuildContext context) {
return PopScope(
canPop: false,
onPopInvoked: (didPop) {
clicked.add(DateTime.now());
//마지막 클릭이 마지막 클릭 1초 후인 경우.
//카운터를 재설정하려면 목록을 지웁니다.
if (clicked.length > 1 &&
clicked[clicked.length - 1]
.difference(clicked[clicked.length - 2]) >
clickWaitTime) {
clicked.removeAt(clicked.length - 2);
}
//목록의 모든 클릭이 "2회 이상" 클릭이고 총 3번의 클릭이 있는 경우
//사용자가 세 번 클릭했음을 의미합니다.
if (clicked.length == 3) {
clicked.clear();
SystemNavigator.pop();
exit(0);
return;
}
//사용자가 더 많은 클릭을 원하는지 확인하기 위해 1초 동안 기다립니다.
Future.delayed(const Duration(seconds: 1), () {
if (clicked.length == 1) {
controller?.goBack();
} else if (clicked.length == 2) {
showMessage("뒤로가기를 3번 연속으로 누르면 종료됩니다.");
}
clicked.clear();
});
},
child: Scaffold(
body: SafeArea(
child: WebViewWidget(controller: controller),
),
),
);
}
void showMessage(String message) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(message)),
);
}
}
我自己解决了。如果您以前从未制作过启动画面,那么它可能不是您想要的。
我联系了这本书的作者并得到了答案。
基本上,当您在模拟器中运行应用程序时,Flutter 会在放大应用程序图标的同时运行应用程序图标。
如果需要,您可以使用 flutter_native_splash 包而不是默认设置来创建启动屏幕。