91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Android中的Flutter要如何正確顯示SnackBar

發布時間:2022-02-25 14:39:05 來源:億速云 閱讀:150 作者:小新 欄目:開發技術

小編給大家分享一下在Android中的Flutter要如何正確顯示SnackBar,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

簡介

官方API文檔Scaffold的of方法說明有說明調用Scaffold.of方法是在Scallfold的子組件的Build方法中,也就是不能直接在構建Scaffold的build方法里調用,否則會拋異常。

Typical usage of the Scaffold.of function is to call it from within the build method of a child of a Scaffold.

通常為顯示一個SnackBar需要構建一個Builder,通過Builder的context調用(原因是)

Scallfold.of(context).showSnackBar(SnackBar(contenxt: Text('這是一個SnackBar'));

官方示例

顯示SnackBar,官方典型示例代碼如下所示:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Code Sample for Scaffold.of.',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: MyScaffoldBody(),
        appBar: AppBar(title: Text('Scaffold.of Example')),
      ),
      color: Colors.white,
    );
  }
}

// 在Scaffold子組件里的build方法可以調用Scaffold.of方法
class MyScaffoldBody extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: RaisedButton(
        child: Text('SHOW A SNACKBAR'),
        onPressed: () {
          Scaffold.of(context).showSnackBar(
            SnackBar(
              content: Text('Have a snack!'),
            ),
          );
        },
      ),
    );
  }
}

錯誤示例

但是若直接在構建Scallfold的build方法中調用會報異常:

Scaffold.of() called with a context that does not contain a Scaffold.

錯誤代碼如下所示:

import 'package:flutter/material.dart';

class ScaffoldSnackBarDemo extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RaisedButton(
          child: Text('SHOW A SNACKBAR'),
          onPressed: () {
            ///直接在Scallfold的build方法里使用會拋異常
            Scaffold.of(context).showSnackBar(
              SnackBar(
                content: Text('Have a snack!'),
              ),
            );
          },
        ),
      ),
      appBar: AppBar(title: Text('Scaffold.of Example')),
    );
  }
}

解決方法一:Scaffold的子組件通過Builder構建

這時候要不就是按官方的,將需要顯示SnackBar的代碼另外抽離一個自定義子組件,在子組件的build方法再顯示SnackBar,要不就是在Scaffold的build方法體對該子組件再包一層Builder,如下所示。

import 'package:flutter/material.dart';

class ScaffoldSnackBarDemo extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return Scaffold(
       ///在子組件外再包一層builder,讓context不共用
      body: Builder(builder: (context) {
        return Center(
          child: RaisedButton(
            child: Text('SHOW A SNACKBAR'),
            onPressed: () {
              Scaffold.of(context).showSnackBar(
                SnackBar(
                  content: Text('Have a snack!'),
                ),
              );
            },
          ),
        );
      }),
      appBar: AppBar(title: Text('Scaffold.of Example')),
    );
  }
}

解決方法二:使用GlobalKey存儲ScaffoldState

import 'package:flutter/material.dart';

class ScaffoldSnackBarDemo extends StatelessWidget {
  final _scallfoldKey = GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      ///使用GlobalKey解決
      key: _scallfoldKey,
      body: Center(
        child: RaisedButton(
          child: Text('SHOW A SNACKBAR'),
          onPressed: () {
            _scallfoldKey.currentState.showSnackBar(SnackBar(
              content: Text('Have a snack!'),
            ));
          },
        ),
      ),
      appBar: AppBar(title: Text('Scaffold.of Example')),
    );
  }
}

看完了這篇文章,相信你對“在Android中的Flutter要如何正確顯示SnackBar”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿坝县| 东城区| 永清县| 华宁县| 视频| 伊金霍洛旗| 邯郸县| 奉化市| 北票市| 手游| 屯昌县| 西乡县| 新昌县| 德州市| 高平市| 司法| 云龙县| 玉山县| 安西县| 安泽县| 辉县市| 瑞丽市| 西乌| 江都市| 分宜县| 祁连县| 潼关县| 大同县| 大城县| 芷江| 耿马| 商洛市| 沙田区| 白银市| 瑞丽市| 水城县| 桑植县| 永康市| 海兴县| 巴塘县| 无棣县|