亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Flutter 如何正確顯示SnackBar

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

簡(jiǎn)介

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

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

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

Scallfold.of(context).showSnackBar(SnackBar(contenxt: Text('這是一個(gè)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!'),
            ),
          );
        },
      ),
    );
  }
}

錯(cuò)誤示例

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

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

錯(cuò)誤代碼如下所示:

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方法里使用會(huì)拋異常
            Scaffold.of(context).showSnackBar(
              SnackBar(
                content: Text('Have a snack!'),
              ),
            );
          },
        ),
      ),
      appBar: AppBar(title: Text('Scaffold.of Example')),
    );
  }
}

解決方法一:Scaffold的子組件通過(guò)Builder構(gòu)建

這時(shí)候要不就是按官方的,將需要顯示SnackBar的代碼另外抽離一個(gè)自定義子組件,在子組件的build方法再顯示SnackBar,要不就是在Scaffold的build方法體對(duì)該子組件再包一層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存儲(chǔ)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代碼倉(cāng)庫(kù)

https://github.com/AiguangLi/Flutter

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

相關(guān)文章

最新評(píng)論