Hevernooo

myPlants

Nov 20th, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 9.80 KB | None | 0 0
  1. import 'package:cloud_firestore/cloud_firestore.dart';
  2. import 'package:firebase_auth/firebase_auth.dart';
  3. import 'package:firebase_core/firebase_core.dart';
  4. import 'package:flutter/material.dart';
  5. import 'dart:async';
  6. import 'package:plantual_1/utils/utils.dart';
  7.  
  8. import '../notificationsController.dart';
  9.  
  10. class myPlants extends StatefulWidget{
  11.   @override
  12.   State<myPlants> createState() => _myPlantsState();
  13. }
  14.  
  15. void _main()async{
  16.   WidgetsFlutterBinding.ensureInitialized();
  17.   await Firebase.initializeApp();
  18. }
  19.  
  20. class _myPlantsState extends State<myPlants>{
  21.   final auth = FirebaseAuth.instance;
  22.   Timer? countdownTimer;
  23.   Duration myDuration = Duration(days: 3);
  24.  
  25.   @override
  26.   Widget build(BuildContext context) {
  27.     final _auth = auth.currentUser!.uid.toString();
  28.     return Column(
  29.       children: [
  30.         StreamBuilder<QuerySnapshot>(
  31.             stream: FirebaseFirestore.instance.collection(_auth).snapshots(),
  32.             builder: (context, snapshot){
  33.               List<Column> plantWidgets = [];
  34.  
  35.               if(snapshot.hasData){
  36.                 final plants = snapshot.data?.docs.reversed.toList();
  37.                 for(var plant in plants!){
  38.                   final _auth = FirebaseAuth.instance;
  39.                   var date = int.parse(plant['step']!);
  40.                   var dateN = new DateTime.now().add(Duration(days: date)).toString();
  41.                   var dateNext = DateTime.parse(dateN);
  42.                   var asd = DateTime.now().difference(dateNext);
  43.                   DateTime now = DateTime.now();
  44.                   final plantWidget = Column(
  45.                     children: [
  46.                       Container(
  47.                             width: MediaQuery.of(context).size.width * 0.8,
  48.                             height: 1,
  49.                             color: Colors.grey[300]
  50.                         ),
  51.                         Container(
  52.                           color: Colors.white,
  53.                           width: double.infinity,
  54.                           height: MediaQuery.of(context).size.width * 0.29 + 20,
  55.                           child: Row(
  56.                             mainAxisAlignment: MainAxisAlignment.start,
  57.                             children: [
  58.                               const Padding(padding: EdgeInsets.only(left: 10)),
  59.                               Column(
  60.                                 mainAxisAlignment: MainAxisAlignment.center,
  61.                                 crossAxisAlignment: CrossAxisAlignment.center,
  62.                                 children: [
  63.                                   Container(
  64.                                     width: MediaQuery.of(context).size.width * 0.23,
  65.                                     height: MediaQuery.of(context).size.width * 0.23,
  66.                                     child: _kartinka(ElementImage: plant['image']),
  67.                                   )
  68.                                 ],
  69.                               ),
  70.                               const Padding(padding: EdgeInsets.only(left: 10)),
  71.                               Flexible(
  72.                                 child: Container(
  73.                                   width: MediaQuery.of(context).size.width * 0.62,
  74.                                   child: Column(
  75.                                     mainAxisAlignment: MainAxisAlignment.center,
  76.                                     crossAxisAlignment: CrossAxisAlignment.start,
  77.                                     children: [
  78.                                       Text(plant['name'], style: const TextStyle(fontSize: 18)),
  79.                                       Text(dateNext.minute > 9 ? 'Дата следующего полива ${plant['dateDay']}-${plant['dateMonth']}-${plant['dateYear']} в ${plant['dateHour']}:${plant['dateMinute']}' : 'Дата следующего полива ${plant['dateDay']}-${plant['dateMonth']}-${plant['dateYear']} в ${plant['dateHour']}:0${plant['dateMinute']}', style: const TextStyle(color: Colors.grey, fontSize: 16),),
  80.                                       Container(
  81.                                         width: double.infinity,
  82.                                           child: ElevatedButton(
  83.                                               onPressed: (){
  84.                                                 NotificationService().showNotification(
  85.                                                   title: 'samole',
  86.                                                   body: 'dadad'
  87.                                                 );
  88.                                                 DateTime now = DateTime.now();
  89.                                                 var date = int.parse(plant['step']!);
  90.                                                 var dateN = new DateTime.now().add(Duration(days: date)).toString();
  91.                                                 var dateNext = DateTime.parse(dateN);
  92.                                                 var asd = DateTime.now().difference(dateNext);
  93.                                                 assert(date is int);
  94.                                                 String user = _auth.currentUser!.uid.toString();
  95.                                                 CollectionReference collectionReference = FirebaseFirestore.instance.collection(user);
  96.                                                 print(asd.inSeconds);
  97.                                                 if(asd.inSeconds < 0){
  98.                                                   utilsError().toastMessage('Полейте позже');
  99.                                                 }else{
  100.                                                 if((dateNext.hour + 5) > 24){
  101.                                                   collectionReference.doc(plant['name']).set({
  102.                                                     'name': '${plant['name']}',
  103.                                                     'image': '${plant['image']}',
  104.                                                     'dateDay': '${dateNext.day.toString().padLeft(2,'0')}',
  105.                                                     'dateMonth': '${dateNext.month.toString().padLeft(2,'0')}',
  106.                                                     'dateYear': '${dateNext.year}',
  107.                                                     'dateHour': '${(24 - (dateNext.hour + 5)).toString().padLeft(2,'0')}',
  108.                                                     'dateMinute': dateNext.minute > 9 ? '${dateNext.minute.toString().padLeft(2,'0')}' : '0${dateNext.minute.toString().padLeft(2,'0')}',
  109.                                                     'step': '${plant['step']}',
  110.                                                     'page': '${plant['page']}'
  111.                                                   });
  112.                                                 }else{
  113.                                                   collectionReference.doc(plant['name']).set({
  114.                                                     'name': '${plant['name']}',
  115.                                                     'image': '${plant['image']}',
  116.                                                     'dateDay': '${dateNext.day.toString().padLeft(2,'0')}',
  117.                                                     'dateMonth': '${dateNext.month.toString().padLeft(2,'0')}',
  118.                                                     'dateYear': '${dateNext.year}',
  119.                                                     'dateHour': '${(dateNext.hour + 5).toString().padLeft(2,'0')}',
  120.                                                     'dateMinute': dateNext.minute > 9 ? '${dateNext.minute.toString().padLeft(2,'0')}' : '0' + '${dateNext.minute.toString().padLeft(2,'0')}',
  121.                                                     'step': '${plant['step']}',
  122.                                                     'page': '${plant['page']}'
  123.                                                   });
  124.                                                 }}
  125.                                               },
  126.                                               child: Text('Полил'),
  127.                                           )
  128.                                       ),
  129.                                       ///Text(plant['date'], style: const TextStyle(color: Colors.grey, fontSize: 16),)
  130.                                     ],
  131.                                   ),
  132.                                 ),
  133.                               ),
  134.                               Column(
  135.                                 mainAxisAlignment: MainAxisAlignment.start,
  136.                                 children: [
  137.                                   IconButton(onPressed: (){
  138.                                       FirebaseFirestore.instance.collection(
  139.                                           _auth.currentUser!.uid.toString())
  140.                                           .doc(plant['name'])
  141.                                           .delete();
  142.                                     },
  143.                                       icon: Icon(Icons.delete))
  144.                                 ],
  145.                               )
  146.                             ],
  147.                           ),
  148.                         )
  149.                       ],
  150.                     );
  151.                   plantWidgets.add(plantWidget);
  152.                 }
  153.               }
  154.               return Expanded(
  155.                 child: ListView(
  156.                   children: plantWidgets,
  157.                 ),
  158.               );
  159.             }
  160.         ),
  161.       ],
  162.     );
  163.   }
  164. }
  165.  
  166. class _kartinka extends StatelessWidget {
  167.   final String ElementImage;
  168.   const _kartinka({super.key, required this.ElementImage});
  169.  
  170.   @override
  171.   Widget build(BuildContext context) {
  172.     return ClipRRect(
  173.         borderRadius: BorderRadius.circular(16),
  174.         child: SizedBox.fromSize(
  175.             size: const Size.fromRadius(16),
  176.             child: Image.network(ElementImage, fit: BoxFit.fitWidth)
  177.         )
  178.     );
  179.   }
  180. }
Add Comment
Please, Sign In to add comment