第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在達特/顫音中實現(xiàn)內聯(lián)接口而不是使用類?

如何在達特/顫音中實現(xiàn)內聯(lián)接口而不是使用類?

哈士奇WWW 2022-09-14 15:19:33
有沒有辦法在飛鏢/顫動中實現(xiàn)接口而不必使用類?目前,我如何實現(xiàn)它與下面的代碼class _UserSignupInterface extends _SignupSelectUsernamePageState    implements UserSignupInterface {  @override  void onSuccess() {    _navigateToUserPage();  }  @override  void onError() {    setState(() {      _isSignupClickable = true;    });  }}_attemptSignup() {  UserSingleton userSingletonInstance = UserSingleton().getInstance();  UserSignupInterface _userSignupInterface = _UserSignupInterface();  UserSingleton().getInstance().user.username = _username;  UserLoginController.attemptSignup(_userSignupInterface,      userSingletonInstance.user, userSingletonInstance.userDetail, _groupID);}但是,我想實現(xiàn)這些接口方法,而不必使用類,就像我在java中一樣。類似于下面的代碼。UserController.attemptSignup(context, new UserSignupRequest() {            @Override            public void onSuccess(User user, UserDetail userDetail, Group group) {                btnContinueWithFacebook.setEnabled(true);                Intent intent = new Intent(context, ScoopActivity.class);                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);                progressBar.setVisibility(View.GONE);                startActivity(intent);            }            @Override            public void onFail() {                Log.d(APP.TAG, "Signup request has failed");                btnContinueWithFacebook.setEnabled(true);                progressBar.setVisibility(View.GONE);                /**                 * TODO:: Notify user of signup attempt failure                 */            }        }, user, userDetail, group_id);
查看完整描述

3 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

達特中沒有這樣的功能。為了實現(xiàn)接口,您必須聲明一個類。


替代方法是定義 API 以接受單個函數(shù)而不是單個對象,或者聲明一個幫助器類,該類將必要方法的行為作為構造函數(shù)參數(shù)。


例:


class _UserSignupInterface extends _SignupSelectUsernamePageState

    implements UserSignupInterface {

  void Function(_UserSingupInterface self) _onSuccess;

  void Function(_UserSingupInterface self) _onError;

  _UserSignupInterface(this._onSuccess, this._onError);


  @override

  void onSuccess() { 

    _onSuccess(this);

  }


  @override

  void onError() {

    _onError(this);

  }

}

然后,您可以將其稱為:


... _UserSignupInterface((self) { 

    self._navigateToUserPage();

}, (self) {

  self.setState(() {

    self._isSignupClickable = true;

  });

})

誠然,它不像Java那么漂亮。


查看完整回答
反對 回復 2022-09-14
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

我知道這個問題已經有了答案,但我想添加一個更整潔的實現(xiàn),接近我通常使用。Java inline interface


首先,我們有一個類,它充當我們的接口:


class HttpRequestCallback {

  /// Called when http request is completed

  final void Function() onCompleted;


  /// Called when http request is successful

  ///  * [message] is a dynamic object returned by the http server response

  final void Function(dynamic message) onSuccess;


  /// Called when http request fail

  ///  * [message] is a dynamic object returned by the http server response

  final void Function(dynamic message) onError;


  HttpRequestCallback(

      {required this.onCompleted,

      required this.onSuccess,

      required this.onError});

}

其次,我們有一個函數(shù),期望接口作為參數(shù):


Future<void> login(LoginModel model, {HttpRequestCallback? callback}) async {

    var response = await httpClient.doPost(app_constants.ApiEndpoints.Login,

        body: model.toJson());

    // Api request completed

    callback?.onCompleted();


    if (response.success) {

      // Api request successful

      callback?.onSuccess(LoginResponseModel.fromJson(

          response.message as Map<String, dynamic>));

    } else {

      // Api request failed

      callback?.onError(response.message);

    }

  }

最后,我們調用傳遞接口的函數(shù)作為參數(shù):


...

apiService.login(loginModel,

    callback: HttpRequestCallback(

       onCompleted: () {

        //...

       },

       onSuccess: (message) {

        //...

       },

       onError: (message) {

        //...

       }

    ));

...


查看完整回答
反對 回復 2022-09-14
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

我認為您正在Dart中尋找匿名類,但它不受支持。


如果我很好地理解了你想要做什么,你可以通過這種方式將函數(shù)作為參數(shù)傳遞來實現(xiàn)類似的事情:


enum ResultLogin { OK, ERROR }


class Login {

   Function _listener; // generic function


   Login(listener) {

      _listener = listener;

   }


   void run(){

      ResultLogin result = *DO_YOUR_LOGIN_FUNCTION*;

      _listener(result);

   }

}   


class Main {

    void doLogin(){

        Login myLogin = new Login((ResultLogin result){

                switch(result){


                   case OK:

                      print("OK");

                     break;


                   case ERROR:

                      print("ERROR");

                     break;


                   default:

                     break;

                }

            }

        );


    }

}

通過這種方式,您可以根據(jù)需要處理結果并刷新一些小部件狀態(tài)。


查看完整回答
反對 回復 2022-09-14
  • 3 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號