import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_web_plugins/url_strategy.dart';
import 'backend/firebase/firebase_config.dart';
import 'flutter_flow/flutter_flow_theme.dart';
import 'flutter_flow/flutter_flow_util.dart';
import 'flutter_flow/internationalization.dart';
import 'flutter_flow/nav/nav.dart';
import 'index.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
GoRouter.optionURLReflectsImperativeAPIs = true;
usePathUrlStrategy();
await initFirebase();
await FlutterFlowTheme.initialize();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
// This widget is the root of your application.
@override
State<MyApp> createState() => _MyAppState();
static _MyAppState of(BuildContext context) =>
context.findAncestorStateOfType<_MyAppState>()!;
}
class _MyAppState extends State<MyApp> {
Locale? _locale;
ThemeMode _themeMode = FlutterFlowTheme.themeMode;
late AppStateNotifier _appStateNotifier;
late GoRouter _router;
bool displaySplashImage = true;
@override
void initState() {
super.initState();
_appStateNotifier = AppStateNotifier.instance;
_router = createRouter(_appStateNotifier);
Future.delayed(Duration(milliseconds: 3000),
() => setState(() => _appStateNotifier.stopShowingSplashImage()));
}
void setLocale(String language) {
setState(() => _locale = createLocale(language));
}
void setThemeMode(ThemeMode mode) => setState(() {
_themeMode = mode;
FlutterFlowTheme.saveThemeMode(mode);
});
@override
Widget build(BuildContext context) {
return MaterialApp.router(
title: 'Refereevision App',
localizationsDelegates: [
FFLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
locale: _locale,
supportedLocales: const [
Locale('en'),
],
theme: ThemeData(
brightness: Brightness.light,
useMaterial3: false,
),
darkTheme: ThemeData(
brightness: Brightness.dark,
useMaterial3: false,
),
themeMode: _themeMode,
routerConfig: _router,
);
}
}
我需要实现按两次后退按钮时应用程序退出的功能。 我是颤振编程的新手,很困惑在上面的代码中在哪里实现这个功能。 仅供参考 Android 版本 14。 目前,按下后退按钮,它只是反向重新导航整个流程。 请帮忙。
要实现按两次后退按钮退出应用程序的功能,您可以使用 WillPopScope 小部件。该小部件允许您拦截后退按钮按下并执行自定义操作。以下是如何使用它的示例:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool canPop = false;
@override
Widget build(BuildContext context) {
return PopScope(
canPop: canPop,
onPopInvoked: (didPop) {
if (!canPop) {
canPop = true;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Press back again to exit'),
),
);
}
},
child: Scaffold(
appBar: AppBar(
title: Text('Double Back Press to Exit'),
),
body: Center(
child: Text('Press the back button twice to exit'),
),
),
);
}
}