如何从Supabase获取数据到Flutter App

问题描述 投票:0回答:1

我有一个问题 我不知道如何从 Supabase 表获取数据到我的 Flutter 应用程序。 是的,我是 Supabase 的新手;) ...

好的,所以我有这个代码:

class _ProductInfoPageState extends State<ProductInfoPage> {
  List<dynamic>? products = []; // Storage for product data

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    fetchProducts();
  }

  Future<void> fetchProducts() async {
    var userId = supabase.auth.currentUser!.id;

    if (userId == null) {
      print('user is not logged!');
      return;
    }

    var response = await supabase
        .from('products')
        .select('*')
        .eq('user_id', userId)  // Filter to only include products for the logged-in user
        .order('id', ascending: true)
        .then((data) {
          if (data.error == null && data.data != null) {
            setState(() {
              products = data.data as List<dynamic>;  // Update the list of products
            });
          } else {
            print('Error fetching products: ${data.error?.message}');
          }
        }).catchError((err) {
          print('Caught error: $err');
        });
  }

问题在于验证器突出显示了 data.error 和 data.data 元素。 我不知道如何克服这一点。显然,我想在数据尚未加载或发生错误时处理异常,但不幸的是这些元素不起作用。 在回答这个问题时,我试图向 ChatGPT 寻求建议,但它建议在我的 var 响应末尾使用 .execute,这也不能被验证器识别。

在依赖项中我使用:

import 'package:flutter/material.dart';
import 'package:locs_app/main.dart';
import 'package:locs_app/widgets/crud_products.dart';
import 'package:supabase_flutter/supabase_flutter.dart';

supabase 实例和我的 url 和 anonKey 在 main.dart 中配置

有人知道或者有人可以向我解释为什么验证器会突出显示错误和数据元素吗? 或者如何替换它来处理异常?

提前感谢您的任何建议

flutter supabase supabase-flutter
1个回答
0
投票

你可以这样做:

Future<void> fetchProducts() async {
  var userId = supabase.auth.currentUser!.id;

  if (userId == null) {
    print('user is not logged!');
    return;
  }


  try {
    final productList = await supabase
       .from('products')
       .select('*')
       .eq('user_id', userId)  
       .order('id', ascending: true)
       .withConverter((list) {
         return (list as List).map((json) => Product.fromJson(json));
        },
    );
    setState(() {
        products = List.from(productList);
    });
  }
  catch(e, stackTrace) {
    print('Caught error: $e');
    print('Stacktrace : $stackTrace');
  }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.