在 GETx 上定义扩展函数

Fai*_*wan 1 dart flutter flutter-getx

我正在尝试定义一个extension函数GetInterfaceas

extension FindOrPut on GetInterface {
  S findOrPut<S>(S dependency,{String? tag}){
    if(GetInstance().isRegistered<S>(tag: tag)){
      return GetInstance().find<S>(tag: tag);
    }
    return GetInstance().put<S>(dependency,tag: tag);
  }
}
Run Code Online (Sandbox Code Playgroud)

与GETxextension Inst on GetInterface团队开发的相同。但我的代码没有按预期工作。

注意:如果我将扩展功能代码放在将要使用它的同一个文件中;效果很好。但如果我把上面的代码放在单独的文件函数中,在 Get 上找不到。

Ani*_*waj 5

我在 GetInterface 上创建了 FindOrPut 扩展。请检查下面的代码,它工作正常。

import 'package:amigo/src/controllers/test_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

extension FindOrPut on GetInterface {
  S findOrPut<S>(
    S dependency, {
    String? tag,
    bool permanent = false,
    InstanceBuilderCallback<S>? builder,
  }) {
    if (GetInstance().isRegistered<S>(tag: tag)) {
      return GetInstance().find<S>(tag: tag);
    }
    return GetInstance().put<S>(dependency, tag: tag, permanent: permanent);
  }
}

class ExtensionTesting extends StatelessWidget {
  ExtensionTesting({Key? key}) : super(key: key);

  //TODO: Include your getx controller here with findOrPut function
  final TestController _testController = Get.findOrPut(TestController());

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white30,
      child: Obx(() => Text(_testController.name.value)),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

有关工作代码,请检查Extension_method_implementation存储库。