ວິທີແກ້ Version Solving Failed ຂອງ Flutter / Dart

Khatthaphone
2 min readMay 22, 2021

--

ສຳລັບຄົນທີ່ຂຽນແອັບຯດ້ວຍ Flutter ແນ່ນອນວ່າຕ້ອງໄດ້ໃຊ້ Package/Library ຈາກ pub.dev ເພື່ອຊ່ວຍວຽກບາງຢ່າງໃຫ້ສະດວກຂຶ້ນ ແລະ ແນ່ນອນເກືອບທຸກຄົນຕ້ອງເຄີຍເຈີບັນຫາເວລາຕິດຕັ້ງ Package ແລ້ວເກີດບັນຫາ Version solving failed ເຊິ່ງບັນຫາເກີດມາຈາກທີ່ໂປຣເຈັກເຮົາເອງ ຫຼື ມີ Package ໃດໜຶ່ງໃນໂປຣເຈກ ໃຊ້ Package ດຽວກັນກັບ Package ທີ່ຈະຕິດຕັ້ງ ແຕ່ເປັນຄົນລະ Version ເຊິ່ງບໍ່ເຂົ້າກັນ ເຮັດໃຫ້ເວລາເຮົາສັ່ງ flutter pub get ຈະເກີດ Error ຂຶ້ນຄ້າຍໆແບບນີ້:

ວິທີເບື້ອງຕົ້ນງ່າຍໆ ຜູ້ອ່ານອາດຈະຕ້ອງໄດ້ໄປໄລ່ເບິ່ງຄືນເວິເຊິນຂອງ Package ຢູ່ pub.dev ແລ້ວລອງປ່ຽນໆເລື້ອຍໆຈົນຈະເຈີເວີເຊິນທີ່ເຂົ້າກັນ ຜູ້ຂຽນມີເຕັກນິກເລັກໆນ້ອຍໆທີ່ຈະຊ່ວຍປະຢັດເວລາໃນການແກ້ໄຂບັນຫາ Package version solving failing ມາຝາກກັນ ມາເບິ່ງນຳກັນ

ຄືທີ່ເຫັນໃນ Error ທາງເທິງ ໃນຕົວຢ່າງນີ້ຜູ້ຂຽນກຳນົດ Package ທີ່ໃຊ້ໃນ pubpsec.yaml ໃຊ້ bloc ເປັນເວີເຊິນ 6.1.3 ແລະ flutter_bloc ເວີເຊິນ 7.0.0 ເຊິ່ງແນ່ນອນເນາະ ເລະເລີຍ ເພາະທັງສອງ Package ເວີຊັນບໍ່ເຂົ້າກັນ

ຂັ້ນຕອນທຳອິດຄືໃຫ້ກຳນົດ version ຂອງ package ທີ່ມັນຫາໃຫ້ເປັນ any (ຫຼື ຈົ່ງວ່າງໄວ້ກໍ່ໄດ້) ກ່ອນ ເຊິ່ງການກຳນົດເປັນ any ແມ່ນການປະໃຫ້ Dart Package Manager (Pub) ຈັດການເລືອກອັດຕະໂນມັດ ເຊິ່ງປົກກະຕິກໍ່ຈະເອົາເປັນເວີເຊິນຫຼ້າສຸດ ຫຼື ເວີເຊິນທີ່ເຂົ້າກັນໄດ້ກັບ Package ອື່ນໆທີ່ຖືກກຳນົດໄວ້

ດັ່ງນັ້ນຂັ້ນຕອນທຳອິດຄືເຮົາຈະປ່ຽນເວີເຊັນຂອງ package ທີ່ມີບັນຫາໃຫ້ເປັນ any ກ່ອນ ໃນນີ້ຜູ້ຂຽນຈະປ່ຽນທັງ 2 ເປັນ any ແຕ່ຜູ້ອ່ານສາມາດກຳນົດໄດ້ເຊັ່ນໃຫ້ຖືເອົາ package ໃດໜຶ່ງເປັນຫຼັກ ຕົວຢ່າງວ່າ bloc ເປັນຫຼັກກ່ອນປະ bloc ເປັນ 6.1.3 ຄືເກົ່າ ແລ້ວປ່ຽນ flutter bloc ເປັນ any, Pub ກໍ່ຈະທຳກັນຕິດຕັ້ງ flutter_bloc ເປັນເວິເຊິນທີ່ເຂົ້າກັບ bloc

