Как создать собственный ListWheelScrollView, как на изображении ниже, во флаттере? - PullRequest
1 голос
/ 05 августа 2020

Я добавил два ListWheelScrollView для отображения значения, сначала для чисел (1-9), а затем для строковых значений, таких как час, день, неделя и месяц, но дизайн элемента фокуса не отображается, как на изображении ниже.

список колес, который я хочу enter image description here

Piece of code:


Container(
                   // padding:const EdgeInsets.all(5) ,
                   margin: const EdgeInsets.only(left: 10, right: 10),
                 
                   height: MediaQuery.of(context).size.height/4,
                    decoration: BoxDecoration(
                        color: Colors.grey[100],
                       borderRadius: BorderRadius.circular(10)
                     ),
                   child: Row(
                     mainAxisAlignment: MainAxisAlignment.center,
                     children: [
                       Container(
                         height: MediaQuery.of(context).size.height/4,
                         width:  MediaQuery.of(context).size.width/2.5,
                        
                         child: ListWheelScrollView(
                           
                           itemExtent: 20,
                           useMagnifier: true,
                           diameterRatio: 1.0,
                           magnification: 2.0,
                           onSelectedItemChanged: (val){
                            
                             setState(() {
                               selectedReminderVal = reminderVal[val];
                               print("selectedReminderVal:$selectedReminderVal");
                             });

                           },
                           children: 
                         
                            reminderVal.map((item) =>Text(item,
                              style: TextStyle(
                                 fontSize:15,
                                 // fontWeight:FontWeight.bold,
                                 
                               ),
                             ),)
                           .toList(),
                            
                         ),
                       ),
                        Container(
                         height: MediaQuery.of(context).size.height/4,
                         width:  MediaQuery.of(context).size.width/2.5,
                         child: ListWheelScrollView(
                           itemExtent: 20,
                           useMagnifier: true,
                           diameterRatio: 1.0,
                           magnification: 2.0,
                           onSelectedItemChanged: (val){
                             setState(() {
                               selectedReminderDay = reminderDay[val];
                               print("selectedReminderDay:$selectedReminderDay");
                             });
                           },
                           children:  reminderDay.map((item) =>Text(item,
                              style: TextStyle(
                                 fontSize:15,
                                 // fontWeight:FontWeight.bold,
                                 
                               ),
                             ),)
                         .toList(),
                           
                                                       
                         ),
                       ),
                     ],
                   )
                 ),

What I got from this code:

введите описание изображения здесь

1 Ответ

1 голос
/ 05 августа 2020

Вы можете использовать два CupertinoPicker в Row:

 @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Container(
          child: Center(
            child: CupertinoButton(
              onPressed: showPicker,
              child: Text('Pick'),
              color: Colors.blueAccent,
            ),
          ),
        ),
      ),
    );
  }

  showPicker() {
    showModalBottomSheet(
        context: context,
        builder: (BuildContext context) {
          return Container(
              height: 200.0,
              color: Colors.white,
              child: Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Expanded(
                      child: CupertinoPicker(
                          scrollController: new FixedExtentScrollController(
                            initialItem: 0,
                          ),
                          itemExtent: 30,
                          backgroundColor: Colors.white,
                          onSelectedItemChanged: (int index) {
                            setState(() {
                              selectedReminderVal = index;
                            });
                          },
                          children: reminderVal
                              .map(
                                (item) => Center(
                                  child: Text(
                                    item,
                                    style: TextStyle(
                                      fontSize: 16,
                                      // fontWeight:FontWeight.bold,
                                    ),
                                  ),
                                ),
                              )
                              .toList()),
                    ),
                    Expanded(
                      child: CupertinoPicker(
                          scrollController: new FixedExtentScrollController(
                            initialItem: 0,
                          ),
                          itemExtent: 30,
                          backgroundColor: Colors.white,
                          onSelectedItemChanged: (int index) {
                            setState(() {
                              selectedReminderDay = index;
                            });
                          },
                          children: reminderDay
                              .map(
                                (item) => Center(
                                  child: Text(
                                    item,
                                    style: TextStyle(
                                      fontSize: 16,
                                      // fontWeight:FontWeight.bold,
                                    ),
                                  ),
                                ),
                              )
                              .toList()),
                    ),
                  ]));
        });
  }

Результат:

res

...