【问题标题】:Dependency injection in flutter using service locator使用服务定位器在颤振中进行依赖注入
【发布时间】:2020-09-15 00:14:54
【问题描述】:

我正在尝试开发具有多个页面的 Flutter 应用程序。我有一个 SignInService,我正在尝试使用 get_it 服务定位器将其注入不同的页面。

ServiceLocator.dart

final locator = GetIt.instance;
void setupLocator() {
  locator.registerSingleton<SignInService>(SignInService());
  locator.registerSingleton<LocationService>(LocationService());
}

SignInService.dart

class SignInService {
  GoogleSignInAccount googleAccount;
  FirebaseUser firebaseUser;
  FirebaseAuth _auth = FirebaseAuth.instance;
.
.
}

当我登录时,firebaseUser 变量在这个类中被设置并且值不为空。

当我像这样在另一个页面中使用它时,我得到一个空值。

E/颤振(20069): [错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'uid'。 E/颤振(20069):接收者:空 E/flutter (20069):尝试调用:uid

另一个页面.dart

class _AnotherPageState extends State<AnotherPage> {
  final _signInService = locator<SignInService>();
  Firestore _firestore = Firestore.instance;

 _getUserCity() async {
    DocumentSnapshot snapshot = await _firestore
        .collection('users')
        .document(_signInService.firebaseUser.uid) //throws uid called on null error
        .get();
    _city = snapshot.data["city"];
  }


 _getPackage() async {
    _getUserCity();
    .
    .
}

@override
  initState(){
    super.initState();
    _getPackage();
  }

@override
  Widget build(BuildContext context) {
    return Scaffold(
        //...
     );
  }

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    如果您将GetIt.find(YourName); 作为第一行,则它不为空

    【讨论】:

      猜你喜欢
      • 2017-10-23
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多