2017-09-08 68 views
0

ページが表示されている間だけSnackBarを1回表示します。 しかし、我々はビルド方法にshowSnackBarを呼び出すことはできません。ページ遷移後にSnackBarを表示する方法

ビルド後に呼び出されるハンドラはありますか?

答えて

2

StateinitStateにはStatefulWidgetを、showSnackBarに電話することができます。あなたはshowSnackBarをトリガする前に短い遅延を追加する必要があります。ここにコードサンプルがあります。

import 'dart:async'; 
import 'package:flutter/material.dart'; 

void main() { 
    runApp(new MyApp()); 
} 

class MyApp extends StatelessWidget { 
    @override 
    Widget build(BuildContext context) { 
    return new MaterialApp(
     home: new HomePage(), 
    ); 
    } 
} 

class HomePage extends StatelessWidget { 
    @override 
    Widget build(BuildContext context) { 
    return new Scaffold(
     floatingActionButton: new FloatingActionButton(
     child: new Icon(Icons.developer_board), 
     onPressed:() { 
      Navigator.of(context).push(
      new MaterialPageRoute(builder: (_) => new MySecondPage()), 
     ); 
     }, 
    ), 
    ); 
    } 
} 

class MySecondPage extends StatelessWidget { 
    @override 
    Widget build(BuildContext context) { 
    return new Scaffold(
     appBar: new AppBar(
     title: new Text('Developer Mode'), 
    ), 
     body: new MySecondPageBody(), 
    ); 
    } 
} 

class MySecondPageBody extends StatefulWidget { 
    @override 
    State createState() => new MySecondPageBodyState(); 
} 

class MySecondPageBodyState extends State<MySecondPageBody> { 
    @override 
    void initState() { 
    new Future<Null>.delayed(Duration.ZERO,() { 
     Scaffold.of(context).showSnackBar(
     new SnackBar(content: new Text("You made it! Congrats.")), 
    ); 
    }); 
    super.initState(); 
    } 

    @override 
    Widget build(BuildContext context) { 
    return new Center(
     child: new Text('You are now a developer.'), 
    ); 
    } 
} 
+0

私の認識では、 'initState'は' build'の前に呼び出されます。 「足場」はまだ作られていない? – najeira

+0

サンプルコードを提供するために私の答えを更新しました。 –

関連する問題