我是飞镖的新手 . 目前,通过扑动在移动应用程序上工作 . 我有一个 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;
}
}
这是我的主程序代码,其中我是've included the Helper class & trying to access it' s getUserDetailsFromSharedPreference ()
. 在这种情况下,我收到像 Only static memebers can be accessed in initializers
这样的错误 . 我也试过 extends
级的 extends
帮助班 . 但是,我也能够确定如何做这件事 .
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öchbauer我按照你的建议制作了我的 Helper.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;
}
}
现在,在我的tryint访问 getUserDetailsFromSharedPreference()
方法我得到相同的错误 Only static memebers can be accessed in initializers
.
2 回答
您可以使用具有私有常规构造函数的公共工厂构造函数来确保该类的单例实例:
如果您调用
new Helper()
,您将始终获得相同的实例 .您需要在任何要使用它的位置导入包含
class Helper {}
的文件 .??=
表示new Helper._()
仅在_instance
为null
时执行,如果执行,则结果将在返回给调用者之前分配给_instance
.update
getUserDetailsFromSharedPreference
是async
,因此不能以您使用它的方式使用,至少它不会导致预期的结果 .getUserDetailsFromSharedPreference
返回Future
,在Future
完成时提供结果 .如果需要访问
userData
,则需要标记使用async
的方法,并使用await
获取结果 .要访问其他类方法,您只需将
static
放在方法上即可 .