Flutter開(kāi)發(fā)實(shí)現(xiàn)底部留言板
本文實(shí)例為大家分享了Flutter實(shí)現(xiàn)底部留言板的具體代碼,供大家參考,具體內(nèi)容如下
前言
現(xiàn)在大家基本上都會(huì)去接觸抖音那款app,其中抖音中的留言區(qū)域的效果也是要前幾天工作的需求,看了網(wǎng)上對(duì)這塊并沒(méi)有什么博客介紹。只能自己封裝編寫了。
主要技術(shù)
其實(shí)這個(gè)技術(shù)就是運(yùn)用了動(dòng)畫這個(gè)功能封裝實(shí)現(xiàn)的
實(shí)例代碼分析
初始化封裝
?/*初始化狀態(tài)*/
? initState() {
? ? super.initState();
? ? /*創(chuàng)建動(dòng)畫控制類對(duì)象*/
? ? controller = new AnimationController(
? ? ? ? duration: const Duration(milliseconds: 1000),
? ? ? ? vsync: this);
? ? /*創(chuàng)建補(bǔ)間對(duì)象*/
? ? tween = new Tween(begin: 0.0, end: 1.0)
? ? ? ? .animate(controller) ? ?//返回Animation對(duì)象
? ? ? ..addListener(() { ? ? ? ?//添加監(jiān)聽(tīng)
? ? ? ? setState(() {
? ? ? ? ? Provide.value<IndexProvide>(context).changHeight(tween.value);
? ? ? ? ?// print(tween.value); ? //打印補(bǔ)間插值
? ? ? ? });
? ? ? });
? ? // controller.forward(); ? ? ? //執(zhí)行動(dòng)畫
? }全部代碼
import 'package:flutter/material.dart';
void main(){
? runApp(
? ? MaterialApp(
? ? ? debugShowCheckedModeBanner: false,
? ? ? home: cityContent(),
? ? )
? );
}
class cityContent extends StatefulWidget {
? cityContent({Key key}) : super(key: key);
? _cityContentState createState() => _cityContentState();
}
class _cityContentState extends State<cityContent> with SingleTickerProviderStateMixin{
? Animation<double> tween;
? AnimationController controller;
? /*初始化狀態(tài)*/
? initState() {
? ? super.initState();
? ? /*創(chuàng)建動(dòng)畫控制類對(duì)象*/
? ? controller = new AnimationController(
? ? ? ? duration: const Duration(milliseconds: 1000),
? ? ? ? vsync: this);
? ? /*創(chuàng)建補(bǔ)間對(duì)象*/
? ? tween = new Tween(begin: 0.0, end: 1.0)
? ? ? ? .animate(controller) ? ?//返回Animation對(duì)象
? ? ? ..addListener(() { ? ? ? ?//添加監(jiān)聽(tīng)
? ? ? ? setState(() {
? ? ? ? ? Provide.value<IndexProvide>(context).changHeight(tween.value);
? ? ? ? ?// print(tween.value); ? //打印補(bǔ)間插值
? ? ? ? });
? ? ? });
? ? // controller.forward(); ? ? ? //執(zhí)行動(dòng)畫
? }
? @override
? Widget build(BuildContext context) {
? ? return Scaffold(
? ? ? ? body: Stack(
? ? ? ? children: <Widget>[
? ? ? ? ? InkWell(
? ? ? ? ? ? ? onTap: (){
? ? ? ? ? ? ? ? // 動(dòng)作反方向執(zhí)行,即關(guān)閉留言板
? ? ? ? ? ? ? ? controller.reverse();
? ? ? ? ? ? ? },
? ? ? ? ? ? child: ?ListView(
? ? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? ? Center(
? ? ? ? ? ? ? ? child: InkWell(
? ? ? ? ? ? ? ? ? onTap: (){
? ? ? ? ? ? ? ? ? ? controller.forward(); ? ? ? //執(zhí)行動(dòng)畫,即打開(kāi)留言板
? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? child: Text(
? ? ? ? ? ? ? ? ? ? '打開(kāi)底部抽屜'
? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? ),
? ? ? ? ? Positioned(
? ? ? ? ? ? bottom: 0,
? ? ? ? ? ? child: Container(
? ? ? ? ? ? ? margin: EdgeInsets.fromLTRB(20, 0, 20, 0),
? ? ? ? ? ? ? height: 400*controller.value,
? ? ? ? ? ? ? width: 300,
? ? ? ? ? ? ? color: Colors.grey.shade300,
? ? ? ? ? ? ? child: ListView(
? ? ? ? ? ? ? // physics: NeverScrollableScrollPhysics(),
? ? ? ? ? ? ? children: <Widget>[
? ? ? ? ? ? ? ? Container(
? ? ? ? ? ? ? ? ? margin: EdgeInsets.only(left: 240),
? ? ? ? ? ? ? ? ? child: InkWell(
? ? ? ? ? ? ? ? ? ? onTap: (){
? ? ? ? ? ? ? ? ? ? ? // 動(dòng)作反方向執(zhí)行,即關(guān)閉留言板
? ? ? ? ? ? ? ? ? ? ? controller.reverse();
? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? child: Icon(Icons.clear),
? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? Center(
? ? ? ? ? ? ? ? ? child: Text('留言列表'),
? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? )
? ? ? ? ),
? ? ? ? ],
? ? ? )
? ? );
? }
}現(xiàn)在這個(gè)大部分的功能是現(xiàn)在的,不過(guò)還是差一個(gè)手勢(shì)的問(wèn)題。我有一個(gè)初步的想法是結(jié)合狀態(tài)管理可以做的,不過(guò)有一個(gè)bug,就是用手勢(shì)來(lái)改變留言板的高度的時(shí)候,動(dòng)畫狀態(tài)沒(méi)有初始化。希望知道的小伙伴跟我探討探討。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺析Flutter AbsorbPointer 與 IgnorePointer的區(qū)別
Flutter是Google一個(gè)新的用于構(gòu)建跨平臺(tái)的手機(jī)App的SDK。這篇文章主要介紹了Flutter AbsorbPointer 與 IgnorePointer的區(qū)別,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Android使用Profiler查看應(yīng)用內(nèi)存分析的操作步驟
內(nèi)存分析是Profiler中的一個(gè)組件,可以幫助我們識(shí)別可能會(huì)導(dǎo)致應(yīng)用卡頓、凍結(jié)甚至崩潰的內(nèi)存泄露和內(nèi)存抖動(dòng),本文小編將給大家介紹一下Android使用Profiler查看應(yīng)用內(nèi)存分析的操作步驟,需要的朋友可以參考下2023-10-10
Android 消息分發(fā)使用EventBus的實(shí)例詳解
這篇文章主要介紹了Android 消息分發(fā)使用EventBus的實(shí)例詳解的相關(guān)資料,在項(xiàng)目中用了許多Handler和broadcast導(dǎo)致代碼冗余,顯得雜亂無(wú)章,這里使用EventBus來(lái)實(shí)現(xiàn)相同的功能,需要的朋友可以參考下2017-07-07
AndroidManifest.xml中含蓋的安全問(wèn)題詳解
這篇文章主要介紹了AndroidManifest.xml中含蓋的安全問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Android Studio導(dǎo)入項(xiàng)目不支持的兩種解決方式
這篇文章主要介紹了Android Studio導(dǎo)入項(xiàng)目不支持的兩種解決方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Android開(kāi)發(fā)之permission動(dòng)態(tài)權(quán)限獲取詳解
這篇文章主要為大家詳細(xì)介紹了Android開(kāi)發(fā)之permission動(dòng)態(tài)權(quán)限獲取,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
在Android中動(dòng)態(tài)添加Panel框架的實(shí)現(xiàn)代碼
項(xiàng)目經(jīng)常會(huì)有這種需求,就是想動(dòng)態(tài)的在某個(gè)界面上添加一個(gè)Panel。比如,有一個(gè)按鈕,點(diǎn)擊后會(huì)顯示下拉菜單式的界面。這種需求,就屬于動(dòng)態(tài)添加一個(gè)Panel。需求多了,就要研究是否可以抽象出通用的框架代碼,以方便開(kāi)發(fā),所以就有了以下內(nèi)容2013-05-05
Android懸浮窗按鈕實(shí)現(xiàn)點(diǎn)擊并顯示/隱藏多功能列表
這篇文章主要為大家詳細(xì)介紹了Android懸浮窗按鈕實(shí)現(xiàn)點(diǎn)擊并顯示/隱藏多功能列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Android跨進(jìn)程拋異常的原理的實(shí)現(xiàn)
這篇文章主要介紹了Android跨進(jìn)程拋異常的原理的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11

