Faits: A. A._ a été arrêté le 20 septembre 2011 dans le cadre d'une instruction pénale conduite par le Ministère public du canton du Valais (ci-après: le Ministère public) et portant sur un trafic de stupéfiants. Par ordonnance du 22 septembre 2011, le Tribunal des mesures de contrainte du canton du Valais (ci-après: le Tmc) a ordonné la détention provisoire du prénommé, en raison d'un risque de collusion. Statuant sur recours de A._, la Cour de céans a confirmé une décision du Tmc prolongeant la détention provisoire jusqu'au 23 mars 2012, en relevant que les charges étaient suffisantes et que le maintien en détention provisoire était justifié par un risque de collusion (arrêt 1B_65/2012 du 15 février 2012). Par ordonnance du 22 mars 2012, le Tmc a prolongé la détention provisoire de A._ jusqu'au 22 juin 2012. L'intéressé a recouru contre cette décision auprès de la Chambre des recours pénale du Tribunal cantonal du canton du Valais (ci-après: le Tribunal cantonal), qui a rejeté ce recours par ordonnance du 4 avril 2012. Constatant que la situation n'avait pas évolué depuis les précédentes décisions mentionnées ci-dessus, cette autorité a considéré que les charges étaient suffisantes et que le maintien en détention provisoire était justifié par un risque de collusion et conforme au principe de la proportionnalité. B. A._ recourt contre cette ordonnance auprès du Tribunal fédéral, en concluant à l'annulation de la décision attaquée, au renvoi du dossier à l'instance précédente pour nouvelle décision et à sa mise en liberté immédiate. Il invoque implicitement une violation des dispositions du code de procédure pénale suisse (CPP; RS 312.0) relatives à la détention avant jugement. Il requiert en outre l'octroi de l'assistance judiciaire. Le Ministère public du canton du Valais conclut à la confirmation de la détention du recourant. Le Tribunal cantonal a renoncé à se déterminer. Le recourant a présenté des observations complémentaires. 