嗨,我是 flutter 新手,我正在尝试为链接到 supabase 数据库的应用程序创建登录页面,但我收到用户身份验证方法的错误。错误是“没有为类型‘PostgrestFilterBuilder’定义方法‘execute’。
登录页面:
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();
据我所知,
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())
希望这有帮助!