ਟਾਲਣ ਯੋਗ ਐਂਟੀ-ਪੈਟਰਨ
ਜ਼ਿਆਦਾਤਰ ਬੱਗ ਉਦੋਂ ਆਉਂਦੇ ਹਨ ਜਦੋਂ imperative ਅਤੇ declarative ਮਾਡਲ ਮਿਲਾ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ। state ਦੀ ਸੀਮਾ ਸਖ਼ਤ ਰੱਖੋ।
ਪੰਨਿਆਂ ਨਾਲ push/pop ਮਿਲਾਉਣਾ
List<PageEntry> ਦੁਆਰਾ ਪਹਿਲਾਂ ਹੀ ਸੰਭਾਲੇ ਜਾ ਰਹੇ stack ਲਈ Navigator.push/pop ਨੂੰ ਨਾ ਕਾਲ ਕਰੋ।
state ਵਿੱਚ Widget
Widget instance ਨੂੰ page metadata ਵਿੱਚ ਨਾ ਪਾਓ। ਸਿਰਫ਼ keyਆਂ ਅਤੇ route-ਜਿਹੇ identifier ਹੀ ਰੱਖੋ।
ਦੁਹਰਾਈਆਂ keyਆਂ
ਇੱਕੋ stack ਵਿੱਚ PageEntry.key ਦੀ ਡੁਪਲੀਕੇਟ value ਮੁੜ ਨਾ ਵਰਤੋ।
ਮਾਈਗ੍ਰੇਸ਼ਨ ਚੈਕਲਿਸਟ
ਆਰਕੀਟੈਕਚਰ ਨੂੰ ਇਕਸਾਰ ਰੱਖਣ ਲਈ ਰੀਫੈਕਟਰ ਸਮੀਖਿਆਵਾਂ ਦੌਰਾਨ ਇਹ ਚੈਕਲਿਸਟ ਵਰਤੋ।
ਚੈਕਲਿਸਟ
ਚੰਗਾ ਵਿਰੁੱਧ ਮਾੜਾ
// ਮਾੜਾ: ਇੱਕੋ stack ਲਈ imperative ਅਤੇ declarative ਨੂੰ ਮਿਲਾਉਣਾ
Navigator.of(context).push(...);
_pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];
// ਚੰਗਾ: ਸਿਰਫ਼ declarative state ਨੂੰ ਅਪਡੇਟ ਕਰੋ
setState(() {
_pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];
});
ਸਮੀਖਿਆ ਸੁਝਾਅ
ਕੋਡ ਸਮੀਖਿਆ ਦੌਰਾਨ ਇਹ ਦੇਖੋ ਕਿ ਕੌਣ stack ਤਬਦੀਲੀਆਂ ਦਾ ਮਾਲਕ ਹੈ ਅਤੇ ਉਹ ਤਬਦੀਲੀਆਂ ਰੱਦ ਕਰੋ ਜੋ ਇੱਕੋ stack ਨੂੰ ਕਈ APIs ਰਾਹੀਂ ਬਦਲਦੀਆਂ ਹਨ।