اذهب إلى المحتوى
  • 0

مشكلة جلب الوقت الفعلي TimeAge

Flutter Dev

السؤال

تحيه طيبه للجميع 

وجدت شرح على الانترنت كيفية جلب الوقت الفعلي الذي تم تخزينه مع البوست في قاعدة البيانات والعمل كان كالتالي:

كود الوقت:



import 'package:intl/intl.dart';

class TimeAgo{

  static String ? timeAgoSincDate(int time)

  {

    DateTime notificationDate =DateTime.fromMillisecondsSinceEpoch(time);
    final date2=DateTime.now();
    final diff =date2.difference(notificationDate);
    if(diff.inDays>8)
      return DateFormat("dd-MM-yyyy HH:mm:ss").format(notificationDate);
    else if ((diff.inDays/7).floor()>=1)
      return 'Last Week';
    else if (diff.inDays>=2)
      return '${diff.inDays}days ago';
    else if (diff.inDays>=1)
      return '1 daya ago';
    else if (diff.inHours>=2)
      return '${diff.inHours} hours ago';

    else if (diff.inHours>=1)
      return '${diff.inHours} 1 hours ago';

    else if (diff.inMinutes>=2)
      return '${diff.inMinutes} Minutes ago';

    else if (diff.inMinutes>=1)
      return '${diff.inMinutes} 1 Minutes ago';
    else if (diff.inSeconds>=3)
      return '${diff.inSeconds} Seconds ago';
else
  return 'Just now';
  }

}

 

صفحة الاستعلام كالتالي:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'date_time_extension.dart';
void main() {
  runApp(TimeAge());
}
class TimeAge extends StatefulWidget {
  const TimeAge({Key? key}) : super(key: key);

  @override
  _TimeAgeState createState() => _TimeAgeState();
}

class _TimeAgeState extends State<TimeAge> {
  @override
  void initState() {
    super.initState();
    GatData();
  }
bool _isLoading =false;
List data =[];
var TimeNowAge;
  Future<String?> GatData() async {
    setState(() {
      _isLoading = true;
    });
    var response = await http.get(
        Uri.parse("**************/*********.php"),
        headers: {"Accept": "application/json"});

    var convertDataToJson = json.decode(response.body);
    data = convertDataToJson['result'];
setState(() {
  TimeNowAge = data[0]['TimeNow'];
  _isLoading=false;
  print(TimeNowAge);
});

  }



  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Scaffold(
      body: Column(children: [

        _isLoading ? CircularProgressIndicator():

Text('${TimeAgo.timeAgoSincDate(TimeNowAge).toString()}')
      ]),
    ),);
  }
}

في الصفحة أعلاه انا أحاول جلب الوقت الذي قمت بتخزينه مسبقا في قاعدة البيانات ثم تحويله من خلال الكود الذي ارفقته في الأعلى

ولكن احصل على الخطاء التالي كل ما حاولت تشغيل الكود:

