我试图路由到特定的ID /product/:ID,但当我点击我的卡导航时,它显示一个错误,但当我热加载时,它工作。
这是错误〉类型'Null'不是类型'String'的子类型
主dart中的路由器
final GoRouter _router = GoRouter(
debugLogDiagnostics: true,
initialLocation: '/',
routes: [
GoRoute(
path: '/',
builder: (BuildContext context, GoRouterState state) {
return const MainPage();
},
),
GoRoute(
path: '/product/:id',
builder: (BuildContext context, GoRouterState state)=> DetailsView(id:state.params["id"]!)
),
GoRoute(
path: '/homepage',
builder: (BuildContext context, GoRouterState state) {
return const HomePage();
},
),
],
);
下面是我如何路由到我的product/:id(我使用的是Carousel Slider)。
Widget buildImage(String urlImage, String title, int price, double padding,
int index, String id, BuildContext context) =>
GestureDetector(
**onTap: () {
context.push("/product/$id");
},**
child: Container(
............))) etc
这是我的detailsView页面,当导航到错误时会显示该页面。
class DetailsView extends StatefulWidget {
final String id;
/// Constructs a [DetailsScreen]
const DetailsView({super.key, required this.id});
@override
State<DetailsView> createState() => _DetailsViewState();
}
class _DetailsViewState extends State<DetailsView> {
var urlImage;
var description;
var price;
var title;
getProductInfo(id) async {
devtools.log(id);
var productRef = await FirebaseFirestore.instance
.collection('products')
.doc(id)
.get()
.then((doc) => {
urlImage = doc.get("urlImage"),
description = doc.get("description"),
price = doc.get("price"),
title = doc.get("title"),
});
}
@override
void initState() {
var id = widget.id;
getProductInfo(id);
super.initState();
}
@override
Widget build(BuildContext context) {
.....}
类型'Null'不是类型'String'的子类型,当我使用go-router包导航到我的页面时出现此错误
1条答案
按热度按时间hmae6n7t1#
因为你的
id
是null
,在路由器中由debugPrint
作为id
传递之前,请确保你的id
不为空。编辑:尝试使用命名路由(保证有效)
并用途: