如何修复错误:“未为类型‘PostgrestFilterBuilder’定义方法‘execute’

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

嗨,我是 flutter 新手,我正在尝试为链接到 supabase 数据库的应用程序创建登录页面,但我收到用户身份验证方法的错误。错误是“没有为类型‘PostgrestFilterBuilder’定义方法‘execute’。 enter image description here

登录页面:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:supabase_flutter/supabase_flutter.dart';

class CustomLoginPage extends StatefulWidget {
  const CustomLoginPage({Key? key}) : super(key: key);

  @override
  _CustomLoginPageState createState() => _CustomLoginPageState();
}

class _CustomLoginPageState extends State<CustomLoginPage> {
  late final TextEditingController _firstNameController = TextEditingController();
  late final TextEditingController _lastNameController = TextEditingController();
  late  final TextEditingController _idNumberController = TextEditingController();
  bool _isLoading = false;

  Future<void> _signIn() async {
    setState(() {
      _isLoading = true;
    });

    final client = Supabase.instance.client;
    final response = await client
        .from('user_profile')
        .select()
        .eq('first_name', _firstNameController.text.trim())
        .eq('last_name', _lastNameController.text.trim())
        .eq('id_number', _idNumberController.text.trim())
        .execute();

    if (response.error != null) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text('Login failed: ${response.error?.message}'),
          backgroundColor: Theme.of(context).colorScheme.error,
        ),
      );
    } else {
      final data = response.data;
      if (data != null && data.isNotEmpty) {
        // Handle successful authentication.
        Navigator.of(context).pushReplacementNamed('/account');
      } else {
        // Handle user not found.
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(
            content: Text('User not found. Please check your credentials.'),
            backgroundColor: Colors.red,
          ),
        );
      }
    }

    if (mounted) {
      setState(() {
        _isLoading = false;
      });
    }
  }

  @override
  void dispose() {
    _firstNameController.dispose();
    _lastNameController.dispose();
    _idNumberController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Custom Sign In')),
      body: ListView(
        padding: const EdgeInsets.all(16),
        children: [
          TextFormField(
            controller: _firstNameController,
            decoration: const InputDecoration(labelText: 'First Name'),
          ),
          TextFormField(
            controller: _lastNameController,
            decoration: const InputDecoration(labelText: 'Last Name'),
          ),
          TextFormField(
            controller: _idNumberController,
            decoration: const InputDecoration(labelText: 'ID Number'),
          ),
          const SizedBox(height: 20),
          ElevatedButton(
            onPressed: _isLoading ? null : _signIn,
            child: Text(_isLoading ? 'Loading...' : 'Sign In'),
          ),
        ],
      ),
    );
  }
}

主文件:

import 'package:flutter/material.dart';
import 'pages/login.dart';
import 'package:supabase_flutter/supabase_flutter.dart';

//void main() => runApp(MyApp());
void main() async {
  await Supabase.initialize(
    url: 'https://mtngkmicxfgticmpfrxi.supabase.co',
    anonKey:
        'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im10bmdrbWljeGZndGljbXBmcnhpIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDc0MTAwMTgsImV4cCI6MjAyMjk4NjAxOH0.GaBRK6gZqJoFeG43RmVJSH34AQNzb76x2WcOilO4SS0',
  );
  runApp(MyApp());
}

final supabase = Supabase.instance.client;

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My App',
      theme: ThemeData(
        // Specify a brightness that matches the color scheme
        brightness: Brightness.dark,
        primaryColor: Colors.blue,
        colorScheme: ColorScheme.fromSwatch(
          primarySwatch: Colors.blue,
          brightness:
              Brightness.dark, // Make sure this matches the above brightness
        ).copyWith(
          secondary: Colors.blue,
        ),
        // Define the default font family.
        fontFamily: 'Montserrat',
        // Define the default TextTheme.
        textTheme: TextTheme(
          headline6: TextStyle(fontSize: 36.0, fontStyle: FontStyle.italic),
          bodyText2: TextStyle(fontSize: 14.0, fontFamily: 'Hind'),
        ),
      ),
      home: LoginPage(),
    );
  }
}

感谢任何建议帮助

我最初尝试的方法是这样的,但我刚刚收到另一个与 from 命令相关的错误:

final response = await supabase
  .from('your_table')
  .select()
  .eq('column_name', 'value')
  .execute();
flutter dart flutter-dependencies supabase supabase-database
1个回答
0
投票

据我所知,

execute()
方法在
PostgrestFilterBuilder
类中不存在。

通过检查 Supabase 文档和包代码,

PostgrestFilterBuilder
已经是
Future
,您可以简单地
await
来完成查询。因此,更正方法是简单地删除
.execute()
调用,如下所示:

final response = await client
        .from('user_profile')
        .select()
        .eq('first_name', _firstNameController.text.trim())
        .eq('last_name', _lastNameController.text.trim())
        .eq('id_number', _idNumberController.text.trim())

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.