欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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學習Github代碼倉庫

https://github.com/AiguangLi/Flutter

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

相關(guān)文章

  • Android 推送原理(Android Push Notification)詳解

    Android 推送原理(Android Push Notification)詳解

    這篇文章主要介紹了Android 推送原理(Android Push Notification)詳解的相關(guān)資料,這里對Android 推送的原理做了簡單的介紹,需要的朋友可以參考下
    2016-11-11
  • Android開發(fā)OkHttp執(zhí)行流程源碼分析

    Android開發(fā)OkHttp執(zhí)行流程源碼分析

    這篇文章主要為大家介紹了Android開發(fā)OkHttp執(zhí)行流程源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Android UI開發(fā)中所遇到的各種坑

    Android UI開發(fā)中所遇到的各種坑

    今天小編就為大家分享一篇關(guān)于Android UI開發(fā)中所遇到的各種坑,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Kotlin Job啟動流程源碼層深入分析

    Kotlin Job啟動流程源碼層深入分析

    如果要我拿現(xiàn)實中的一事物與Kotlin協(xié)程中的Job做一個類比,那么我會把Job比作成海洋中的冰山。自由漂浮的冰山約有90%體積沉在海水表面下,因此看著浮在水面上的形狀并猜不出水下的形狀
    2022-11-11
  • Android webview如何加載HTML,CSS等語言的示例

    Android webview如何加載HTML,CSS等語言的示例

    本篇文章主要介紹了Android webview如何加載HTML,CSS等語言的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Android使用EventBus多次接收消息

    Android使用EventBus多次接收消息

    這篇文章主要為大家詳細介紹了Android使用EventBus多次接收消息,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android游戲開發(fā)學習①彈跳小球?qū)崿F(xiàn)方法

    Android游戲開發(fā)學習①彈跳小球?qū)崿F(xiàn)方法

    這篇文章主要介紹了Android游戲開發(fā)學習①彈跳小球?qū)崿F(xiàn)方法,涉及Android通過物理引擎BallThread類模擬小球運動的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android WebView 常見問題及處理方案

    Android WebView 常見問題及處理方案

    這篇文章主要介紹了Android WebView 常見問題及處理方案,需要的朋友可以參考下
    2015-08-08
  • Android橫豎屏幕切換生命周期詳解

    Android橫豎屏幕切換生命周期詳解

    這篇文章主要為大家詳細介紹了Android橫豎屏幕切換生命周期,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 解決video標簽在安卓webview下無法自動播放問題

    解決video標簽在安卓webview下無法自動播放問題

    這篇文章主要介紹了video標簽在安卓webview下無法自動播放問題的解決方法 ,需要的朋友可以參考下
    2014-03-03

最新評論