首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类中的Riverpod还是构建方法之外的?

类中的Riverpod还是构建方法之外的?
EN

Stack Overflow用户
提问于 2022-06-06 17:56:08
回答 1查看 1.1K关注 0票数 1

我想上一堂课,把类似的方法放在一起。

Riverpod使用的是ref,它只能通过扩展获得,但是如何在没有任何扩展和构建方法的裸类中使用它。

模型

代码语言:javascript
运行
复制
class User {
final String uid;
final String username;
final String email;

User({required this.uid, required this.username, required this.email});}

StateNotifier

代码语言:javascript
运行
复制
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类

代码语言:javascript
运行
复制
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
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-06 18:31:29

@AnmolSingh创建StateNotifierProvider时,您可以直接传递用户模型类。我修改了你的密码。如果您点击fab按钮,它将更新userProvider提供程序状态,并刷新UI。您可以在dartpad本身中运行此代码。

代码语言:javascript
运行
复制
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作为任何类的参数传递。

代码语言:javascript
运行
复制
class FirestoreMethods
{
  FirestoreMethods(this.ref)
  final Ref ref;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72521691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档