美文网首页
Flutter之刷新局部控件

Flutter之刷新局部控件

作者: yytester | 来源:发表于2020-12-22 12:00 被阅读0次

概述

在flutter开发时,有时候点击某个按钮,只需要刷新指定控件,而不需要将整个页面都刷新.

思路: 在待刷新控件里定义一个点击方法,点击方法里刷新本控件. 点击指定按钮时,去调用此待刷新控件里的点击方法.

流程图

file

代码

main.dart

import 'package:flutter/material.dart';
import 'new_text.dart';
import 'new_button.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
       
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {



  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  GlobalKey<TextWidgetState> textKey = GlobalKey();  //设置key,绑定待刷新控件.
  
  var _count = 1;


  @override
  Widget build(BuildContext context) {
  
    return Scaffold(
      appBar: AppBar(
     
        title: Text(widget.title),
      ),
      body: Center(
    
        child: Column(
         
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[

            TextWidget(textKey), //传入key给待刷新控件

              //自定义的ButtonWidget控件,会传入一个onPressed参数.这个参数是名为OnPressed的方法,方法无参数.
              //该方法最终是传递给了new_button.dart的RaisedButton控件调用.
             ButtonWidget(
              onPressed: () {
              _count++;
              textKey.currentState.onPressed(  _count); ///点击button,调用TextWidget的onPressed方法
            },
          ),

            
          ],
        ),
      ),
    );
  }
}

new_text.dart

import 'package:flutter/material.dart';

class TextWidget extends StatefulWidget {

   //! 接收传过来的key
  TextWidget(Key key) : super(key: key);

  @override
  State<StatefulWidget> createState() {
    return TextWidgetState();
  }
}

class TextWidgetState extends State<TextWidget> {

  String _text="0";

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(_text,style: TextStyle(fontSize: 20,color:Colors.green), ),
    );
  }

  //在TextWidget的onPressed中单独调用TextWidget的setState,刷新本控件.
  void onPressed(int count) {
    setState(() {
      _text = count.toString();
    });
  }

  
}

new_button.dart

import 'new_text.dart';
import 'package:flutter/material.dart';

typedef onPressed_changestate();

class ButtonWidget extends StatefulWidget {

  //类变量,作为调用类时的参数
  onPressed_changestate onPressed;

  ButtonWidget({this.onPressed});

  @override
  State<StatefulWidget> createState() {
    return _ButtonWidgetState(onPressed);
  }
}

class _ButtonWidgetState extends State<ButtonWidget> {
  onPressed_changestate new_onPressed;

  _ButtonWidgetState(this.new_onPressed);

  @override
  Widget build(BuildContext context) {
    return Center(
      child: RaisedButton(
        child: Text('count++',style: TextStyle(fontSize: 20),),
        onPressed: new_onPressed, 
        //new_onPressed是main.dart调用该控件时传递过来的方法
        //也就是 onPressed: () {
            //   _count++;
            //   textKey.currentState.onPressed(  _count);
            // },
      ),
    );
  }
}

Flutter 写的app, 需要源码可以私信~~


最好的笔记软件

https://www.wolai.com/signup?invitation=6Z8Z3BP

相关文章

  • Flutter之刷新局部控件

    概述 在flutter开发时,有时候点击某个按钮,只需要刷新指定控件,而不需要将整个页面都刷新. 思路: 在待刷新...

  • Flutter之局部刷新(2021)

    Flutter 框架内部提供了一个非常小巧精致的组件,专门用于局部组件的刷新,它就是 ValueListenabl...

  • Flutter局部刷新

    setState会刷新整个页面,在只需要刷新部分组件的时候可以用StatefulBuilder 先给需要局部刷新的...

  • flutter局部刷新

    一、为什么要使用局部刷新 Flutter中有两个常用的状态Widget分为StatefulWidget和State...

  • Flutter 进度控件 & 使用 RefreshInd

    今天要聊的内容是 Flutter 进度控件: ProgressIndicator 和 刷新控件 RefreshIn...

  • Flutter性能优化之局部刷新

    Flutter中Widget分为StatefulWidget和StatelessWidget,分别为动态视图和静态...

  • Flutter局部刷新组件

    当界面复杂,嵌套多个子widget时,经常有刷新单个或者局部widget的需求,每次写业务时创建GlobalKey...

  • Flutter局部刷新技巧

    1、为什么需要局部刷新 如下图场景:在一个Navigator的某Router上有个Scffold页面,页面上并列三...

  • Flutter局部刷新原理

    概述在Flutter中,我们知道,刷新界面要调用setState方法,在一个界面中,通常只需要刷新某个组件或者某一...

  • flutter_ListView模拟实战中的用法

    参考:flutter控件之---------listView

网友评论

      本文标题:Flutter之刷新局部控件

      本文链接:https://www.haomeiwen.com/subject/gffsnktx.html