依照設定的里程碑,今天應該要完成使用者系統。
目前打算用創建遊客帳號,進入後再讓使用者綁定的方式。
所以今天要完成的,其實就只是記錄而已。
流程的說明如下:
其實就是想存在SharedPreferences裡就好了。
引入pub
引入相關的pub進到專案裡:
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
flame: ^1.8.2
particles_flutter: ^0.1.4
json_annotation: ^4.8.1
shared_preferences: ^2.2.0
dev_dependencies:
flutter_test:
sdk: flutter
build_runner: ^2.4.6
json_serializable: ^6.7.1
json_annotation是用來解析json資料的,
在dev區塊引入的build_runner及json_serializable,
則是能夠幫你產生gson與json之間轉換的code。
不引入其實也是可以的,只是要轉換的話,就要自己手打。
將SharedPreferences的讀寫封裝
在最一開始的main裡就初始化SharedPreferences,
寫一個實作單例的類別,在裡面寫好對儲存庫的讀取、新增及修改。
in main.dart
Future<void> main() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
StaticFunction.prefs = prefs;
}
in static.dart
class StaticFunction {
/// 單例
static final StaticFunction self = StaticFunction();
///共用
static late SharedPreferences prefs;
static StaticFunction getInstance() {
return self;
}
Future<void> createAccount () async {
}
UserData? getAccount () {
return <UserData>;
}
Future<UserData?> editAccount (UserData userData) async {
/// input
await prefs.setString("user_data",userData.toJson().toString());
/// output to check again
String? dataString = prefs.getString("user_data");
UserData userDataNew = UserData.fromJson(jsonDecode(dataString!));
return userDataNew;
}
}
建立相關的model
建立model資料夾,以及UserData、CardModel、CharacterModel。
標記上@JsonSerializable(),完成後執行 dart run build_runner build。
最後就會幫你創一個<類別名稱>.g.dart的檔案,裡面有自動產生的轉換方法。
像是這樣:
import 'package:json_annotation/json_annotation.dart';
part 'user_data.g.dart';
@JsonSerializable()
class UserData {
String id;
String name;
...
UserData(this.id, this.name...);
// 這個facotry是必須要有的,為了從map創建一個新的UserData實例
// 把整個map傳遞`_$UserDataFromJson()`
factory UserData.fromJson(Map<String, dynamic> json) => _$UserDataFromJson(json);
// `toJson`是用來限制即將進行序列化到JSON
Map<String, dynamic> toJson() => _$UserDataToJson(this);
}
串接UI
一開始有提到要有AlertDialog的提示,而且要和進入遊戲的流程串起來。
裡面的功能有需要修改使用者記錄的,也要加入修改資料庫的部份。
展示記錄
建立一個新的頁面,用來顯示使用者資料的。
今日結果