주식회사 이웃사촌

FutureBuilder 사용예제 본문

Flutter

FutureBuilder 사용예제

(주)이웃사촌 2021. 8. 9. 13:33

download == true 이면 CircleProgerssIndicator 를 보여주고

false 이면 받은 이미지 화일을 builder 에서 처리해서 future 에서 이미지 위젯을

만들어 화면에 던진다.

 

bodyCenter(

        childdownloading

            ? Container(

                width200,

                height120,

                childCard(

                  colorColors.black,

                  childColumn(

                    mainAxisAlignmentMainAxisAlignment.center,

                    children: [

                      CircularProgressIndicator(),

                      SizedBox(

                        height20,

                      ),

                      Text(

                        'Downloading File : $progressString',

                        styleTextStyle(colorColors.white),

                      )

                    ],

                  ),

                ),

              )

            : FutureBuilder(

                futuredownloadWidget(file), //데이타를 다 받았으면 위젯을 반환한다.

                builder: (contextsnapshot) {

                  //데이타처리

                  print('builder');

                  //Widget 를 반환하는데 상황에 따라서

                  //다른걸 반환하겠다.

                  switch (snapshot.connectionState) {

                    case ConnectionState.none:

                      print('none');

                      return Text('none');

                    case ConnectionState.waiting:

                      print('waiting');

                      return Text('waiting');

                    //return CircularProgressIndicator();

                    case ConnectionState.active:

                      print('active');

                      return Text('active');

                    //return CircularProgressIndicator();

                    case ConnectionState.done:

                      print('done');

 

                      if (snapshot.hasData) {

                        return snapshot.data as Widget;

                      }

                  }

                  print('end process');

                  return Text('no data');

                },

              ),

      ),

 

  Future<Widget> downloadWidget(filePath) async {

    File file = File(filePath);

    print('after exist future');

    bool exist = await file.exists();

    FileImage(file).evict(); //캐시 초기화

 

    if (exist) {

      print('after exist future');

      return Center(

        childColumn(

          children: [Text('$file'), Image.file(file)],

        ),

      );

    } else {

      return Text('no data');

    }

  }

반응형