The following _TypeError was thrown building TimeAge(dirty, state: _TimeAgeState#d2e8c):
type 'String' is not a subtype of type 'int'

هل يوجد خطاء في طريقتي ؟ ما هو العمل الصحيح لتشغيل الكود ؟

صفحة php كالتالي:

<?php
require_once 'cnt.php';



$sql="SELECT * FROM testtable ";

$stmt = $con->prepare($sql); 

$stmt->execute();

$result = $stmt->get_result();




$array = array();

while ($row  = mysqli_fetch_assoc($result))
{
	$array[] = $row;
}


echo ($result) ?
json_encode(array("code" => 1, "result"=>$array)) :
json_encode(array("code" => 0, "message"=>"Data not found !"));


?>

 

 

والجدول في قاعدة البيانات كالتالي:

62d59786f2fa3_Screenshot2022-07-18212504.thumb.png.e57b486f89babdccfa1a61df3715d6a9.png

 

62d597af3347d_Screenshot2022-07-18212554.png.62ef3ca78fd99d0f6a0b3849a482b5ee.png

 

 

 

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

إن الطلبية تعيد الوقت بشكل سلسلة نصية، بتنسيق الوقت كما هو مخزن في قاعدة البيانات لديك.

لذلك على السيرفر أن يحول الوقت من تنسيق التاريخ لرقم عدد صحيح.

  • استخدم الدالة strtotime لتحويل الخانة التي تحمل الوقت لرقم
echo strtotime('2012-03-27 18:47:00'); //--> which results to 1332866820

أعتقد هكذا: ضمن الحلقة

$row['TimeNow'] = strtotime($row['TimeNow']);
$array[] = $row;

ثم في Dart استقبل (الرقم) الذي سيكون على شكل نص (احتمال) وحوله لرقم صحيح

import 'dart:convert';
.
.
.



TimeNowAge = int.parse(data[0]['TimeNow']);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 31 دقائق مضت قال Wael Aljamal:

إن الطلبية تعيد الوقت بشكل سلسلة نصية، بتنسيق الوقت كما هو مخزن في قاعدة البيانات لديك.

لذلك على السيرفر أن يحول الوقت من تنسيق التاريخ لرقم عدد صحيح.

  • استخدم الدالة strtotime لتحويل الخانة التي تحمل الوقت لرقم

echo strtotime('2012-03-27 18:47:00'); //--> which results to 1332866820

أعتقد هكذا: ضمن الحلقة


$row['TimeNow'] = strtotime($row['TimeNow']);
$array[] = $row;

ثم في Dart استقبل (الرقم) الذي سيكون على شكل نص (احتمال) وحوله لرقم صحيح


import 'dart:convert';
.
.
.



TimeNowAge = int.parse(data[0]['TimeNow']);

 

مرحبا اخي الكريم اصبح يعمل الكود بشكل التالي مع وجود مشكله بسيطة لم افهم سببها :

 Future<String?> GatData() async {
    setState(() {
      _isLoading = true;
    });
    var response = await http.get(
        Uri.parse("************.php"),
        headers: {"Accept": "application/json"});

    var convertDataToJson = json.decode(response.body);
    data = convertDataToJson['result'];
setState(() {
  //TimeNowAge = int.parse(data[0]['TimeNow']);
  TimeNowAge = data[0]['TimeNow'];
  _isLoading=false;
  print(TimeNowAge);
});

  }
<?php
require_once 'cnt.php';



$sql="SELECT * FROM testtable ";

$stmt = $con->prepare($sql); 


$stmt->execute();

$result = $stmt->get_result();




$array = array();

while ($row  = mysqli_fetch_assoc($result))
{
    $row['TimeNow'] = strtotime($row['TimeNow']);

	$array[] = $row;
}


echo ($result) ?
json_encode(array("code" => 1, "result"=>$array)) :
json_encode(array("code" => 0, "message"=>"Data not found !"));


?>

 

 

المشكلة كالتالي:

اول نقطة مفترض ان تظهر لي كتابه مع الوقت الذي يظهر حسب كود الوقت الذي فعلته في الأعلى على سبيل المثال 1Minutes ago ولكن الكود لدي لا يظهر أي شيء 

المشكلة الثانية انا قمت بتخزين القيم التأليه في قاعدة البيانات :

62d5a3b32ab56_Screenshot2022-07-18221645.png.7b1c5c7369bd8d20b2123b3264db683c.png

 

ولكن ما يظهر لي مختلف كالتالي:

Screenshot_1658168258.thumb.png.ceb75440ebb155bb23487f43b0a0b3c0.png

 

مع العلم ان وقت المحاكي مضبوط + التاريخ ايضا 

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 ساعة قال مروان مروان3:

اول نقطة مفترض ان تظهر لي كتابه مع الوقت الذي يظهر حسب كود الوقت الذي فعلته في الأعلى على سبيل المثال 1Minutes ago ولكن الكود لدي لا يظهر أي شيء 

 

من فضلك استعمل عبارات الطباعة echo و print لنعرف ما هو الكائن و كيفية تمثيل البيانات ضمنه، لكي نستطيع عمل التحويل بدقة.

نحن في النهاية، نريد تمرير الوقت بقيمة رقمية لتستقبلها الدالة:

  static String ? timeAgoSincDate(int time)

إن لم تنجح عملية التحويل لرقم، استدبل الوسيط بكائن تاريخ و عدل الشيفرة في Dart لتحسب الفرق بين تاريخين الحالي و الممرر للدالة 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...