Я пытаюсь использовать этот пакет для своего мобильного приложения. Создает эффект для всех переходных страниц. Вот ссылка на пакет: https://pub.dev/packages/awesome_page_transitions. Рекомендуемый код:
onPressed: () => Navigator.push(
context,
AwesomePageRoute(
transitionDuration: Duration(milliseconds: 600),
exitPage: widget,
enterPage: SecondScreen(),
transition: CubeTransition(),
),
),
enterPage - это страница назначения, все в порядке. Моя проблема с exitPage, там написано «виджет». На одной из моих страниц он работает, «виджет» распознается, поэтому ошибок нет, и все работает, но на других страницах у меня есть ошибка «undefined name 'widget'».
Итак, мой вопрос в том, что такое виджет "и почему он не распознается на некоторых страницах.
Вот мой код:
import 'package:flutter/material.dart';
import 'login.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'dart:async';
import 'package:flutter_app/home.dart';
import 'package:flutter_app/globals.dart' as globals;
import 'package:awesome_page_transitions/awesome_page_transitions.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
final appTitle = 'WINACOIN';
String mail;
String pass;
Widget build(BuildContext context) {
return MaterialApp(
title: 'WINACOIN',
theme: ThemeData(
primarySwatch: Colors.blue,
fontFamily: 'Azonix',
),
home: MyHome()
);
}
}
class MyHome extends StatelessWidget {
@override
String mail='';
String pass='';
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(
title: new Text("WINACOIN"),
),
body: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Colors.blue[400],Colors.blue[600],Colors.blue[800]],
begin: Alignment.topLeft,
end: Alignment.bottomRight),
),
child :
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
margin : const EdgeInsets.only(bottom:20),
child: Text('JEU 100 % GRATUIT 100 % GAGNANT',style: TextStyle(color: Colors.white,fontSize: 15,fontWeight: FontWeight.w500)),
),
Container(
margin : const EdgeInsets.only(bottom:20),
child: Text('GAGNEZ DES CADEAUX ET DES EUROS',style: TextStyle(color: Colors.white,fontSize: 15,fontWeight: FontWeight.w500)),
),
RaisedButton(
textColor: Colors.white,
color: Colors.green,
child: Text('COMMENCER',style: TextStyle(color: Colors.white,fontSize: 15,fontWeight: FontWeight.w500)),
onPressed: () async {
bool islog = await isconnect();
if (islog==false) {
Navigator.push(
context,
AwesomePageRoute(
transitionDuration: Duration(milliseconds: 1000),
exitPage: MyApp(),
enterPage: LoginPage(),
transition: RotateUpTransition(),
),
);
}
else {
Navigator.push(
context,
AwesomePageRoute(
transitionDuration: Duration(milliseconds: 1000),
exitPage: MyApp(),
enterPage: HomePage(),
transition: RotateUpTransition(),
),
);
}
},
)
],
),
),
)
);
}
Future <bool> isconnect() async {
// Create storage
final storage = new FlutterSecureStorage();
// Read value
mail = await storage.read(key: "e");
pass = await storage.read(key: "p");
if (mail!=null && pass!=null) {
var url = 'https://www.easytrafic.fr/game_app/login.php';
// Store all data with Param Name.
var data = {'email': mail, 'password': pass};
// Starting Web API Call.
var response = await http.post(url, body: json.encode(data),headers: {'content-type': 'application/json','accept': 'application/json'});
print(json.decode(response.body));
// Getting Server response into variable.
Map <String,dynamic> map = json.decode(response.body);
// If the Response Message is Matched.
if (map["status"] == 1) {
// l'email et le mot de passe sont correct
final storage = new FlutterSecureStorage();
await storage.write(key: "i", value: map["id_membre"]);
await storage.write(key: "e", value: mail);
await storage.write(key: "p", value: pass);
await storage.write(key: "t", value: map["jwt"]);
globals.id_membre=map["id_membre"];
globals.token=map["jwt"];
globals.balance=double.parse(map["balance"]);
globals.points=map["nb_points"];
print("la connexion a réussi avec les identifiants");
return true;
}
else {
// l'email et mot de passe stocké ne permettent pas de se connecter
// rediriger vers la fenêtre de login
print("mauvais identifiants");
return false;
}
}
else {
// email et password n'existe pas
print("email et password vide");
return false;
}
}
}
У меня немного другая проблема на другой странице, это класс, который отображает ящик :
Вот код:
import 'package:flutter/material.dart';
import 'package:flutter_app/grille_lotosport.dart';
import 'package:flutter_app/liste_grattage.dart';
import 'package:flutter_app/liste_tombolas.dart';
import 'package:flutter_app/login.dart';
import 'package:flutter_app/home.dart';
import 'package:flutter_app/liste_grille_lotto.dart';
import 'package:flutter_app/liste_pronostics.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:flutter_app/globals.dart' as globals;
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:flutter_app/boutique.dart';
import 'package:awesome_page_transitions/awesome_page_transitions.dart';
class DrawerOnly extends StatelessWidget {
@override
Widget build (BuildContext ctxt) {
return new Drawer(
child: new ListView(
padding: EdgeInsets.zero,
children: <Widget>[
new DrawerHeader(
child: Column(
children: <Widget>[
Container(
padding: EdgeInsets.all(5),
child: Icon(
FontAwesomeIcons.userAlt,
size: 40,
color: Colors.white
),
),
Container(
margin: EdgeInsets.only(bottom:10),
padding: EdgeInsets.all(5),
width: 150,
height:35,
decoration: BoxDecoration(
border: Border.all(
color: Colors.white,
width: 2,
),
borderRadius: BorderRadius.circular(25),
),
child: Center(
child: RichText(
text: TextSpan(
children: [
WidgetSpan(
child: Icon(FontAwesomeIcons.euroSign,color: Colors.amber[200],size:20)
),
TextSpan(
text: (globals.balance??0).toString(),
style: TextStyle(fontSize: 20,fontWeight: FontWeight.w800,color: Colors.white)
),
],
),
)
)
),
Container(
width: 150,
height:35,
decoration: BoxDecoration(
border: Border.all(
color: Colors.white,
width: 2,
),
borderRadius: BorderRadius.circular(25),
),
child: Center(
child: RichText(
text: TextSpan(
children: [
WidgetSpan(
child: Icon(FontAwesomeIcons.solidGem,color: Colors.amber[200],size: 20)
),
TextSpan(
text: " "+(globals.points??0).toString(),
style: TextStyle(fontSize: 20,fontWeight: FontWeight.w800,color: Colors.white)
),
],
),
)
)
),
],
),
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: <Color>[
Colors.blue[400],Colors.blue[600],Colors.blue[800]
],
),
color: Colors.lightBlue,
borderRadius: new BorderRadius.only(
bottomLeft: const Radius.circular(25.0),
bottomRight: const Radius.circular(25.0)
)
),
),
new ListTile(
leading: new Icon(FontAwesomeIcons.home),
title: new Text("ACCUEIL"),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new HomePage()));
},
),
new ExpansionTile(
leading: new Icon(FontAwesomeIcons.play),
title: Text("NOS JEUX"),
children: <Widget>[
new ListTile(
title: new Text("LOTOSPORT"),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new Affiche_Liste_grille()));
},
),
new ListTile(
title: new Text("PRONOSTICS"),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new Affiche_Matchs())
);
}
),
new ListTile(
title: new Text("LOTERIE"),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new Affiche_Liste_Lotto()));
},
),
new ListTile(
title: new Text("TOMBOLA"),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new Affiche_Liste_Tombola())
);
},
),
new ListTile(
title: new Text("TICKET A GRATTER"),
onTap:() {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new Affiche_Liste_Grattage()));
}
)
],
),
new ListTile(
leading: new Icon(FontAwesomeIcons.gift),
title: new Text("BOUTIQUE"),
onTap: () {
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new Affiche_Boutique()));
},
),
new ListTile(
leading: new Icon(FontAwesomeIcons.signOutAlt),
title: new Text("DECONNEXION"),
onTap: () async {
final storage = new FlutterSecureStorage();
await storage.deleteAll();
globals.id_membre="";
globals.token="";
globals.balance=0.00;
Navigator.pop(ctxt);
Navigator.push(ctxt,
new MaterialPageRoute(builder: (ctxt) => new LoginPage()));
},
),
],
)
);
}
}
Я хочу использовать тот же метод, поэтому:
Navigator.pu sh (context, AwesomePageRoute (transitionDuration: Duration (миллисекунды: 600), exitPage: widget, enterPage: SecondScreen (), transition: CubeTransition (),),), контекст в порядке, но страница выхода - та же проблема, к которой я не могу получить доступ, и я не могу вызвать page напрямую, потому что в этом классе я не знаю, на какой мы странице. Возможно, мне нужно каждый раз передавать эту информацию этому классу, но как ??? На данный момент я называю это так: drawer: new DrawerOnly (), на каждой странице я могу передать информацию о виджете? Если да, то как? Спасибо ''