Файл: Руководство пользователя для разработанной системы. Пятый раздел приводит данные по информационной безопасности приложения.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.11.2023

Просмотров: 174

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


drawer: SideDrawer(),

appBar: AppBar(),

body: current == null

? Center(

child: CircularProgressIndicator(),

)

: Container(

padding: EdgeInsets.all(16),

child: StreamBuilder(

stream: Provider.of(context)

.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(context)

.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(ctx, listen: false)

.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(context)

.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(context)

.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]);

},);}},),],),),),),);}}

ПРИЛОЖЕНИЕ Ж

ПРИЛОЖЕНИЕ И

ПРИЛОЖЕНИЕ К

ПРИЛОЖЕНИЕ Л

ПРИЛОЖЕНИЕ М