对话框关闭后刷新Listview内容
你好,伙计们,我是个新手,在问任何问题之前,我都在努力学习, 我有这种情况我有浮动操作按钮,当我选择一些选项并单击保存更改时,它会显示一个对话框。它应该关闭对话框并刷新列表视图取决于我的选择这里是我的代码 一切工作都可以找到它的调用对话框关闭后刷新Listview内容,listview,flutter,future,Listview,Flutter,Future,你好,伙计们,我是个新手,在问任何问题之前,我都在努力学习, 我有这种情况我有浮动操作按钮,当我选择一些选项并单击保存更改时,它会显示一个对话框。它应该关闭对话框并刷新列表视图取决于我的选择这里是我的代码 一切工作都可以找到它的调用getData(),但UI中没有任何更改 import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import '
getData()
,但UI中没有任何更改
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:grouped_buttons/grouped_buttons.dart';
import 'package:test/models/Player.dart';
import 'package:test/partials/PlayerCard.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:connectivity/connectivity.dart';
import 'package:rflutter_alert/rflutter_alert.dart';
import 'package:shared_preferences/shared_preferences.dart';
class MyAppScreen extends StatefulWidget {
@override
_MyAppScreenState createState() => new _MyAppScreenState();
}
class _MyAppScreenState extends State<MyAppScreen> {
List<Player> _players = [];
String _filters ;
String filters ;
String sort ;
String _sort;
int _page = 1;
final String _token = "xxxxxxxxxxxxxxxxxxxxxxxx";
ScrollController _scrollController = new ScrollController();
Future<Null> getData() async {
isConnected().then((intenet) async{
if (intenet != null && intenet) {
var url = 'https://example.com/api';
final responseData = await http.post(
url,
body: {'token':_token,'page': "$_page",'order': filters,'sort': sort},
headers: {
"Accept": "application/json"
});
//print("$url/$filters/$sort");
if(responseData.statusCode == 200){
final data = jsonDecode(responseData.body);
setState(() {
for(Map i in data['data']){
_players.add(Player.fromJson(i));
}
});
}
_page++;
}
// No-Internet Case
});
}
@override
void initState() {
super.initState();
_getDatafromSF();
getData();
_scrollController.addListener(() {
if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent) {
getData();
}
});
}
@override
void dispose() {
super.dispose();
_scrollController.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
extendBody: true,
floatingActionButtonLocation: FloatingActionButtonLocation.endDocked,
floatingActionButton: FloatingActionButton(onPressed: _showFilter,elevation: 8, child: Icon(FontAwesomeIcons.filter),),
bottomNavigationBar: BottomAppBar(
shape: CircularNotchedRectangle(),
child: Container(
height: 20.0,
color: Colors.white,
),
),
body: Container(
child: ListView.builder(
controller: _scrollController,
itemBuilder: (context, i){
if(i == _players.length - 1){
return loadingView();
}
final nDataList = _players[i];
return PlayerCard(nDataList);
if (i < _players.length){
final nDataList = _players[i];
return PlayerCard(nDataList);
}else{
getData();
return loadingView();
}
},
itemCount: _players.length,
),
),
);
}
// method defined to check internet connectivity
Future<bool> isConnected() async {
var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
return true;
} else if (connectivityResult == ConnectivityResult.wifi) {
return true;
}
return false;
}
Future<bool> _showFilter() async{
return Alert(
context: context,
title: "Filter",
content: Column(
children: <Widget>[
Text("Order By",style: TextStyle(color: Colors.black54,fontSize: 16),),
Divider(height: 3.0, color: Colors.black),
RadioButtonGroup(
orientation: GroupedButtonsOrientation.VERTICAL,
activeColor: Colors.blue[800],
onSelected: (String selected) => setState(() {
_filters = selected;
switch(_filters){
case "Platinum": filters = 'platinum';break;
case "Name": filters = 'name';break;
case "Total Trophies": filters = 'total';break;
default: filters = 'platinum';break;
}
print(filters);
}),
labels: <String>[
"Platinum",
"Name",
"Total Trophies",
],
labelStyle: TextStyle(fontSize: 14),
picked: _filters,
),
Divider(height: 5.0, color: Colors.black),
Text("Sort By",style: TextStyle(color: Colors.black54,fontSize: 16),),
new Padding(
padding: new EdgeInsets.all(5.0),
),
RadioButtonGroup(
orientation: GroupedButtonsOrientation.VERTICAL,
activeColor: Colors.blue[800],
onSelected: (String selected) => setState(() {
_sort = selected;
_sort == "Ascending" ? sort = 'asc' : sort = 'desc';
print(sort);
}),
labels: <String>[
"Ascending",
"Descending",
],
labelStyle: TextStyle(fontSize: 14),
picked: _sort,
)
],
),
buttons: [
DialogButton(
onPressed: _savetoSF,
child: Text(
"Save Changes",
style: TextStyle(color: Colors.white, fontSize: 20),
),
)
]).show();
}
_savetoSF() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('order', filters);
prefs.setString('sort', sort);
prefs.setString('orderstring', _filters);
prefs.setString('sortstring', _sort);
Navigator.pop(context);
getData();
}
void _getDatafromSF() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
//Return String
String myorder = prefs.getString('order')?? "platinum";
String mysort = prefs.getString('sort')?? "desc";
String filterString = prefs.getString('orderstring')?? "Platinum";
String sortString = prefs.getString('sortstring')?? "Descending";
filters = myorder;
_filters = filterString;
sort = mysort;
_sort = sortString;
}
}
Widget loadingView() => Center(
child: CircularProgressIndicator(
backgroundColor: Colors.lightBlueAccent,
strokeWidth: 10.0
),
);
导入“包装:颤振/材料.省道”;
导入“package:font_awesome_flatter/font_awesome_flatter.dart”;
导入“package:grouped_buttons/grouped_buttons.dart”;
导入“包:test/models/Player.dart”;
导入“package:test/partials/PlayerCard.dart”;
导入“dart:async”;
将“package:http/http.dart”导入为http;
导入“dart:convert”;
导入“package:connectivity/connectivity.dart”;
导入“package:rflutter_alert/rflutter_alert.dart”;
导入“package:shared_preferences/shared_preferences.dart”;
类MyAppScreen扩展了StatefulWidget{
@凌驾
_MyAppScreenState createState()=>new_MyAppScreenState();
}
类_MyAppScreenState扩展状态{
列出_玩家=[];
字符串过滤器;
字符串过滤器;
字符串排序;
字符串排序;
int_page=1;
最终字符串_token=“xxxxxxxxxxxxxxxxxxxxxxxx”;
ScrollController_ScrollController=新的ScrollController();
Future getData()异步{
isConnected()。然后((intenet)异步{
if(intenet!=null&&intenet){
var url='1〕https://example.com/api';
最终响应数据=等待http.post(
网址,
正文:{'token':_-token,'page':“$_-page”,'order':过滤器,'sort':sort},
标题:{
“接受”:“应用程序/json”
});
//打印(“$url/$filters/$sort”);
如果(responseData.statusCode==200){
最终数据=jsonDecode(responseData.body);
设置状态(){
用于(数据['data']中的地图i){
_players.add(Player.fromJson(i));
}
});
}
_page++;
}
//没有互联网案例
});
}
@凌驾
void initState(){
super.initState();
_getDatafromSF();
getData();
_scrollController.addListener((){
if(_scrollController.position.pixels==_scrollController.position.maxScrollExtent){
getData();
}
});
}
@凌驾
无效处置(){
super.dispose();
_scrollController.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
扩展体:是的,
floatingActionButtonLocation:floatingActionButtonLocation.endDocked,
floatingActionButton:floatingActionButton(按下时:_showFilter,标高:8,子项:图标(FontAwesomeIcons.filter)),
bottomNavigationBar:BottomAppBar(
形状:CircularNotchedRectangle(),
子:容器(
身高:20.0,
颜色:颜色,白色,
),
),
主体:容器(
子项:ListView.builder(
控制器:\ u滚动控制器,
itemBuilder:(上下文,i){
如果(i==\u.length-1){
返回loadingView();
}
最终数据列表=_玩家[i];
返回玩家卡(nDalist);
如果(i<\u玩家长度){
最终数据列表=_玩家[i];
返回玩家卡(nDalist);
}否则{
getData();
返回loadingView();
}
},
itemCount:_players.length,
),
),
);
}
//已定义用于检查internet连接的方法
Future isConnected()异步{
var connectivityResult=await(Connectivity().checkConnectivity());
if(connectivityResult==connectivityResult.mobile){
返回true;
}else if(connectivityResult==connectivityResult.wifi){
返回true;
}
返回false;
}
Future\u showFilter()异步{
返回警报(
上下文:上下文,
标题:“过滤器”,
内容:专栏(
儿童:[
文本(“订购人”,样式:TextStyle(颜色:Colors.black54,字体大小:16),),
分隔器(高度:3.0,颜色:颜色。黑色),
无线电按钮组(
方向:GroupedButtonOrientation.VERTICAL,
activeColor:Colors.blue[800],
onSelected:(选择字符串)=>setState((){
_过滤器=已选择;
开关(_过滤器){
案例“白金”:过滤器=‘白金’;中断;
大小写“Name”:过滤器='Name';中断;
案例“总奖杯”:过滤器=‘总’;中断;
默认值:过滤器='platinum';中断;
}
打印(过滤器);
}),
标签:[
“白金”,
“姓名”,
“总奖杯”,
],
标签样式:文本样式(字体大小:14),
选择:_过滤器,
),
分隔器(高度:5.0,颜色:颜色。黑色),
文本(“排序依据”,样式:TextStyle(颜色:Colors.black54,fontSize:16),),
新填料(
填充:新的边缘设置。全部(5.0),
),
无线电按钮组(
方向:GroupedButtonOrientation.VERTICAL,
activeColor:Colors.blue[800],
onSelected:(选择字符串)=>setState((){
_排序=选中;
_排序==“升序”?排序=“asc”:排序=“desc”;
打印(排序);
}),
标签:[
“上升”,
“下降”,
],
标签样式:文本样式(字体大小:14),
挑选:_排序,
)
],
),
按钮:[
对话框按钮(
按下时:_savetoSF,
子:文本(
“保存更改”,
样式:TextStyle(颜色:Colors.white,字体大小:20),
),
)
]).show();
}
_萨维托斯
return showDialog(
context: context,
builder: (context) {
String contentText = "Content of Dialog";
return StatefulBuilder(
builder: (context, setState) {
return AlertDialog(
title: Text("Filter"),
content: _buildDialogContent,
actions: <Widget>[
FlatButton(
onPressed: () => Navigator.pop(context),
child: Text("Cancel"),
),
DialogButton(
onPressed: _savetoSF,
child: Text(
"Save Changes",
style: TextStyle(color: Colors.white, fontSize: 16),
),
),
],
);
},
);
},
);