Файл: Руководство пользователя для разработанной системы. Пятый раздел приводит данные по информационной безопасности приложения.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.11.2023
Просмотров: 148
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
1.1 Анализ некоторых существующих решений
1.1.4 Total Network Inventory 5
2.1 Планирование архитектуры сервиса
2.2 Обзор и определение основных технологий и средств
2.4 Организация хранения данных
3 Разработка программного обеспечения
3.1 Разработка программного средства
3.2 Разработка компонентов клиентского приложения
drawer: SideDrawer(),
appBar: AppBar(),
body: current == null
? Center(
child: CircularProgressIndicator(),
)
: Container(
padding: EdgeInsets.all(16),
child: StreamBuilder(
stream: Provider.of
.collection("addresses")
.where("user", isEqualTo: current.uid)
.snapshots(),
builder: (_, snap) {
switch (snap.connectionState) {
case ConnectionState.waiting:
return Center(
child: CircularProgressIndicator(),
);
default:
if (snap.hasData && !snap.data.documents.isEmpty) {
addressID = snap.data.documents.first.documentID;
print(addressID);
return ListView.builder(
itemCount: snap
.data.documents.first.data["addresses"].length,
itemBuilder: (_, idx) => ListTile(
title: Text(snap
.data.documents.first.data["addresses"][idx]),
trailing: Icon(Icons.location_on),
onLongPress: () => Firestore.instance
.document(
"addresses/${snap.data.documents.first.documentID}")
.updateData({
"addresses": FieldValue.arrayRemove([snap
.data.documents.first.data["addresses"][idx]])
}),
),
);
} else {
Provider.of
.collection("addresses")
.add({
"user": current.uid,
"addresses": [],
}).then((ref) => addressID = ref.documentID);
return Center(child: Text('No addresses'));
}
}
},
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
backgroundColor: Theme.of(context).accentColor,
onPressed: () => showDialog(
context: context,
barrierDismissible: true,
builder: (ctx) => AlertDialog(
contentPadding: EdgeInsets.all(8),
content: Row(
children: [
Expanded(
child: TextField(
controller: _address,
autofocus: true,
decoration: InputDecoration(labelText: 'Address'),
),
)
],
),
actions: [
FlatButton(
child: Text('Dismiss'),
onPressed: () => Navigator.pop(ctx),
textColor: Theme.of(context).primaryColor,
),
FlatButton(
child: Text('Accept'),
textColor: Theme.of(context).primaryColor,
onPressed: () {
Provider.of
.document("addresses/$addressID")
.updateData({
"addresses": FieldValue.arrayUnion([_address.text])
});
_address.text = '';
Navigator.pop(ctx);
},)],),),),);}}
ПРИЛОЖЕНИЕ Е
Исходный код deliveries_page.dart
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:meal_kit_delivery/elements/side_drawer.dart';
import 'package:meal_kit_delivery/elements/delivery_item.dart';
import 'package:meal_kit_delivery/elements/order_item.dart';
import 'package:provider/provider.dart';
class DeliveriesPage extends StatefulWidget {
DeliveriesPage({Key key}) : super(key: key);
@override
_DeliveriesPageState createState() => _DeliveriesPageState();
}
class _DeliveriesPageState extends State
FirebaseUser current;
@override
void initState() {
FirebaseAuth fba = FirebaseAuth.instance;
fba.currentUser().then((value) => setState(() {
current = value;
}));
super.initState();
}
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 2,
child: Scaffold(
drawer: SideDrawer(),
appBar: AppBar(
bottom: TabBar(
indicatorColor: Theme.of(context).accentColor,
tabs:
Tab(text: 'Deliveries'),
Tab(text: 'Orders'),
],
),
),
body: current == null
? Center(
child: CircularProgressIndicator(),
)
: Container(
padding: EdgeInsets.all(24),
child: Center(
child: TabBarView(
children:
StreamBuilder(
stream: Provider.of
.collection("orders")
.where("user", isEqualTo: current.uid)
.where("delivered", isEqualTo: false)
.snapshots(),
builder: (_, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return Center(
child: CircularProgressIndicator(),
);
default:
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (_, idx) {
return DeliveryItem(
isTracking: true,
d: snapshot.data.documents[idx]);
},
);
}
},
),
StreamBuilder(
stream: Provider.of
.collection("orders")
.where("user", isEqualTo: current.uid)
.where("delivered", isEqualTo: true)
.snapshots(),
builder: (_, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return Center(
child: CircularProgressIndicator(),
);
default:
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (_, idx) {
return OrderItem(
d: snapshot.data.documents[idx]);
},);}},),],),),),),);}}
ПРИЛОЖЕНИЕ Ж
ПРИЛОЖЕНИЕ И
ПРИЛОЖЕНИЕ К
ПРИЛОЖЕНИЕ Л
ПРИЛОЖЕНИЕ М