#flutter
#трепетать
Вопрос:
Привет, я новичок в flutter, я использовал образец базы данных для получения данных о 10 пользователях. эти данные отображаются в плитке списка с флажком «Ведущий элемент» (для выбора / отмены выбора). Теперь мне нужна помощь в отображении выбранных данных на другой странице, как только я нажму кнопку корзины на панели приложений..
вот мой главный
import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_application_http_get/example.dart'; import 'package:flutter_application_http_get/screen.dart'; import 'package:flutter_application_http_get/selected.dart'; import 'package:flutter_application_http_get/sunday_state.dart'; import 'package:http/http.dart' as http; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: Sunday(), ); } } class Sunday extends StatefulWidget { const Sunday({Key? key}) : super(key: key); @override _SundayState createState() =gt; _SundayState(); }
API, Вызванный Здесь
class _SundayState extends Statelt;Sundaygt; { var users = []; Future getUserData() async { var res = await http.get(Uri.https("jsonplaceholder.typicode.com", "users")); var jsonData = jsonDecode(res.body) as List; setState(() { users = jsonData; }); } @override void initState() { super.initState(); getUserData(); } final notification = [SundayCheckBoxState()]; late final post;
данные с поста, если они проверены, напечатаны..
getCheckboxItems() { users.forEach((post) { if (post['checked'] == true) { print(post); } }); }
здесь при нажатии мне нужно отобразить проверенные данные на другой странице
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("User Data"), actions: [ IconButton( onPressed: getCheckboxItems, icon: Icon(Icons.shopping_cart)) ], ), body: Container( child: Card( margin: EdgeInsets.all(20.0), child: ListView.builder( itemCount: users.length, itemBuilder: (context, i) { final post = users[i]; return Card( elevation: 5, child: Padding( padding: const EdgeInsets.all(12.0), child: ListView(shrinkWrap: true, children: [ ListTile( leading: Checkbox( value: post['checked'] ?? false, onChanged: (value) { setState(() { post['checked'] = value; }); }), title: Text("${post['id']}" "${post['name']}"), ), ]) )); }), ), ), ); }
Комментарии:
1. создайте конструктор на другой странице и через маршрут страницы отправьте свои данные на другую страницу
Ответ №1:
Вы можете попробовать эту логику, она сработала для меня :
var _isSelectedCheckBoxArr = []; var _addSelectedValueArr = []; Checkbox( value: _isSelectedCheckBoxArr[i], materialTapTargetSize: MaterialTapTargetSize .shrinkWrap, onChanged: (s) { setState(() { _isSelectedCheckBoxArr[i] = !_isSelectedCheckBoxArr[i]; }); print( "$_tag onChanged: (s): $s"); if (s) { setState(() { _addSelectedValueArr.add( "${users[i]}"); }); } else if (!s) { setState(() { _addSelectedValueArr .remove( users[i]); }); } }),
Затем по нажатию кнопки «Корзина» передайте массив _addSelectedValueArr в конструкторе экрана, который вы хотите отобразить.