dartの別のクラスから1つのクラスメソッドにアクセスするにはどうすればよいですか?

Suresh

ダーツは初めてです。現在、フラッターを介してモバイルアプリに取り組んでいます。私が持っているHelper、私はアプリ全体で計画されてきたいくつかの一般的なメソッドを持つクラスを。そのHelperクラスを別のクラスに含めましたしかし、図を描くことはできません。そのメソッドにアクセスする方法を説明します。

私のコモムHelperクラスコード:

import 'dart:async';
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';

class Helper {

  Map userDetails = {};
  Future<SharedPreferences> _prefs = SharedPreferences.getInstance();

  // --- Method for getting user details from shared preference ---
  Future<Map>getUserDetailsFromSharedPreference () async {
    try {
      final SharedPreferences prefs = await _prefs;

      if(prefs.getString('user') != null) {
        this.userDetails = json.decode(prefs.getString('user'));
      } else {
        print('Shared preference has no data');
      }

    } catch (e){
      print('Exception caught at getUserDetails method');
      print(e.toString());
    }

    return this.userDetails;
  }

}

これが私のメインプログラムコードで、Helperクラスを含めて、それにアクセスしようとしていますgetUserDetailsFromSharedPreference ()この場合、のようなエラーが発生しますOnly static memebers can be accessed in initializersまたextendsUserProfileクラスでヘルパークラスを試してみましたしかし、別の種類のエラーも発生しています。このことを行う方法を特定できません。

import 'package:flutter/material.dart';
import 'helper.dart';

class UserProfile extends StatefulWidget {
    @override
    UserProfileState createState() => new UserProfileState();
}

class UserProfileState extends State<UserProfile> {
    Helper helper = new Helper();
    var userData = helper.getUserDetailsFromSharedPreference();
}

@GünterZöchbauerHelper.dartあなたが提案したように、私はこのようなファイルを作成しました-

import 'dart:async';
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';

class Helper {

  Map userDetails = {};
  Future<SharedPreferences> _prefs = SharedPreferences.getInstance();

  static Helper _instance;
  factory Helper() => _instance ??= new Helper._();

  Helper._();

  // --- Method for getting user details from shared preference ---
  Future<Map>getUserDetailsFromSharedPreference () async {
    try {
      final SharedPreferences prefs = await _prefs;

      if(prefs.getString('user') != null) {
        this.userDetails = json.decode(prefs.getString('user'));
      } else {
        print('Shared preference has no data');
      }

    } catch (e){
      print('Exception caught at getUserDetails method');
      print(e.toString());
    }

    return this.userDetails;
  }

}

今、そのgetUserDetailsFromSharedPreference()メソッドにアクセスしようとすると、同じエラーが発生しますOnly static memebers can be accessed in initializers

ここに画像の説明を入力してください

GünterZöchbauer

パブリックファクトリコンストラクタとプライベートレギュラーコンストラクタを使用して、クラスのシングルトンインスタンスを確保できます。

class Helper {
  static Helper _instance;
  factory Helper() => _instance ??= new Helper._();

  Helper._();

  ...
}

を呼び出すとnew Helper()、常に同じインスタンスを取得します。

class Helper {}使用したい場所すべてを含むファイルをインポートする必要があります。

??=手段は、new Helper._()ときにのみ実行され_instanceているnullと、それが実行された場合、結果が割り当てられます_instanceそれが呼び出し元に返される前に。

更新

getUserDetailsFromSharedPreferenceでありasync、したがって、それを使用する方法で使用することはできません。少なくとも、期待される結果にはつながりません。完了時に結果を提供するをgetUserDetailsFromSharedPreference返しますFutureFuture

class UserProfileState extends State<UserProfile> {
    Helper helper = new Helper();
    Future<Map> _userData; // this with ??= of the next line is to prevent `getUserDetailsFromSharedPreference` to be called more than once 
    Future<Map> get userData => _userData ??= helper.getUserDetailsFromSharedPreference();
}

アクセスuserDataする必要がある場合はasync、使用awaitするメソッドにマークを付けて、結果を取得するために使用する必要があります

  foo() async {
    var ud = await userData;
    print(ud);
  }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

別のクラスのクラスからメソッドにアクセスするにはどうすればよいですか?

分類Dev

Flutterで別のクラスからクラスメソッドにアクセスするにはどうすればよいですか?

分類Dev

UWP クラスから特定の 1 つのメソッドだけにアクセスするにはどうすればよいですか?

分類Dev

メソッドを1つのクラスだけにアクセスできるようにするにはどうすればよいですか?

分類Dev

クラス内のメソッドにアクセスするにはどうすればよいですか?

分類Dev

別のクラスからアクティビティの1つのメソッドを呼び出すにはどうすればよいですか

分類Dev

別のメソッドからUICollectionViewCellのラベルのテキストにアクセスするにはどうすればよいですか?

分類Dev

別のクラスからcudafiedメソッドにアクセスするにはどうすればよいですか?

分類Dev

クラスの他のメソッドからメソッドにアクセスするにはどうすればよいですか?

分類Dev

同じクラスのメインメソッドから非静的メソッドにアクセスするにはどうすればよいですか?

