Flutter и Firebase: есть ли способ запустить функцию для каждого снимка данных перед их отображением? - PullRequest
0 голосов
/ 29 марта 2020

Моя цель - запустить функцию дешифрования данных из базы данных до их отображения пользователю.

Вот схема базы данных

Вот виджет, отображающий данные:

Widget buildPatientCard(BuildContext context, DocumentSnapshot document) {

  final patient = Patient.fromSnapshot(document);

  return new Container(
  child: Card(
    child: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.only(top: 8.0, bottom: 4.0),
              child: Row(children: <Widget>[
                Text(patient.name,
                    style: new TextStyle(
                        fontSize: 24.0, fontWeight: FontWeight.bold)),
                Spacer(),
                Text(patient.gender,
                    style: new TextStyle(
                        fontSize: 20.0, fontWeight: FontWeight.bold)),
                Text(", ",
                    style: new TextStyle(
                        fontSize: 20.0, fontWeight: FontWeight.bold)),
                Text(patient.age,
                    style: new TextStyle(
                        fontSize: 20.0, fontWeight: FontWeight.bold))
              ]),
            ),
            Padding(
              padding: const EdgeInsets.only(top: 4.0, bottom: 80.0),
              child: Row(children: <Widget>[
                Text(patient.dob,
                    style: new TextStyle(
                        fontSize: 16.0, fontWeight: FontWeight.bold)),
                Spacer(),
              ]),
            ),
            Row(
              children: <Widget>[
                Text(
                  patient.notes,
                  style: new TextStyle(fontSize: 16.0),
                ),
                Spacer(),
                Icon(Icons.person),

Вот модель пациента:

Patient.fromSnapshot(DocumentSnapshot snapshot):
patientId = snapshot.documentID,
  name = snapshot['Patient name'],
  gender = snapshot['Gender'],
  age = snapshot['Age'],
  dob = snapshot['Date of Birth'],
  notes = snapshot['Notes'];   

Вот функция дешифрования, которую я хочу запустить для каждого из снимков данных перед их отображением:

  _decrypt() async {
var userKey = await getUserKey();

final decryptedText =
    await FlutterAesEcbPkcs5.decryptString(DATA FROM FIREBASE HERE, userKey);
return decryptedText;  
}  

1 Ответ

0 голосов
/ 30 марта 2020

Так что мне удалось заставить это работать через испытание и ОШИБКИ! Похоже, это не самый эффективный способ (об этом мы поговорим позже), но, по крайней мере, сейчас он работает.

Сначала я создал функцию, которая расшифровывает информацию о пациенте с помощью снимка и пользовательский ключ, например, так:

 Future<String> _decryptName() async {
  var userKey = await getUserKey();
  String decryptText =
      await FlutterAesEcbPkcs5.decryptString(patient.name, userKey);
  return decryptText;
}

Затем я использовал FutureBuilder для ожидания функции и создания снимка, вот так:

FutureBuilder(
  future: _decryptName(),
  builder: (context, AsyncSnapshot<String> snapshot) {
   if (snapshot.hasData)
    return Text(
     '${snapshot.data}',
       style: new TextStyle(
        fontSize: 24.0, fontWeight: FontWeight.bold));
   if (snapshot.error)
    return Text(
     'Error getting the data.',
       style: new TextStyle(
        fontSize: 7.0, fontWeight: FontWeight.bold));
         return const CircularProgressIndicator();
   }),

Как я уже сказал - это не так Это кажется наиболее эффективным подходом, поэтому, если кто-то найдет лучший способ, обязательно дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...