Вам необходимо создать локально json файл в вашем приложении, используя плагин path_provider. Этот файл инициализируется каждый раз, когда пользователь открывает приложение, и будет содержать пользовательскую модель, содержащую токен пользователя. На самой первой странице приложения в initState проверьте, не является ли пользователь нулевым. IF NULL: получить токен fcm и сохранить его в базе данных. После сохранения в базе данных записать токен в локально сохраненный файл. В противном случае: ничего не делать
В следующий раз, когда тот же пользователь снова откроет приложение в initstate, он проверит, не является ли пользователь нулевым. На этот раз он не добавит новый токен в базу данных, поскольку наш код для вставки токена в базу данных выиграл. 't execute.
Пример. Мы будем хранить пользователя следующим образом.
class User {
String token;
String platform;
User({
this.token = '',
this.platform = '',
});
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['token'] = this.token;
data['platform'] = this.platform;
return data;
}
User.fromJson(Map<String, dynamic> json): this(
platform: json["platform"],
token: json["token"],
);
}
Локальный файл данных:
class LocalData {
static User _user;
static User get user => _user;
/// Flag for Authentication.
static bool get isTokenAdded=> _user != null;
static loadData() async {
final file = File((await getApplicationDocumentsDirectory()).path + '/data.json');
try {
final data = jsonDecode(await file.readAsString());
_user = User.fromJson(data['user']);
} catch (e) {
print(e);
}
}
static writeData() async {
final file = File((await getApplicationDocumentsDirectory()).path + '/data.json');
await file.writeAsString(jsonEncode({
'user': _user?.toJson(),
}));
}
static void addToken(User user) {
LocalData._user = user;
writeData();
}
static void removeToken() {
LocalData._user = null;
writeData();
}
}
Основная функция приложения:
void main() async {
/// Load Local Data.
WidgetsFlutterBinding.ensureInitialized();
await LocalData.loadData();
runApp(YourApp());
}
Теперь на первой странице initState ваших приложений вы можете проверить, добавлен ли токен в базу данных с помощью
if(LocalData.isTokenAdded()){
//do nothing
}else{
//get token and insert it into database then write it in file:
LocalData.user.token = token;
LocalData.writeData();
}