我想上一堂课,把类似的方法放在一起。
Riverpod使用的是ref,它只能通过扩展获得,但是如何在没有任何扩展和构建方法的裸类中使用它。
模型
class User {
final String uid;
final String username;
final String email;
User({required this.uid, required this.username, required this.email});}
StateNotifier
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../models/user.dart';
class UserProvider extends StateNotifier<User> {
UserProvider()
: super(User(
email: '',
username: 'default',
uid: '',
));
addUser(User user) {
state = user;
}}
使用地点/a类
import 'package:cloud_firestore/cloud_firestore.dart';
import '../providers/user_provider.dart';
import '../models/user.dart' as model;
class FirestoreMethods {
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
// HOW TO USE RIVERPOD HERE IN PLACE OF PROVIDER.
// EXAMPLE OF PROVIDER-
// final user = Provider.of<UserProvider>(context, listen: false);
// print(user.email);
// print(user.uid);
// print(user.username);
// Example of Riverpod
// final userProvider = StateNotifierProvider<UserProvider,
// model.User>((ref) => UserProvider());
// ABOVE RIVERPOD DOES NOT WORK HERE
}
发布于 2022-06-06 18:31:29
@AnmolSingh创建StateNotifierProvider时,您可以直接传递用户模型类。我修改了你的密码。如果您点击fab按钮,它将更新userProvider提供程序状态,并刷新UI。您可以在dartpad本身中运行此代码。
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
const Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(ProviderScope(child: MyApp()));
}
class MyApp extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final user = ref.watch(userProvider);
return MaterialApp(
theme: ThemeData.dark().copyWith(
scaffoldBackgroundColor: darkBlue,
),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: Text("UserName: ${user.username}"),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
ref.read(userProvider.notifier).addUser(User(
email: "krishnakumar@riverpod.com",
uid: "1",
username: "MSARKrish",
));
},
),
));
}
}
class User {
final String uid;
final String username;
final String email;
User({required this.uid, required this.username, required this.email});
}
class UserProvider extends StateNotifier<User> {
UserProvider()
: super(User(
email: '',
username: 'default',
uid: '',
));
addUser(User user) {
state = user;
}
}
final userProvider =
StateNotifierProvider<UserProvider, User>((ref) => UserProvider());
您可以将ref作为任何类的参数传递。
class FirestoreMethods
{
FirestoreMethods(this.ref)
final Ref ref;
}
https://stackoverflow.com/questions/72521691
复制相似问题