#flutter #flutter-layout
Вопрос:
Итак, это код для файла register.dart:
import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'list.dart'; import 'main.dart'; class Register extends StatefulWidget { const Register({Key? key}) : super(key: key); @override _RegisterState createState() =gt; _RegisterState(); } class _RegisterState extends Statelt;Registergt; { TextEditingController user = TextEditingController(); TextEditingController pass = TextEditingController(); Future register() async { var url = 'https://weplant.zanhrastnik.com/register.php'; var response = await http.post(Uri.parse(url), body: { "email": user.text, "password": pass.text, }); var data = json.decode(response.body); if (data == "Success") { Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) =gt; const AllPlants())); } else { showDialog( context: context, builder: (BuildContext context) =gt; _buildPopupDialog(context), ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text( 'Login SignUp', style: TextStyle(fontWeight: FontWeight.bold), ), ), body: Container( height: 300, child: Card( color: Colors.amber, child: Column( children: lt;Widgetgt;[ const Padding( padding: EdgeInsets.all(8.0), child: Text( 'Register', style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold), ), ), Padding( padding: const EdgeInsets.all(8.0), child: TextField( decoration: InputDecoration( labelText: 'Username', prefixIcon: const Icon(Icons.person), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8)), ), controller: user, ), ), Padding( padding: const EdgeInsets.all(8.0), child: TextField( obscureText: true, decoration: InputDecoration( labelText: 'Password', prefixIcon: const Icon(Icons.lock), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8)), ), controller: pass, ), ), Row( children: lt;Widgetgt;[ Expanded( child: ElevatedButton( child: const Text('Register', style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Colors.white)), onPressed: () { register(); }, ), ), Expanded( child: MaterialButton( color: Colors.amber[100], child: const Text('Login', style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Colors.black)), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) =gt; const MyApp(), ), ); }, ), ), ], ) ], ), ), ), ); } Widget _buildPopupDialog(BuildContext context) { return AlertDialog( title: const Text('Error'), content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: const lt;Widgetgt;[ Text("Email or password are incorrect!"), ], ), actions: lt;Widgetgt;[ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text('Close'), ), ], ); } }
И это код файла, который я пытаюсь протолкнуть в aka list.dart
import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:http/http.dart' as http; import 'package:weplant/entities/plant.dart'; import 'package:line_awesome_flutter/line_awesome_flutter.dart'; import 'package:weplant/detail_plant.dart'; import 'package:google_fonts/google_fonts.dart'; void main() { runApp(const AllPlants()); } class AllPlants extends StatelessWidget { const AllPlants({Key? key}) : super(key: key); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'WePlant', theme: ThemeData( textTheme: GoogleFonts.robotoTextTheme( Theme.of(context).textTheme, ), scaffoldBackgroundColor: const Color(0xFFFEFFEE) ), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({Key? key, required this.title}) : super(key: key); final String title; @override Statelt;MyHomePagegt; createState() =gt; _MyHomePageState(); } class _MyHomePageState extends Statelt;MyHomePagegt; { final Listlt;Plantgt; _plants = lt;Plantgt;[]; Future fetchPlants() async { var url = 'https://weplant.zanhrastnik.com/plants/'; var response = await http.get(Uri.parse(url)); var plants = lt;Plantgt;[]; if (response.statusCode == 200){ var plantsJson = jsonDecode(response.body); for (var plantJson in plantsJson){ plants.add(Plant.fromJson(plantJson)); } } return plants; } @override void initState() { fetchPlants().then((value) { setState(() { _plants.addAll(value); }); }); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( leading: const Icon( LineAwesomeIcons.bars, color: Color.fromRGBO(254, 255, 238, 1.0) ), title: Image.asset( 'assets/weplant_logo.png', height: 50, ), centerTitle: true, actions: const [ Padding( padding: EdgeInsets.symmetric(horizontal: 16), child: Icon( LineAwesomeIcons.search, color: Color.fromRGBO(254, 255, 238, 1.0) ), ), ], backgroundColor: const Color.fromRGBO(156, 175, 136, 1.0), ), body: Padding( child: ListView.builder( itemBuilder: (context, index) { return Card( color: const Color.fromRGBO(254, 255, 238, 1.0), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), side: const BorderSide(color: Color.fromRGBO(230, 227, 211, 1.0), width: 1) ), child: Padding( padding: const EdgeInsets.only(top: 8.0, bottom: 8.0, left:4.0, right: 4.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: lt;Widgetgt;[ ListTile( leading: ClipRRect( borderRadius: BorderRadius.circular(8.0), child: Image.network( _plants[index].pImage, width: 50, ), ), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), trailing: const Icon( LineAwesomeIcons.angle_right, color: Color.fromRGBO(156, 175, 136, 1.0), ), title: Text( _plants[index].pName, ), subtitle: Text( _plants[index].pLatinName ), onTap: () { Navigator.push( context, MaterialPageRoute(builder: (context) =gt; DetailPage(plant: _plants[index],))); }, ), ], ), )); }, itemCount: _plants.length, ), padding: const EdgeInsets.only(top:4.0) ), ); } }
Он показывает пустой экран только тогда, когда я нажимаю, и я понятия не имею, как кто-нибудь может знать, почему он это делает? Я попытался добавить Героя, так как это было единственное решение, которое я нашел в Интернете, но оно тоже не сработало.
Комментарии:
1. Это происходит потому, что вы вызываете несуществующую страницу: (MyApp()) на странице регистрации. Это должна быть моя страница()
2. @Дэвис, Как я это пропустил, извините за беспокойство. И спасибо, что помогли мне
Ответ №1:
Вам нужно вызвать класс в MaterialApp вот так,
void main() { runApp(const AllPlants()); } class AllPlants extends StatelessWidget { const AllPlants({Key? key}) : super(key: key); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'WePlant', theme: ThemeData( textTheme: GoogleFonts.robotoTextTheme( Theme.of(context).textTheme, ), scaffoldBackgroundColor: const Color(0xFFFEFFEE) ), home: Register() // you call any class here as per your requirement ); } }