主頁 > 區塊鏈 > 產品串列未顯示在此顫動螢屏中

產品串列未顯示在此顫動螢屏中

2022-10-31 20:30:24 區塊鏈

我的產品已添加到 Firebase,但儀表板串列未顯示存在問題。控制臺或螢屏上未顯示任何錯誤。我不確定問題出現在代碼或 firebase 中的什么位置。我基本上是在開發一個電子商務應用程式,用戶應該用它來銷售他們的商品。

class _SellerDashBoardState extends State<SellerDashBoard> {
  MaterialColor active = Colors.red;

  MaterialColor notActive = Colors.grey;

  List<SellerProductItem> products = [
    const SellerProductItem(),
  ];

  @override
  Widget build(BuildContext context) {
    print(parentIdGlobal);
    print(FirebaseAuth.instance.currentUser!.uid);
    return Scaffold(
      resizeToAvoidBottomInset: true,
      appBar: AppBar(
        title: Text(
          'Seller Dashboard',
          style: TextStyle(
              fontSize: ResponsiveWidget.isSmallScreen(context) ? 17.0 : 25.0),
        ),
        actions: [
          IconButton(
            icon: const Icon(Icons.add_circle),
            iconSize: 27.0,
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (BuildContext context) => AddProductForm(),
                ),
              );
            },
          ),
          IconButton(
            icon: WebsafeSvg.asset(
              'assets/images/sold-out.svg',
            ),
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (BuildContext context) => SoldItemScreens(),
                ),
              );
            },
          ),
        ],
      ),
      body: Column(
        children: <Widget>[
          const SizedBox(
            height: 10.0,
          ),
          Container(
              color: const Color(0xffF7F7F7),
              child: StreamBuilder(
                stream: FirebaseFirestore.instance
                    .collection("items")
                    .where('seller', isEqualTo: parentIdGlobal)
                    .where('isSold', isEqualTo: true)
                    .snapshots(),
                builder: (context, AsyncSnapshot snapshot) {
                  if (!snapshot.hasData) {
                    return const Center(child: CircularProgressIndicator());
                  }
                  final List<QueryDocumentSnapshot<Map<String, dynamic>>>
                      docSnapList = snapshot.data?.docs ?? [];

                  if (docSnapList.isEmpty) {
                    return Center(
                      child: Padding(
                        padding: const EdgeInsets.all(10.0),
                        child: WebsafeSvg.asset(
                          'assets/images/empty_dashboard.svg',
                          fit: BoxFit.cover,
                          height: MediaQuery.of(context).size.height / 5,
                        ),
                      ),
                    );
                  }
                  final List<Map<String, dynamic>> docList = docSnapList
                      .map((QueryDocumentSnapshot<Map<String, dynamic>>
                              queryDocumentSnapshot) =>
                          queryDocumentSnapshot.data())
                      .toList();
                  return ListView.builder(
                    scrollDirection: Axis.vertical,
                    shrinkWrap: true,
                    itemCount: docList.length,
                    itemBuilder: (context, index) {
                      bool isSold = docList[index]['isSold'] ?? true;
                      bool isLiked = docList[index]['isLiked'] ?? true;
                      String itemId = docList[index]['itemId'] ?? '';
                      String seller = docList[index]['seller'] ?? '';
                      String sellerName = docList[index]['sellerName'] ?? '';
                      String title = docList[index]['title'] ?? '';
                      String desc = docList[index]['desc'] ?? '';
                      String price = docList[index]['price'] ?? '';
                      String condition = docList[index]['condition'] ?? '';
                      String category = docList[index]['category'] ?? '';
                      String location = docList[index]['location'] ?? '';
                      String itemImage =
                          docList[index]['imageDownloadUrl'] ?? '';

                      return SellerProductItem(
                        itemId: itemId,
                        seller: seller,
                        sellerName: sellerName,
                        title: title,
                        desc: desc,
                        price: price,
                        itemImage: itemImage,
                        isLiked: isLiked,
                        isSold: isSold,
                        category: category,
                        condition: condition,
                        location: location,
                      );
                    },
                  );
                },
     

添加產品螢屏

class _AddProductFormState extends State<AddProductForm> {
  TextEditingController controllerTitle = TextEditingController();
  TextEditingController controllerPrice = TextEditingController();
  TextEditingController controllerDescription = TextEditingController();
  TextEditingController controllerlocation = TextEditingController();

  GlobalKey<FormState> _formKey = GlobalKey();
  String selectedCondition = 'New';
  String selectedCategory = 'Cosmetic Aids';
  bool isReadOnly = true;
  File? pickedImage;
  bool imgStatus = false;

  List<String> conditionList = [
    'New',
    'Like New',
    'Good',
    'Fair',
    'Poor',
  ];

  List<String> categoryList = [
    'Cosmetic Aids',
    'Mobility Products',
    'Bath Safety Products',
    'Others',
  ];

  bool _switchValue = false;

  Future<void> addGroceryItemToToDb() async {
    final itemId = Uuid().v4();
    String? url;

    if (pickedImage != null) {
          print(parentIdGlobal);
    print(FirebaseAuth.instance.currentUser!.uid);

      Reference storage = FirebaseStorage.instance
          .ref()
          .child('users/${FirebaseAuth.instance.currentUser!.uid}/$itemId/item_pic');
      UploadTask uploadTask = storage.putFile(pickedImage!);

      final temp = await (await uploadTask).ref.getDownloadURL();
      url = temp.toString();
    }

    FirebaseFirestore.instance.collection('items').doc(itemId).set(
      {
        'itemId': itemId,
        'timestamp': DateTime.now(),
        'seller': parentIdGlobal,
        'sellerName': userNameGlobal,
        'title': controllerTitle.text,
        'price': controllerPrice.text,
        'desc': controllerDescription.text,
        'condition': selectedCondition,
        'category': selectedCategory,
        'location': controllerlocation.text,
        'isSold': false,
        'imageDownloadUrl': url,
      },
    );
  } // adds grocery item to db

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        elevation: 1.0,
        centerTitle: true,
        title: Text(
          'Add a Product',
        ),
      ),
      body: SingleChildScrollView(
        child: Form(
          key: _formKey,
          child: Column(
            children: <Widget>[
              _selectImageButton(context),
              _writeTitle(),
              _writePrice(),
              _giveitfree(),
              _conditionDropDown(),
              _writeDescription(),
              _categoryDropDown(),
              _writeLocation(),
              Align(
                  alignment: Alignment.bottomCenter,
                  child: _addProductButton(context)),
            ],
          ),
        ),
      ),
    );
  }

  _selectImageButton(BuildContext context) {
    return GestureDetector(
      onTap: () async {
        await Permission.photos.request();
        var status = await Permission.photos.status;
        if (status.isGranted) {
          try {
            XFile? _pickedImage = await ImagePicker().pickImage(
              source: ImageSource.gallery,
              maxWidth: 100,
              maxHeight: 100,
              imageQuality: 100
            ) ;
            if(_pickedImage !=null){
              pickedImage = File(_pickedImage.path);
              setState(() {
              imgStatus = true;
            });
          } }catch (e) {
            print(e.toString());
          }
        } else if (status.isDenied || status.isRestricted) {
          print('Permission Denied');

          showDialog(
              context: context,
              builder: (context) {
                if (Platform.isAndroid)
                  return AlertDialog(
                    title: Text('Permission Not Granted'),
                    content:
                        Text('The permission for photo library is not granted'),
                    actions: [
                      ElevatedButton(
                        onPressed: () => openAppSettings(),
                        child: Text('Ok'),
                      ),
                    ],
                  );
                return CupertinoAlertDialog(
                  title: Text('Permission Not Granted'),
                  content:
                      Text('The permission for photo library is not granted'),
                  actions: [
                    ElevatedButton(
                      onPressed: () => openAppSettings(),
                      child: Text('Ok'),
                    ),
                  ],
                );
              });
        } else if (status.isDenied) {
          print('Permission Undetermined');
        }
      },
      child: Padding(
        padding: EdgeInsets.only(
          top: 10.0,
          bottom: 10.0,
        ),
        child: Container(
          height: 100.0,
          width: 100.0,
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(10.0),
            color: Colors.transparent,
            border: Border.all(
              style: BorderStyle.solid,
              color: Colors.red,
            ),
          ),
          child: pickedImage == null
              ? Icon(
                  Icons.add,
                  color: Colors.red,
                )
              : Image.file(
                  pickedImage!,
                  fit: BoxFit.contain,
                ),
        ),
      ),
    );
  }

  ButtonTheme _addProductButton(BuildContext context) {
    return ButtonTheme(
      minWidth: MediaQuery.of(context).size.width / 1.1,
      child: ElevatedButton(
        onPressed: imgStatus
            ? () async {
                if (_formKey.currentState?.validate() == true) {
                  try {
                    Navigator.pop(context);
                    await addGroceryItemToToDb();
                  } catch (error) {
                    print(error);
                  }
                }
              }
            : null,
        child: Text(
          'Add Product',
          style: TextStyle(
            color: Colors.white,
            fontWeight: FontWeight.bold,
          ),
        ),
      ),
    );
  }

  Padding _writeDescription() {
    return Padding(
      padding: EdgeInsets.symmetric(
        vertical: 8.0,
        horizontal: 10.0,
      ),
      child: TextFormField(
        controller: controllerDescription,
        maxLines: 5,
        inputFormatters: [
          new LengthLimitingTextInputFormatter(
            1450,
          ),
        ],
        maxLength: 1450,
        decoration: InputDecoration(
          alignLabelWithHint: true,
          isDense: true,
          labelText: 'Description',
          helperText: "Describe what you're selling in detail",
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(8.0),
          ),
        ),
      ),
    );
  }

  Padding _conditionDropDown() {
    return Padding(
      padding: EdgeInsets.symmetric(
        vertical: 8.0,
        horizontal: 10.0,
      ),
      child: conditionDropdownbuttonStyle(),
    );
  }

  Widget conditionDropdownbuttonStyle() {
    List<Text> pickerItems = [];
    for (String condition in conditionList) {
      pickerItems.add(Text(condition));
    }
    if (Platform.isIOS) {
      return Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Text(
            'Condition',
            textAlign: TextAlign.left,
            style: TextStyle(
              fontWeight: FontWeight.bold,
            ),
          ),
          SizedBox(
            height: 10,
          ),
          CupertinoPicker(
            backgroundColor: Colors.white70,
            useMagnifier: true,
            itemExtent: 32.0,
            diameterRatio: 2,
            scrollController: FixedExtentScrollController(initialItem: 0),
            magnification: 1.2,
            onSelectedItemChanged: (selectedIndex) {
              print(selectedIndex);
              selectedCondition = conditionList[selectedIndex];
              print(selectedCondition);
            },
            children: pickerItems,
          ),
        ],
      );
    }

    List<DropdownMenuItem<String>> dropDownItem = [];
    for (String condition in conditionList) {
      print(condition);
      var newItem = DropdownMenuItem<String>(
        child: Text(condition),
        value: condition,
      );
      dropDownItem.add(newItem);
    }
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: <Widget>[
        Text(
          'Condition',
          textAlign: TextAlign.left,
          style: TextStyle(
            fontWeight: FontWeight.bold,
          ),
        ),
        SizedBox(
          width: 10.0,
        ),
        Expanded(
          child: DropdownButton<String>(
            items: dropDownItem,
            isExpanded: true,
            value: selectedCondition,
            hint: Text(
              'Condition',
              style: TextStyle(
                fontWeight: FontWeight.bold,
              ),
            ),
            onChanged: (value) {
              setState(() {
                 if (value != null) {
                   selectedCondition = value;
                 }
              });
            },
          ),
        )
      ],
    );
  }

  Padding _categoryDropDown() {
    return Padding(
      padding: EdgeInsets.symmetric(
        vertical: 8.0,
        horizontal: 10.0,
      ),
      child: categoryDropdownbuttonStyle(),
    );
  }

  Widget categoryDropdownbuttonStyle() {
    List<Text> pickerItems1 = [];
    for (String category in categoryList) {
      pickerItems1.add(Text(category));
    }
    if (Platform.isIOS) {
      return Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Text(
            'Category',
            textAlign: TextAlign.left,
            style: TextStyle(
              fontWeight: FontWeight.bold,
            ),
          ),
          SizedBox(
            height: 10,
          ),
          CupertinoPicker(
            backgroundColor: Colors.white70,
            useMagnifier: true,
            itemExtent: 32.0,
            diameterRatio: 2,
            scrollController: FixedExtentScrollController(initialItem: 0),
            magnification: 1,
            onSelectedItemChanged: (selectedIndex) {
              print(selectedIndex);
              selectedCategory = categoryList[selectedIndex];
              print(selectedCategory);
            },
            children: pickerItems1,
          ),
        ],
      );
    }

    List<DropdownMenuItem<String>> dropDownItem = [];
    for (String category in categoryList) {
      print(category);
      var newItem = DropdownMenuItem<String>(
        child: Text(category),
        value: category,
      );
      dropDownItem.add(newItem);
    }
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: <Widget>[
        Text(
          'Category',
          textAlign: TextAlign.left,
          style: TextStyle(
            fontWeight: FontWeight.bold,
          ),
        ),
        SizedBox(
          width: 10.0,
        ),
        Expanded(
          child: DropdownButton<String>(
            items: dropDownItem,
            isExpanded: true,
            value: selectedCategory,
            hint: Text(
              'Category',
              style: TextStyle(
                fontWeight: FontWeight.bold,
              ),
            ),
            onChanged: (value) {
              setState(() {
                  if (value != null) {
                    selectedCategory = value;}
              });
            },
          ),
        )
      ],
    );
  }

  Padding _giveitfree() {
    return Padding(
      padding: EdgeInsets.symmetric(
        vertical: 8.0,
        horizontal: 10.0,
      ),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: <Widget>[
          Text(
            'Give it away for free',
            maxLines: 1,
            style: TextStyle(
              fontWeight: FontWeight.w600,
            ),
          ),
          switchButtonType(),
        ],
      ),
    );
  }

  Widget _writePrice() {
    if (_switchValue) {
      return Container(
        width: 0.0,
        height: 0.0,
      );
    }
    return Padding(
      padding: EdgeInsets.symmetric(
        vertical: 8.0,
        horizontal: 10.0,
      ),
      child: TextFormField(
        controller: controllerPrice,
        maxLines: 1,
        inputFormatters: [
          new LengthLimitingTextInputFormatter(
            5,
          ),
          FilteringTextInputFormatter.digitsOnly,
        ],
        decoration: InputDecoration(
          prefixIcon: Icon(Icons.attach_money),
          isDense: true,
          labelText: 'Price',
          helperText: 'Set your Price',
          hintText: 'Default Price: 0 \u0024',
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(8.0),
          ),
        ),
      ),
    );
  }

  Padding _writeTitle() {
    return Padding(
      padding: EdgeInsets.symmetric(
        vertical: 8.0,
        horizontal: 10.0,
      ),
      child: TextFormField(
        validator: (value) {
          if (value != null) {
            if (value.length < 5) {
            return 'The title should be at least 5 characters';
          }
          return null;
        };
return null;},
        controller: controllerTitle,
        maxLines: 1,
        inputFormatters: [
          new LengthLimitingTextInputFormatter(
            50,
          ),
        ],
        decoration: InputDecoration(
          prefixIcon: Icon(
            Icons.title,
          ),
          isDense: true,
          labelText: 'Title*',
          labelStyle: TextStyle(
            color: Colors.red,
          ),
          helperText: 'Describe your Product in few words',
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(
              8.0,
            ),
          ),
        ),
      ),
    );
  }

  Padding _writeLocation() {
    return Padding(
      padding: EdgeInsets.symmetric(
        vertical: 8.0,
        horizontal: 10.0,
      ),
      child: TextFormField(
        controller: controllerlocation,
        maxLines: 1,
        inputFormatters: [
          new LengthLimitingTextInputFormatter(
            50,
          ),
        ],
        decoration: InputDecoration(
          prefixIcon: Icon(
            Icons.location_on,
          ),
          suffixIcon: IconButton(
            icon: Icon(Icons.near_me),
            onPressed: getLocation,
          ),
          isDense: true,
          labelText: 'Location',
          helperText: 'Eg: Austin,Texas',
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(8.0),
          ),
        ),
      ),
    );
  }

  getLocation() async {
    try {
      await Permission.location.request();
      var status = await Permission.location.status;
      if (status.isGranted) {
        print('Permission Granted');
        Position position = await Geolocator.getCurrentPosition(
            desiredAccuracy: LocationAccuracy.best);
        print(position);
        double latitude = position.latitude;
        double longitude = position.longitude;
        print('latitude: $latitude \n longitude: $longitude');
        List<Placemark> placemark = await placemarkFromCoordinates(
          latitude,
          longitude,
        );
        setState(() {
          print(placemark[0]);
          controllerlocation.text =
              ('${placemark[0].locality},${placemark[0].administrativeArea},${placemark[0].country}')
                  .toString();
        });
      } else if (status.isDenied || status.isRestricted) {
        print('Permission Denied');

       

  Widget switchButtonType() {
    if (Platform.isAndroid) {
      return Switch(
        value: _switchValue,
        onChanged: (value) {
          setState(
            () {
              _switchValue = value;
              isReadOnly = _switchValue;
              controllerPrice.text = '0';
              print(_switchValue);
            },
          );
        },
      );
    }
    return CupertinoSwitch(
      value: _switchValue,
      onChanged: (value) {
        setState(
          () {
            _switchValue = value;
            isReadOnly = _switchValue;
            controllerPrice.text = '0';
            print(_switchValue);
          },
    

uj5u.com熱心網友回復:

您正在過濾已isSold設定為的專案,true但在添加時您正在添加isSold設定為false也許您應該將過濾器更改為.where('isSold', isEqualTo: false)?

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/523338.html

標籤:Google Cloud Collective 扑镖谷歌云火库

上一篇:如何在顫動中添加重疊和水平定位的影像?

下一篇:需要在顫動中列印“it”和“mt”值嗎?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more