ຈາກນັ້ນ ຖ້າເຮົາສັ່ງ flutter pub get ໃໝ່ກໍ່ຈະສາມາດຕິດຕັ້ງ Package ໄດ້ໂດຍທີ່ບໍ່ເກີດບັນຫາ Version solving failed ແລ້ວເນາະ

ແຕ່ວ່າ ແຕ່ວ່າ ແຕ່ວ່າ ເຮົາບໍ່ຄວນຈະປະໃຫ້ pubspec.yaml ກຳນົດ version ແບບ any ເດັດຂາດເພາະເຮົາບໍ່ຮູ້ເລີຍວ່າ Pub ຈະລົງເວີເຊິນໃໝ່ມາໃຫ້ບໍ່ ເວລາໃຊ້ຄຳສັ່ງ flutter pub get ຫຼື ຄົນອື່ນເອົາ source code ເຮົາໄປລົງ ແລະ ຖ້າ Package ນັ້ນໆປ່ຽນຮູບແບບການຂຽນ code ເອີ້ນໃຊ້ງານອາດຈະເຮັດໃຫ້ code ເຮົາໃຊ້ບໍ່ໄດ້ ບາດນັ້ນຊິມາຊອກກັນຕາແຕກອີກ

ເພາະສະນັ້ນທຸກຄັ້ງທີ່ເຮົາທຳການແກ້ໄຂບັນຫາ Version solving failed ດ້ວຍຄ່າ any ແລ້ວຄວນຈະກັບໄປແກ້ໄຂ pubspec.yaml ໃຫ້ເປັນເວີເຊິນທີ່ Pub ດຶງມາໃຫ້ເຮົາ ໂດຍເຂົ້າໄປເບິ່ງທີ່ pubspec.lock

ຈາກນັ້ນກໍ່ກັບມາແກ້ pubspec.yaml ໃຫ້ເວີເຊິນກົງກັບ pubspec.lock

ຖ້າສັ່ງ flutter pub get ໃໝ່ອີກບາດນີ້ກໍ່ຈຳສຳເລັດແລ້ວເນາະ

ວິທີນີ້ໂດຍສ່ວນໃຫຍ່ແລ້ວຈະສາມາດແກ້ໄຂໄດ້ຢາກວ່າທັງໝົດ ແຕ່ກໍ່ມີບາງ Package ທີ່ເຂົ້າກັບໝູ່ບໍ່ໄດ້ອີ່ຫຼີ ເຊັ່ນ ອາດຈະເກົ່າເກີນໄປບໍ່ໄດ້ອັບເດດ ແບບນັ້ນກໍ່ຄົງຈະຕ້ອງໄດ້ຫາວິທີອື່ນແລ້ວເນາະເຊັ່ນການບັງຄັບໄປເລີຍວ່າເຖິງຈະບໍ່ເຂົ້າກັນກໍ່ໃຫ້ໃຊ້ໆໄປໂລດ ເຊິ່ງບໍ່ແນະນຳເພາະອາດຈະເກີດ Error ໄດ້ກໍລະນີ້ມີການເອີ້ນໃຊ້ບາງຢ່າງທີ່ Package ນັ້ນອາດບໍ່ມີແລ້ວ ຫຼື ປ່ຽນວິທີເອີ້ນໃຊ້ ປ່ຽນ Parameter ແລ້ວ ແນະນຳບໍ່ໃຫ້ໃຊ້ Package ນັ້ນດີກວ່າ

ຫວັງວ່າບົດຄວາມສັ້ນໆນີ້ຈະຊ່ວຍໃຫ້ຄົນທີ່ຫຼົງເຂົ້າມາອ່ານໄດ້ປະໂຫຍດນຳບໍ່ຫຼາຍກໍ່ໜ້ອຍເນາະ ຂໍຂອບໃຈທີ່ອ່ານຈົນຈົບ 😁

--

--

No responses yet