概述
在flutter开发时,有时候点击某个按钮,只须要刷新指定控件,而不须要将整个页面都刷新.
思路: 在待刷新控件里定义一个点击办法,点击办法里刷新本控件. 点击指定按钮时,去调用此待刷新控件里的点击办法.
流程图
代码
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?...