Wie der Zugriff auf eine Klasse, Methode aus einer anderen Klasse dart?
Ich bin neu in der dart. Derzeit Arbeit an einer mobilen app durch flattern. Ich habe eine Helper
Klasse, die einige gemeinsame Methoden, die ich geplant habe, die überall in der app. Habe ich aufgenommen, dass Helper
Klasse in einer anderen Klasse. Aber, können Sie nicht in der Lage, Abb. Sie heraus, wie Sie den Zugriff auf Ihre Methoden.
Mein Allgemeines Helper
class code:
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;
}
}
Hier ist meine wichtigsten Programm-code, wo habe ich die Helper-Klasse & versucht zu zugreifen, es ist getUserDetailsFromSharedPreference ()
. In diesem Fall, ich erhalte eine Fehlermeldung wie Only static memebers can be accessed in initializers
. Ich habe auch versucht zu extends
Helper-Klasse in UserProfile
Klasse. Aber auch dort bin ich immer eine andere Art von Fehler. Nicht in der Lage, zu erkennen, wie, dies zu tun.
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ünter Zöchbauer ich habe mir Helper.dart
Datei wie diese, wie du vorgeschlagen hast -
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;
}
}
Nun, in meinem tryint, dass der Zugang getUserDetailsFromSharedPreference()
Methode bin ich immer den gleichen Fehler Only static memebers can be accessed in initializers
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie könnte gewährleisten, dass eine singleton-Instanz der Klasse mit einem öffentlichen Werk Konstruktor mit einem eigenen regelmäßigen Konstruktor:
Wenn Sie anrufen
new Helper()
, erhalten Sie immer die gleiche Instanz.Müssen Sie importieren Sie die Datei, die enthält
class Helper {}
überall dort, wo Sie es verwenden möchten.??=
bedeutetnew Helper._()
wird nur ausgeführt, wenn_instance
istnull
und wenn es ausgeführt wird, das Ergebnis zugewiesen wird, um_instance
bevor es an den Aufrufer zurückgegeben wird.update
getUserDetailsFromSharedPreference
istasync
und kann daher nicht verwendet werden in der Art und Weise Sie es verwenden, zumindest wird es nicht dazu führen, dass das erwartete Ergebnis.getUserDetailsFromSharedPreference
gibt eineFuture
liefert das Ergebnis, wenn dieFuture
abgeschlossen.Wenn Sie brauchen, um Zugang
userData
müssen Sie markieren die Methode, wo man mitasync
und verwendenawait
um das Ergebnis zu erhalten.Helper
Datei, wie kann ich den Zugriff der Helfer ruft die Methode? Dosis etwas wieHelper helper = new Helper(); var userData = helper.getUserDetailsFromSharedPreference();
mir helfen wird, um Zugriff auf die Klasse, als ich bereits getan habe, in meinem Beispiel-code oder etwas anderes, das ich tun müssen?helper.getUserDetailsFromSharedPreference();
ist, die richtige Weg oder muss ich einige änderung in das?getUserDetailsFromSharedPreference
Rückkehr eineFuture
. Ich aktualisiert meine Antwort. Siehe auch dartlang.org/tutorials/language/futures_userData
zunull
Ursachen??=
zum ausführen des Codes wieder._userData = null; var ud = await userData;
Future<Map> _userData;
tut.dropCache()
Methode zum zurücksetzen des Wertes führen und einen 2. Zugang, um tatsächlich laden Sie die Daten erneut.Zugriff auf andere Klassen-Methode können Sie einfach legen Sie
static
auf die Methode.