分類Dev

クラス外からクラス内のメソッドにアクセスするにはどうすればよいですか?

分類Dev

別のクラスからメソッドを実行するにはどうすればよいですか?

分類Dev

Javaの別のクラスのメソッドの変数にアクセスするにはどうすればよいですか?

分類Dev

1つのクラスだけが別のクラスのメソッドにアクセスできるようにするにはどうすればよいですか?

分類Dev

別のクラス内のBackgroundWorkers ProgressChangedメソッドにアクセスするにはどうすればよいですか

分類Dev

別のクラスのメソッドにアクセスするにはどうすればよいですか?

分類Dev

JavaFX:通常のJavaクラスからコントローラーメソッドにアクセスするにはどうすればよいですか?

分類Dev

同じクラスの以前のメソッドから ArrayList にアクセスするにはどうすればよいですか?

分類Dev

Javaの属性のメソッドから包含クラスにアクセスするにはどうすればよいですか?

分類Dev

別のクラスからArrayListにアクセスするにはどうすればよいですか?

分類Dev

別のクラスからSurfaceViewにアクセスするにはどうすればよいですか?

分類Dev

Android:クラスのメソッドから値にアクセスするにはどうすればよいですか?

分類Dev

Javaの別のクラスのメインクラスからintにアクセスするにはどうすればよいですか?

分類Dev

Pythonのクラスメソッド内で「静的」クラス変数にアクセスするにはどうすればよいですか?

分類Dev

別のメソッドからメインメソッドにアクセスするにはどうすればよいですかc#

分類Dev

Javaの別のクラスの別のメソッド内にあるクラス内のメソッドにアクセスするにはどうすればよいですか?

分類Dev

別のVMから1つのVMにアクセスするにはどうすればよいですか?

分類Dev

あるクラスのメソッドを別のクラスからアクセスできるようにするにはどうすればよいですか?

分類Dev

別のクラスからオブジェクトのメソッドにアクセスして、クラスの可視性を低くするにはどうすればよいですか?

Related 関連記事

  1. 1

    別のクラスのクラスからメソッドにアクセスするにはどうすればよいですか?

  2. 2

    Flutterで別のクラスからクラスメソッドにアクセスするにはどうすればよいですか?

  3. 3

    UWP クラスから特定の 1 つのメソッドだけにアクセスするにはどうすればよいですか?

  4. 4

    メソッドを1つのクラスだけにアクセスできるようにするにはどうすればよいですか?

  5. 5

    クラス内のメソッドにアクセスするにはどうすればよいですか?

  6. 6

    別のクラスからアクティビティの1つのメソッドを呼び出すにはどうすればよいですか

  7. 7

    別のメソッドからUICollectionViewCellのラベルのテキストにアクセスするにはどうすればよいですか?

  8. 8

    別のクラスからcudafiedメソッドにアクセスするにはどうすればよいですか?

  9. 9

    クラスの他のメソッドからメソッドにアクセスするにはどうすればよいですか?

  10. 10

    同じクラスのメインメソッドから非静的メソッドにアクセスするにはどうすればよいですか?

  11. 11

    クラス外からクラス内のメソッドにアクセスするにはどうすればよいですか?

  12. 12

    別のクラスからメソッドを実行するにはどうすればよいですか?

  13. 13

    Javaの別のクラスのメソッドの変数にアクセスするにはどうすればよいですか?

  14. 14

    1つのクラスだけが別のクラスのメソッドにアクセスできるようにするにはどうすればよいですか?

  15. 15

    別のクラス内のBackgroundWorkers ProgressChangedメソッドにアクセスするにはどうすればよいですか

  16. 16

    別のクラスのメソッドにアクセスするにはどうすればよいですか?

  17. 17

    JavaFX:通常のJavaクラスからコントローラーメソッドにアクセスするにはどうすればよいですか?

  18. 18

    同じクラスの以前のメソッドから ArrayList にアクセスするにはどうすればよいですか?

  19. 19

    Javaの属性のメソッドから包含クラスにアクセスするにはどうすればよいですか?

  20. 20

    別のクラスからArrayListにアクセスするにはどうすればよいですか?

  21. 21

    別のクラスからSurfaceViewにアクセスするにはどうすればよいですか?

  22. 22

    Android:クラスのメソッドから値にアクセスするにはどうすればよいですか?

  23. 23

    Javaの別のクラスのメインクラスからintにアクセスするにはどうすればよいですか?

  24. 24

    Pythonのクラスメソッド内で「静的」クラス変数にアクセスするにはどうすればよいですか?

  25. 25

    別のメソッドからメインメソッドにアクセスするにはどうすればよいですかc#

  26. 26

    Javaの別のクラスの別のメソッド内にあるクラス内のメソッドにアクセスするにはどうすればよいですか?

  27. 27

    別のVMから1つのVMにアクセスするにはどうすればよいですか?

  28. 28

    あるクラスのメソッドを別のクラスからアクセスできるようにするにはどうすればよいですか?

  29. 29

    別のクラスからオブジェクトのメソッドにアクセスして、クラスの可視性を低くするにはどうすればよいですか?

ホットタグ

アーカイブ