もちろんもっとよい方法があるはず
ランダムにページの表示内容を変えたい。ゴールとしては、データベースから一組の検索結果を得て、それをページ内に埋め込んでいく、みたいなことを考えているのだけれど、ちょっと停滞。
でも、クリスマスに向けて、とりあえず「なんとか動く」に持ち込みたい。ということで、データベースも検索もなしに、見た目「似た挙動」にする、というのが、今回のお題だ。ゴミ箱行きになる可能性大なプランBだけれど、セーフティーネットとして。
ランダムな画像を表示する。
一番簡単なのは、「こんなふうにデータを埋め込んだページ」というできあがりを何種類も作って、スクショして、画像として用意する。そしてそれをランダム表示する。codeは同じ女子部メンバーのこちらを拝借。
String _imgURL;
List<String> imgURLs = [
//表示したい画像のURL
];
final ram = Random(DateTime.now().millisecondsSinceEpoch);//乱数の種を時間ごとに変更するためのDataTime
_imgURL = imgURLs[ram.nextInt(imgURLs.length)];
body: Center(
child: Image.asset(_imgURL),
),
よしよし、ちゃんと動く。
でも問題は、まずPageを作って、全体をビルドして、そのPageに到達したところでスクショを取る、それを何回も繰り返して必要なだけ画像を用意するという、超アナログな作業。いくらプランBでも、ちょっと悲しい。
ランダムにページ遷移する。
Pageのフォーマットはできている。引数をデータベースから引っぱってこれればそれでいい。でも、まだ引っぱってこれない。スクショを取るために何度も引数を手入力していて、思った。スクショを取るんじゃなく、作ったページに飛べれば、一手間減るじゃないか。
一番安易な発想は、StringをFunctionに変えてページ遷移をListに並べるという方法だったのだが、これはここに入れられないとか、引数がなんとかかんとかとか、私はに対処できそうにないエラー相手に右往左往。そもそもListの中になにを設定していいのかもよくわかってない初心者の手を出すことじゃないのかもしれない。
そうこうするうちに、エラーメッセージに、widgetという言葉が何度も出ているのに気づいた。もしかして、Listの中にWidget入れるというのはアリなのか。だったらこれでどう?
@override
Widget build(BuildContext context) {
Widget _nextURL;
List<Widget> nextURLs = [
//ここに表示したいPageを指定
Center(child: PageA()),
Center(child: PageB()),
Center(child: PageC()),
];
final ram = Random(DateTime.now().millisecondsSinceEpoch);
_nextURL = nextURLs[ram.nextInt(nextURLs.length)];
return Scaffold(
body: _nextURL,
);
}
できた〜。ListにCenterが並んでるのがもっさりした雰囲気だけど、ともかく望んでいることはできたわ、ほっほっほ。
Listの入れ子ができたら・・・
いっそ、引数一覧というListをListの中に並べられたら、何Pageも用意して遷移するのじゃなく、そのPageの変更一つで済む、というわけだけど、今回はそこまで狙わない。いや、できるかな、やってみようかな・・・どうしよう・・・
いずれにせよ、これはあくまでプランB、ゴミ箱行きになったら、それはそれでよし。
でも、どなたか、関数のListやListの入れ子についてご教示くださったら、泣いて喜びます(゚゚)(。。)ペコッ