Я новичок во Флаттере. Я использую RouterGenerator следующим образом.
import 'package:flutter/material.dart';
import '../AdmobPage.dart';
import '../BonusPage.dart';
import '../HomePage.dart';
class RouteGenerator {
static Route<dynamic> generateRoute(RouteSettings settings) {
// Getting arguments passed in while calling Navigator.pushNamed
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (_) => MyHomePage());
case '/login':
return MaterialPageRoute(builder: (_) => LoginPage());
case '/admob':
return MaterialPageRoute(builder: (_) => AdmobPage());
default:
// If there is no such named route in the switch statement, e.g. /third
return _errorRoute();
}
}
static Route<dynamic> _errorRoute() {
return MaterialPageRoute(builder: (_) {
return Scaffold(
appBar: AppBar(
title: Text('Error'),
),
body: Center(
child: Text('ERROR'),
),
);
});
}
}
Когда я открываю свое приложение, домашняя страница открывается без каких-либо проблем. У меня есть некоторые службы http на других страницах, например на AdmobPage. Когда я go на этой странице, мои http-сервисы работают нормально.
Но моя проблема здесь начинается. Когда я нажимаю HomePage в меню, все мои сервисы на AdmobPage снова работают. Я не мог найти в чем проблема. Мой пример AdmobPage такой:
import 'dart:convert';
import 'package:doordie/utils/Functions.dart';
import 'package:doordie/utils/UIData.dart';
import 'package:doordie/widgets/CommonScaffold.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:getflutter/getflutter.dart';
import 'package:http/http.dart' as http;
import 'LoginPage.dart';
class AdmobPage extends StatefulWidget {
@override
_AdmobPageState createState() => _AdmobPageState();
}
class Prizes {
final int id;
final String name;
final String subtitle;
final String photo;
final String url;
final int coin;
final String status;
Prizes(
{this.id,
this.name,
this.subtitle,
this.photo,
this.url,
this.coin,
this.status});
factory Prizes.fromJson(Map<String, dynamic> json) {
return Prizes(
id: json['id'],
name: json['name'],
subtitle: json['subtitle'],
photo: json['photo'],
url: json['url'],
coin: json['coin'],
status: json['status'],
);
}
}
class _AdmobPageState extends State<AdmobPage> {
var deviceSize;
int status;
Future<List<Prizes>> fetchPrizes() async {
final storage = new FlutterSecureStorage();
String accessToken = await storage.read(key: "accessToken");
List<Prizes> list;
final response = await http.get(UIData.apiUrl + 'users', headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer ' + accessToken,
});
if (response.statusCode == 200) {
var res = await http.get(
UIData.apiUrl + 'paymentmethods?status=1',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer ' + accessToken,
});
if (res.statusCode == 200) {
var data = json.decode(res.body);
var rest = data["data"] as List;
list = rest.map<Prizes>((json) => Prizes.fromJson(json)).toList();
}
return list;
} else {
throw Exception('Failed to load photos');
}
}
@override
Widget build(BuildContext context) {
deviceSize = MediaQuery.of(context).size;
return FutureBuilder(
future: checkAuthenticated(),
builder: (context, snapshot) {
return snapshot.data ?? true ? _scaffold() : LoginPage();
});
}
Widget getPrizesList(List<Prizes> prize) {
return Container(
height: deviceSize.height - 150,
child: ListView.builder(
physics: const AlwaysScrollableScrollPhysics(),
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: prize.length,
padding: EdgeInsets.zero,
itemBuilder: (context, position) {
return GFCard(
boxFit: BoxFit.cover,
image: Image.asset(prize[position].photo),
content: Text(prize[position].name),
buttonBar: GFButtonBar(
alignment: WrapAlignment.center,
children: <Widget>[
GFButton(
onPressed: () {},
text: 'Min 50 Coin',
color: Colors.blueGrey.shade800,
),
],
),
);
}),
);
}
Widget bodyData() {
return SingleChildScrollView(
child: Column(
children: <Widget>[
FutureBuilder(
future: fetchPrizes(),
builder: (context, snapshot) {
return snapshot.data != null
? getPrizesList(snapshot.data)
: Center(child: CircularProgressIndicator());
})
//CommonDivider(),
],
),
);
}
Widget _scaffold() => CommonScaffold(
backGroundColor: Colors.grey.shade100,
actionFirstIcon: null,
appTitle: "MyApp",
showFAB: true,
//scaffoldKey: _scaffoldState,
showDrawer: true,
centerDocked: true,
floatingIcon: Icons.gamepad,
bodyData: bodyData(),
showBottomNav: true,
);
}
Как перестать запускать функции снова на предыдущих страницах, когда я меняю страницу?
Спасибо.