Flutter页面未找到处理插件page_not_found的使用
Flutter页面未找到处理插件page_not_found的使用
开始使用
page_not_found
是一个专门为 Flutter 设计的用于显示 404 错误页面的包。它提供了可自定义的小部件,可以集成图片和 Lottie 动画。开发人员可以使用它来创建视觉上吸引人的错误页面,以增强 Web 和移动应用的用户体验。
特性通常包括:
- 图片支持:10 种不同的 404 错误页面图片。
- Lottie 动画:10 种不同的 Lottie 动画。
安装
要使用 page_not_found
包,请在 pubspec.yaml
文件的 dependencies
部分添加以下行:
dependencies:
page_not_found: ^<最新版本>
404 Lottie 动画
动画 1 | 动画 2 | 动画 3 | 动画 4 | 动画 5 |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
动画 6 | 动画 7 | 动画 8 | 动画 9 | 动画 10 |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
使用 page_not_found
显示动画错误页面
要使用 page_not_found
包,您可以显示一个带有可定制 GIF 尺寸的动画错误页面。以下是一个示例:
import 'package:flutter/material.dart';
import 'package:page_not_found/page_not_found.dart';
FutureBuilder<Widget>(
future: PageNotFound.animatedError10(
context: context,
gifHeight: 200.0, // 可选:根据需求自定义 gif 高度
gifWidth: 200.0, // 可选:根据需求自定义 gif 宽度
),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator()); // 如果正在加载,显示进度指示器
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}')); // 如果发生错误,显示错误消息
} else if (snapshot.hasData) {
return snapshot.data!; // 如果成功获取数据,显示返回的数据
} else {
return const Center(child: Text('Something went wrong.')); // 如果其他情况,显示默认错误信息
}
},
),
404 错误图片
图片 1 | 图片 2 | 图片 3 | 图片 4 | 图片 5 |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
图片 6 | 图片 7 | 图片 8 | 图片 9 | 图片 10 |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
使用 page_not_found
显示错误图片
import 'package:flutter/material.dart';
import 'package:page_not_found/page_not_found.dart';
FutureBuilder<Widget>(
future: PageNotFound.errorTemplate1(
context: context,
),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator()); // 如果正在加载,显示进度指示器
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}')); // 如果发生错误,显示错误消息
} else if (snapshot.hasData) {
return snapshot.data!; // 如果成功获取数据,显示返回的数据
} else {
return const Center(child: Text('Something went wrong.')); // 如果其他情况,显示默认错误信息
}
},
),
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 page_not_found
插件来显示动画错误页面。
import 'package:flutter/material.dart';
import 'package:page_not_found/page_not_found.dart';
void main() {
runApp(const Example());
}
class Example extends StatefulWidget {
const Example({super.key});
[@override](/user/override)
State<Example> createState() => _ExampleState();
}
class _ExampleState extends State<Example> {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false, // 禁用调试横幅
home: Scaffold(
body: FutureBuilder<Widget>(
future: PageNotFound.animatedError10(
context: context,
gifHeight: 200.0,
gifWidth: 200.0,
),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
} else if (snapshot.hasError) {
return Center(
child: Text('Error: ${snapshot.error}'),
);
} else if (snapshot.hasData) {
return snapshot.data!;
} else {
return const Center(
child: Text('Something went wrong.'),
);
}
},
),
),
);
}
}
更多关于Flutter页面未找到处理插件page_not_found的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter页面未找到处理插件page_not_found的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,处理页面未找到(404)的情况通常可以通过自定义路由和错误处理来实现。虽然Flutter本身没有内置的“page_not_found”插件,但你可以通过以下步骤来实现类似的功能。
1. 自定义路由
你可以使用 MaterialApp
的 onGenerateRoute
属性来自定义路由处理逻辑。当路由未找到时,可以跳转到一个自定义的“页面未找到”页面。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
// 自定义路由处理
onGenerateRoute: (settings) {
// 根据路由名称处理不同的页面
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (context) => HomePage());
case '/about':
return MaterialPageRoute(builder: (context) => AboutPage());
default:
// 如果路由未找到,跳转到404页面
return MaterialPageRoute(builder: (context) => NotFoundPage());
}
},
initialRoute: '/',
);
}
}
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Center(
child: Text('Home Page'),
),
);
}
}
class AboutPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('About'),
),
body: Center(
child: Text('About Page'),
),
);
}
}
class NotFoundPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('404'),
),
body: Center(
child: Text('Page Not Found'),
),
);
}
}
2. 使用 onUnknownRoute
你还可以使用 MaterialApp
的 onUnknownRoute
属性来处理未知路由。当 onGenerateRoute
没有处理某个路由时,onUnknownRoute
会被调用。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
// 自定义路由处理
onGenerateRoute: (settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (context) => HomePage());
case '/about':
return MaterialPageRoute(builder: (context) => AboutPage());
default:
// 如果路由未找到,返回null,让onUnknownRoute处理
return null;
}
},
// 处理未知路由
onUnknownRoute: (settings) {
return MaterialPageRoute(builder: (context) => NotFoundPage());
},
initialRoute: '/',
);
}
}
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Center(
child: Text('Home Page'),
),
);
}
}
class AboutPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('About'),
),
body: Center(
child: Text('About Page'),
),
);
}
}
class NotFoundPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('404'),
),
body: Center(
child: Text('Page Not Found'),
),
);
}
}
3. 使用第三方插件
虽然Flutter本身没有专门的“page_not_found”插件,但你可以使用一些第三方路由管理插件,如 auto_route
或 go_router
,它们提供了更强大的路由管理功能,并且可以更容易地处理404页面。
例如,使用 go_router
处理404页面:
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
void main() {
final router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => HomePage(),
),
GoRoute(
path: '/about',
builder: (context, state) => AboutPage(),
),
],
errorBuilder: (context, state) => NotFoundPage(),
);
runApp(MyApp(router: router));
}
class MyApp extends StatelessWidget {
final GoRouter router;
MyApp({required this.router});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp.router(
routerConfig: router,
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
);
}
}
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Center(
child: Text('Home Page'),
),
);
}
}
class AboutPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('About'),
),
body: Center(
child: Text('About Page'),
),
);
}
}
class NotFoundPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('404'),
),
body: Center(
child: Text('Page Not Found'),
),
);
}
}