簡體   English   中英

無法從方法“build”返回“MultiProvider”類型的值,因為它的返回類型為“Widget”

[英]A value of type 'MultiProvider' can't be returned from method 'build' because it has a return type of 'Widget'

我已經厭倦了 stream 用戶身份驗證 state 將 StreamProvider.value 更改為 MaterialApp。 但是我得到了這個錯誤:無法從方法“build”返回類型為“MultiProvider”的值,因為它的返回類型為“Widget”。 這是我在 pubspec.yaml 中的依賴項 firebase_core firebase_core: ^0.5.0 firebase_auth: ^0.18.0+1 cloud_firestore: ^0.14.0+2 provider: ^4.3.2+2

而且想不通。 我卡住了,請幫忙。 提前謝謝你的幫助。

import 'package:provider/provider.dart';
    import 'package:flutter/material.dart';
class MyAwesomeApp extends StatelessWidget {


@override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [StreamProvider<Usr>.value(value: Authenticate().userStream)],
      builder: (context, child) {
        return MaterialApp(
          home: Wrapper(),
        );
      },
    ); 
  }
}

//這是驗證 class 持有 stream

    import 'package:firebase_auth/firebase_auth.dart';

class Authenticate {
  //create an instance of firebase auth
  FirebaseAuth _auth = FirebaseAuth.instance;

  // Create a new user instance from my user model
  Usr _userFromFirebaseUser(User user) {
    return user != null ? Usr(uid: user.uid) : null;
  }

  // set up auth stream to listen to user auth status
  Stream<Usr> get userStream {
    return _auth.authStateChanges().map(
        _userFromFirebaseUser); // shorter way of mapping to user custom user object
    // .map((User user) => _userFromFirebaseUser(user)); //longer one
  }

  // sign in anon
  Future signInAnon() async {
    try {
      UserCredential response = await _auth.signInAnonymously();
      User user = response.user;
      return _userFromFirebaseUser(user);
    } catch (e) {
      print(e.toString());
      return null;
    }
  }
}

嘗試這個

import 'package:flutter/material.dart';
import 'package:provider/provider.dart' as statemanagement;

import 'models/model_provider.dart';
import 'modules/screen_root.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return statemanagement.MultiProvider(
      providers: [
        statemanagement.Provider<ModelProvider>(
          create: ((_) => ModelProvider())),
        ],
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Flutter Multi Provider',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: const ScreenRoot(),
      ),
    );
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM