android 使用router-go包传递ID时出现问题

axzmvihb  于 2023-03-16  发布在  Android
关注(0)|答案(1)|浏览(76)

我试图路由到特定的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包导航到我的页面时出现此错误

hmae6n7t

hmae6n7t1#

因为你的idnull,在路由器中由debugPrint作为id传递之前,请确保你的id不为空。

onTap: () {
       debugPrint("The value of id is $id"); // Here you should get some string instead of null
       if(id !=null) {context.push("/product/$id");}
      },

编辑:尝试使用命名路由(保证有效

GoRoute(
    path: '/product/:id',  
    name: 'product',
    builder: (context, state) => DetailsView(
      id: state.params['id']
    ),
  ),

并用途:

onTap: () {
   context.pushNamed("product", params: {'id1': id});
 },

相关问题