iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
Mobile Development

在 Flutter 開發旅程的手札系列 第 13

Flutter Widget - 不使用StatefulWidget改用ValueListenableBuilder更新畫面

  • 分享至 

  • xImage
  •  

今天要實作一個透過ValueListenableBuilder,建立一個按鈕計數的小功能

首先先建立一個StatelessWidget的檔案value_notifier_demo_screen.dart

  1. 宣告counterNotifier來存放ValueNotifier
  2. 將要監聽的counterNotifier放在ValueListenableBuilder裡面,當counterNotifier.value的值變化時,畫面就會被刷新
import 'package:flutter/material.dart';

class ValueNotifierDemoScreen extends StatelessWidget {
  ValueNotifierDemoScreen({Key? key}) : super(key: key);
  final ValueNotifier counterNotifier = ValueNotifier<int>(0); //Set<int>()初始值
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: IconButton(
          icon: const Icon(
            Icons.arrow_back_ios,
          ),
          onPressed: () {
            Navigator.of(context).pop();
          },
        ),
        title: const Text(
          "ValueListenableBuilder",
        ),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              'You have pushed the button this many times:',
            ),
            const SizedBox(
              height: 50,
            ),
            ValueListenableBuilder(
              valueListenable: counterNotifier,
              builder: (context, counter, child) {
                return Text("$counter");
              },
            ),
            const SizedBox(
              height: 50,
            ),
            ElevatedButton(
              onPressed: () {
                counterNotifier.value = counterNotifier.value + 1;
              },
              child: const Text("Button"),
            )
          ],
        ),
      ),
    );
  }
}

Demo ValueListenableBuilder


上一篇
Flutter Package - 把API資料存到手機的Local Storage
下一篇
Flutter - 拖曳改變列表的順序
系列文
在 Flutter 開發旅程的手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言