最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter 如何正確顯示SnackBar

 更新時間:2021年05月14日 10:58:51   作者:島上碼農(nóng)  
Snackbar是Android支持庫中用于顯示簡單消息并且提供和用戶的一個簡單操作的一種彈出式提醒。當使用Snackbar時,提示會出現(xiàn)在消息最底部,通常含有一段信息和一個可點擊的按鈕。本文主要介紹了Flutter 如何正確顯示 SnackBar

簡介

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

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

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

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方法可以調(diào)用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!'),
            ),
          );
        },
      ),
    );
  }
}

錯誤示例

但是若直接在構(gòu)建Scallfold的build方法中調(diào)用會報異常:

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構(gòu)建

這時候要不就是按官方的,將需要顯示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')),
    );
  }
}

Flutter學(xué)習(xí)Github代碼倉庫

https://github.com/AiguangLi/Flutter

以上就是Flutter 如何正確顯示 SnackBar的詳細內(nèi)容,更多關(guān)于Flutter 正確顯示 SnackBar的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • android自定義view實現(xiàn)數(shù)字進度條

    android自定義view實現(xiàn)數(shù)字進度條

    這篇文章主要為大家詳細介紹了android自定義view實現(xiàn)數(shù)字進度條,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android 輕松獲取CPU型號的方法

    Android 輕松獲取CPU型號的方法

    這篇文章主要介紹了在Android設(shè)備上獲取CPU型號是一項常見的任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • flutter監(jiān)聽app進入前后臺狀態(tài)的實現(xiàn)

    flutter監(jiān)聽app進入前后臺狀態(tài)的實現(xiàn)

    在開發(fā)app的過程中,我們經(jīng)常需要知道app處于前后臺的狀態(tài),本文主要介紹了flutter監(jiān)聽app進入前后臺狀態(tài)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Android自制精彩彈幕效果

    Android自制精彩彈幕效果

    這篇文章主要為大家詳細介紹了Android自制精彩彈幕效果,彈幕垂直方向可固定隨機,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解Android中Activity運行時屏幕方向與顯示方式

    詳解Android中Activity運行時屏幕方向與顯示方式

    本文主要對如何控制Android中Activity運行時屏幕方向與顯示方式進行詳細全面的實例講解。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • Android 開發(fā)延時調(diào)用的幾種方法

    Android 開發(fā)延時調(diào)用的幾種方法

    本篇文章主要介紹Android 延遲, 在Android 程序開發(fā)過程中經(jīng)常會遇到程序推遲時間執(zhí)行,這里整理了幾種方法,以便Android 開發(fā)的朋友參考
    2016-07-07
  • Android實現(xiàn)截圖分享qq 微信功能

    Android實現(xiàn)截圖分享qq 微信功能

    在日常生活中,經(jīng)常用到qq,微信截圖分享功能,今天小編通過本文給大家介紹Android實現(xiàn)截圖分享qq 微信功能,具體實現(xiàn)代碼大家參考下本文
    2017-12-12
  • Android定時器和Handler用法實例分析

    Android定時器和Handler用法實例分析

    這篇文章主要介紹了Android定時器和Handler用法,實例分析了Android中的定時器與Handler相關(guān)使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • android實現(xiàn)定時拍照功能

    android實現(xiàn)定時拍照功能

    這篇文章主要為大家詳細介紹了android實現(xiàn)定時拍照功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Kotlin自定義菜單控件

    Kotlin自定義菜單控件

    這篇文章主要為大家詳細介紹了Kotlin自定義菜單控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評論

临西县| 陕西省| 辽源市| 田东县| 静宁县| 蒲江县| 蒙阴县| 阿坝县| 昌乐县| 洛宁县| 平定县| 大余县| 时尚| 绥中县| 襄樊市| 沙雅县| 休宁县| 绵阳市| 秀山| 和林格尔县| 桐庐县| 三门县| 绥阳县| 镶黄旗| 英德市| 嘉鱼县| 大宁县| 延长县| 永嘉县| 屯门区| 郑州市| 专栏| 五寨县| 荥阳市| 康保县| 庆元县| 康定县| 望都县| 深泽县| 突泉县| 定远县|